Servlet 5 JSP EL JSTL

JSP:
JSP的java代码片段写法,声明变量,获取值
JSP的三种注释
JSP的session对象,内置out对象
JSP <%@page 指令 错误页面
JSP <%@page 指令 不对EL进行解析
JSP <%@include 指令 包含目标页面
使用 pageContext向jsp四个范围存取数据
使用out输出数据
使用<jsp:include 包含页面
EL函数(用来获取四大域中数据):
使用EL 获得四个 JSP数据范围 page request session application的数据
EL 获得复杂对象数据 EL必须使用[] 情况
EL 执行运算
使用EL 快速读取cookie 使用EL 获得工程名
EL 不能直接调用 java静态代码 自定义EL函数
EL标签库(需要引入官方tld文件)
JSTL(JAVA标准标签库):
使用标签前,需要引入tld文件,导入jar包 jstl.jar standard.jar
<c:catch 捕获异常标签
<c:choose 选择标签
<c:forEach 循环标签
<c:if 判断标签
<c:import 效果类似包含
<c:out 输出标签
<c:redirect 重定向标签
<c:remove 删除属性标签
<c:set 设置属性标签
<c:forTokens 循环标记标签
<c:url url标签,结合<c:param标签 对中文完成URL编码

JSP:
JSP的java代码片段写法,声明变量,获取值

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 由多个% 共同组合为一个java代码片段 -->
<%
    for(int i=0; i<10 ;i++){
        out.println(i);// i会被输出浏览器 html源码中,显示在页面上
    }
%>

<!-- 下面这种写法,for输出到页面内容 便于被HTML代码修饰 -->
<%
    for(int i=0; i<10 ;i++){
%>
    <h3><%=i %></h3>
<%     
    }
%>
<hr/>
<%=x %> <!-- 输出内容 0 ,成员变量值 0 -->
<% x=5; %><!-- 将成员变量x赋值5 -->
<% int x = 10; %> <!-- 定义局部变量x 值 10-->
<%! int x = 0; %> <!-- 声明成员变量x 值 0 -->
<% this.x = 20; %> <!-- 将成员变量x的值 赋值 20  -->
<%=x %> <!-- 输出局部变量 x的值 ,10  -->
</body>
</html>

JSP的三种注释

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>JSP 支持三种注释</h1>
<%-- JSP注释 --%>
<%!
    /** java文档注释 */
    public int add(int a,int b){
        return a+ b;
    }
%>
<%
    /* 多行注释 */
    // 单行注释
%>
<!-- HTML注释   -->

<hr/>
<!-- HTML注释 不能阻止java代码的执行 -->
<% 
    /*
    String s = "abc";
    System.out.print(s);
    int a  // 编译错误
    */
%>

</body>
</html>

JSP的session对象,内置out对象

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page session="false" %>
<%@ page buffer="16kb" autoFlush="false" %>
<%@page import="java.util.List"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>如果session属性值为true ,可以直接使用内置session 对象</h1>
<%
    request.getSession().setAttribute("name","itcast");
%>
<%=request.getSession().getAttribute("name") %>
<h1> javax.servlet包 、javax.servlet.http包、javax.servlet.jsp包 不需要导包</h1>
<%
    Cookie[] cookie = request.getCookies();
    List list ;
%>
<h1>通过jsp 的 内置out对象,生成HTML源代码</h1>
<% out.println("Hello ,jsp"); %>
</body>
</html>

JSP <%@page 指令 错误页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 通过 errorPage 属性 控制页面发生错误后,跳转到哪里 -->
<%--<%@page errorPage="/jsp/5.jsp" %>--%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 发生错误的页面 -->
<%
    int d = 1/0;
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 解决错误的页面 (友好页面) -->
<h1>对不起 服务器出问题了,请稍后访问!</h1>
</body>
</html>

JSP <%@page 指令 不对EL进行解析

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 设置true 不对EL 进行解析  -->
<%@ page isELIgnored="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通过设置 page指令 isELIgnored 使服务器解析或者忽略 EL表达式 -->
<%
    request.setAttribute("age",20);
%>
${requestScope.age }
</body>
</html>

JSP <%@include 指令 包含目标页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 主页 -->
<!-- LOGO图片、菜单栏、版权信息都是相同页面,抽取公共页面 ,通过include 指令包含目标页面-->
<%@ include file="/jsp/7/logo.jsp" %>
<%@ include file="/jsp/7/menu.jsp" %>
<h1>页面正文</h1>
<%@ include file="/jsp/7/footer.jsp" %>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>LOGO图片</h1>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>菜单栏</h1>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>版权信息</h1>

使用 pageContext向jsp四个范围存取数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用page 时候,可以直接使用this   -->
<!-- 使用 pageContext向jsp四个范围存取数据  -->
<%
    // 等价于 pageContext.setAttribute("info","page");
    pageContext.setAttribute("info","page",PageContext.PAGE_SCOPE);

    // 等价于 request.setAttribute("info","request");
    pageContext.setAttribute("info","request",PageContext.REQUEST_SCOPE);

    // 等价于 session.setAttribute("info","session");
    pageContext.setAttribute("info","session",PageContext.SESSION_SCOPE);
    
    // 等价于 application.setAttribute("info","application");
    pageContext.setAttribute("info","application",PageContext.APPLICATION_SCOPE);
%>
<%=pageContext.getAttribute("info",PageContext.PAGE_SCOPE) %>
<%=pageContext.getAttribute("info",PageContext.REQUEST_SCOPE) %>
<!-- 按照 page - request - session - application 顺序查找 -->
<%=pageContext.findAttribute("info") %>
</body>
</html>

使用out输出数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>使用out输出数据</h1>
<%="Hello" %>
<%
    out.println("AAAA");
    out.flush();// 输出内容
    response.getWriter().println("BBBB");
    out.println("CCCC");
%>
</body>
</html>

使用<jsp:include 包含页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 主页 -->
<!-- LOGO图片、菜单栏、版权信息都是相同页面,抽取公共页面 ,通过include 标签包含目标页面-->
<jsp:include page="/jsp/7/logo.jsp"></jsp:include>
<jsp:include page="/jsp/7/menu.jsp"></jsp:include>
<h1>JSP 标签 include 页面正文</h1>
<jsp:include page="/jsp/7/footer.jsp"></jsp:include>
</body>
</html>

EL函数(用来获取四大域中数据):
使用EL 获得四个 JSP数据范围 page request session application的数据

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>使用EL 获得四个 JSP数据范围 page request session application的数据 </h1>
<%
    pageContext.setAttribute("pageinfo","my page");
    request.setAttribute("requestinfo","my request");
    session.setAttribute("sessioninfo","my session");
    application.setAttribute("applicationinfo","my application");
%>
${pageScope.pageinfo }
${requestScope.requestinfo }
${sessionScope.sessioninfo }
${applicationScope.applicationinfo }
<hr/>
<!-- 如果不指定 scope, 默认调用 pageContext.findAttribute方法 -->
<!-- findAttribute依次从 page request session application 中进行查找 -->
${pageinfo }
${requestinfo }
${sessioninfo }
${applicationinfo }
<hr/>
<!-- 使用EL 获取不存在属性,返回"" 而不是null -->
传统: <%=request.getAttribute("city") %> <br/>
EL : ${ requestScope.city}<br/>

</body>
</html>

EL 获得复杂对象数据 EL必须使用[] 情况

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="cn.itcast.domain.Person"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- EL 获得复杂对象数据 -->
<!-- 1 数组 -->
<%
    pageContext.setAttribute("arr",new String[] {"中国","美国"});
%>
${pageScope.arr[0] }
<!-- 2 List用法和数组相同 -->
<%
    List list = new ArrayList();
    list.add("北京");
    list.add("上海");
    pageContext.setAttribute("list",list);
%>
${pageScope.list[1] }
<!-- 3、Map集合 通过.key获得value值 -->
<%
    Map map = new HashMap();
    map.put("aaa","111");
    map.put("bbb","222");
    pageContext.setAttribute("map",map);
%>
${pageScope.map.bbb }
<!-- 4、获得java对象 和 当中属性 -->
<%
    Person person = new Person();
    person.setName("张三");
    person.setAge(20);
    pageContext.setAttribute("person",person);
%>
${pageScope.person.name }
${pageScope.person.age }
<hr/>
<!--必须使用[] 情况 -->
<%
    // 数组和list集合 必须用[]取值
    pageContext.setAttribute("arr",new String[] {"中国","美国"});
%>
${pageScope.arr[1]}
<%
    // 如果属性名称 含有. 特殊字符,必须用[]
    pageContext.setAttribute("aaa.bbb","itcast");                       
%>
${pageScope["aaa.bbb"] }
</body>
</html>

EL 执行运算

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.HashMap"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- EL 执行运算 -->
<%
    pageContext.setAttribute("n1",10);
    pageContext.setAttribute("n2",20);
%>
${n1+n2 }
<%
    pageContext.setAttribute("n3","10");
    pageContext.setAttribute("n4","20");
%>
${n3+n4+n5 }
<h1>empty运算符号</h1>
<!-- 因为user不存在,所以返回true -->
${empty user }
<%
    pageContext.setAttribute("list",new ArrayList());
    pageContext.setAttribute("map",new HashMap());
%>
${empty list }
${empty map }
${not empty map }
<h1>二元表达式 </h1>
${(empty username)? "用户名不存在":username }
</body>
</html>

使用EL 快速读取cookie 使用EL 获得工程名

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    //向客户端写出一个cookie
    Cookie cookie = new Cookie("company","itcast");
    cookie.setPath("/");
    cookie.setMaxAge(120);
    
    response.addCookie(cookie);
%>

<!-- 使用EL 快速读取cookie -->
${cookie.company.value } 
<!-- cookie.get("company").getValue() -->

<%
    // 读取cookie
    Cookie[] cookies = request.getCookies();
    if(cookies == null){
        out.print("cookie不存在!");
    }else{
        for(Cookie c : cookies){
            if(c.getName().equals("company")){
                out.print(c.getValue());
                return;
            }
        }
        
        out.print("cookie不存在!");
    }
%>
<!-- 编写一个链接 -->
<a href="/day8/el/1.jsp" >link</a>
<!-- 使用EL 获得工程名 -->
<a href="${pageContext.request.contextPath }/el/1.jsp" >link</a>
</body>
</html>

EL 不能直接调用 java静态代码 自定义EL函数

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="cn.itcast.utils.URLOperation"%>
<!-- 通过taglib 引用 tld文件 -->
<%@taglib uri="http://www.itcast.cn/myel" prefix="myel" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- %中直接调用 java代码 -->
<%=URLOperation.urlencode("中国") %>
<hr/>
<!-- EL 不能直接调用 java静态代码 -->
${myel:urlencode("中国") }
</body>
</html>

EL标签库(需要引入官方tld文件)

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 引用EL 官方tld 文件 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
${fn:toLowerCase("sdfadsfASDFADSASdasDFDSFDSFADSFASDA") }
<!-- HTML转义 -->
${fn:escapeXml("<a href='/day8/index.jsp'>link</a>") }
${fn:split("aaa,bbb,ccc",",")[2] }
</body>
</html>

JSTL(JAVA标准标签库):
使用标签前,需要引入tld文件,导入jar包 jstl.jar standard.jar
<c:catch 捕获异常标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    try {
        int d = 1/0;
    }catch(Exception e){
        e.printStackTrace();
    }
%>
<!-- 异常就会被捕获,保存page范围 e 对象中 -->
<c:catch var="e">
    <% 
        String s = "abc";
        s.charAt(4);
    %>
</c:catch>
${e.message }
</body>
</html>

<c:choose 选择标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    int weekday = 1;
    if(weekday == 1){
        out.print("星期一");
    }else if(weekday==2){
        out.print("星期二");
    }else if(weekday==3){
        out.print("星期三");
    }else if(weekday==4){
        out.print("星期四");
    }else{
        out.print("输入无效!");
    }
%>
<c:set var="weekday" value="1" scope="page"></c:set>
<c:choose>
    <c:when test="${weekday==1}">
        星期一
    </c:when>
    <c:when test="${weekday==2}">
        星期二
    </c:when>
    <c:when test="${weekday==3}">
        星期三
    </c:when>
    <c:otherwise>
        输入无效
    </c:otherwise>
</c:choose>
</body>
</html>

<c:forEach 循环标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 遍历10到100的偶数,如果数字是第3的倍数个 显示红色 -->
<c:forEach begin="10" end="100" step="2" var="i" varStatus="status">
    <c:if test="${status.count % 3 == 0}">
        <font color="red">${i }</font>
    </c:if>
    <c:if test="${status.count % 3 != 0}">
        <font color="blue">${i }</font>
    </c:if>
</c:forEach>
<hr/>
<!-- 通过foreach控制指定次数循环 -->
<!-- 从1 遍历 10 步长 1 ,每个值保存i中 -->
<!-- 1 - 10求和 -->
<c:set var="sum" value="0" scope="page"></c:set>
<c:forEach begin="1" end="10" step="1" var="i">
    ${i }
    <c:set var="sum" value="${sum + i}" scope="page"></c:set>
</c:forEach>
${sum }
<hr/>
<!-- Map遍历 -->
<%
    Map map = new HashMap();
    map.put("aa","11");
    map.put("bb","22");
    pageContext.setAttribute("map",map);
%>
<c:forEach var="entry" items="${map}">
    ${entry.key } ${entry.value }<br/>
</c:forEach>
<hr/>
<!-- List遍历 -->
<%
    List list = new ArrayList();
    list.add("111");
    list.add("222");
    pageContext.setAttribute("list",list);
%>
<c:forEach var="e" items="${list}">
    ${e }
</c:forEach>
<hr/>
<!-- 数组遍历 -->
<%
    int[] arr = {3,54,45,546,56,23,4};
    pageContext.setAttribute("arr",arr);
%>
<!-- for(int i:arr ) 这里 arr 就是 item,i就是var -->
<!-- 将arr每个元素取出,保存page范围的i中 -->
<c:forEach var="i" items="${arr}">
    ${i }
</c:forEach>
</body>
</html>

<c:if 判断标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 引用了一个tld 中所有标签 -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 使用 c:if标签  -->
<h1>c:if标签作用 用来取代 页面中 if条件语句的</h1>
<%
    int m = 10;
    if(m>5){
        out.print("m的值大于5!<br/>");
    }
%>
<hr/>
<!-- 使用标签 -->
<c:set var="n" value="10" scope="page"></c:set>
<c:if test="${n>5}"> 
    n的值大于5!
</c:if>
</body>
</html>

<c:import 效果类似包含

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Import</h1>
<!-- 引入foreach.jsp 效果类似包含-->
<c:import url="/jstl/foreach.jsp" context="/day8"></c:import>
<hr/>
<!-- 引入不显示,将内容保存另一个变量中 -->
<c:import url="/jstl/foreach.jsp" context="/day8" var="content" scope="page"></c:import>
${content }
</body>
</html>

<c:out 输出标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 使用标签库前 必须先导入 tld 中标签 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- c:out 输出数据到浏览器 -->
<c:out value="Hello c out "></c:out>
Hello c out 
<!-- 输出一个变量 -->
<c:set var="m" value="10" scope="page"/>
<c:out value="${m}"></c:out>
${m }
<!-- 转义HTML 默认转义,通过设置escapeXml 为false 不进行转义-->
<c:out value="<a href='xxx'>link</a>" />
${fn:escapeXml("<a href='xxx'>link</a>") }
<!-- 允许输出默认值 ,如果city不存在,输出北京-->
<c:out value="${city}" default="北京"></c:out>
${empty city?"北京":city }
</body>
</html>

<c:redirect 重定向标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%    
    // 以前重定向
    // response.sendRedirect("/day8/index.jsp");
%>
<c:redirect url="/index.jsp" context="/day8"></c:redirect>
</body>
</html>

<c:remove 删除属性标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    request.setAttribute("age",20);
    // 删除age
    request.removeAttribute("age");
%>

<c:set var="age" value="20" scope="request"></c:set>
<c:remove var="age" scope="request"/>
</body>
</html>

<c:set 设置属性标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="cn.itcast.domain.Person"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 保存一个数据到四个数据范围 -->
<%
    request.setAttribute("name","itcast");
%>
<c:set var="name" value="itcast" scope="request"></c:set>

<!-- 设置一个保存在四个范围的java对象的属性值 -->
<%
    Person person = new Person();
    person.setName("张三");
    pageContext.setAttribute("person",person);
%>
<c:set target="${person}" property="name" value="李四"></c:set>
${person.name }
</body>
</html>

<c:forTokens 循环标记标签

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="s" value="aaa,bbb,ccc" scope="page"></c:set>
<c:forTokens items="${s}" delims="," var="e">
    ${e }
</c:forTokens>
</body>
</html>

<c:url url标签,结合<c:param标签 对中文完成URL编码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core"  prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
    String url = "/day8/index.jsp";
    url = response.encodeURL(url);
%>
<!-- 将/day8/index.jsp 进行url重写,保存page范围 myurl中 -->
<c:url value="/index.jsp" context="/day8" var="myurl" scope="page" />

<%=url %>
${myurl }

<!-- 通过c:url 结合 c:param 对中文完成URL编码 -->
<c:url value="/login" context="/day8" var="myurl2" scope="page">
    <c:param name="username" value="张三"></c:param>
</c:url>
${myurl2 }
</body>
</html>

 通用404页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>通用404错误页面</h1>
</body>
</html>

通用500页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 获得错误信息  isErrorPage="true" -->
<%@page isErrorPage="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 通用错误页面 -->
<h1>通用500错误页面</h1>
<h2>错误原因 <% 
    if(exception !=null){
        out.println(exception.getMessage());
        if(exception.getCause()!=null){
            out.println(exception.getCause().getMessage());
        }
    }
%></h2>
</body>
</html>

Person类:

package cn.itcast.domain;

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

StringCutter类:

package cn.itcast.utils;

import java.util.StringTokenizer;

/**
 * 切割字符串
 * 
 * @author seawind
 * 
 */
public class StringCutter {
    public static void main(String[] args) {
        String url = "http://mail.itcast.cn?name=zhangsan&pwd=123";
        // 切出zhangsan 和 123
        // 第一种 indexOf substring
        String part1 = url.substring(url.indexOf("?") + 1);
        String part2 = part1.substring(part1.indexOf("&") + 1);
        String part3 = part1.substring(0, part1.indexOf("&"));
        System.out.println(part2 + "," + part3);

        // 第二种 split
        String[] arr = url.split("\?|&");
        System.out.println(arr[1] + "," + arr[2]);

        // 第三种 StringTokenizer
        StringTokenizer stringTokenizer = new StringTokenizer(url, "?&");
        while (stringTokenizer.hasMoreTokens()) {
            String s = stringTokenizer.nextToken();
            System.out.println(s);
        }
    }
}

URLOperation类:

package cn.itcast.utils;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

public class URLOperation {
    /**
     * 将内容进行URL编码
     * 
     * @param content
     * @return
     */
    public static String urlencode(String content) {
        try {
            return URLEncoder.encode(content, "utf-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }
    }
}
原文地址:https://www.cnblogs.com/vaer/p/3929838.html