1.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>
<%--问题:
jsp页面中嵌入大量java代码会造成页面的可读性、可维护性下降。
解决:
jsp标签替换掉jsp页面中的java代码,从而提高jsp页面的可读性、可维护性。
JSP中的标签技术我们介绍如下四种:
JSP标签
EL表达式
JSTL标签
自定义标签
--%>
<%--sun提供的jsp标签演示
<jsp:inclue page="">用来替代request.getRequestDispatcher().include() 实现页面的动态包含
<jsp:forward page="">用来替代request.getRequestDispatcher().forward() 实现页面的请求转发
<jsp:param name="" value=""> 配合前两个标签使用,可以在包含或转发时,带一些参数过去 配合上面两个标签,携带参数,不能单独使用
--%>
AAAA<BR>
<jsp:include page="/index.jsp"></jsp:include> <%--1.实现页面的动态包含 jsp:include--%>
<%-- 翻译为java文件等价于 org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, "/index.jsp", out, false); --%>
BBBB<BR>
<%--*************注意:标签里面千万不能加注释************** --%>
<%-- 2.实现页面的请求转发 jsp:forward--%>
<%-- 3.请求转发中携带参数 jsp:param --%>
<jsp:forward page="/index.jsp">
<jsp:param name="addr" value="jiaxing"/>
</jsp:forward>
</body>
</html>
2.EL
<%@page import="com.hxuner.web.Person"%>
<%@page import="java.util.*"%>
<%@ 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>EL表达式功能1:获取数据</title>
</head>
<body>
<%--
EL 全名为Expression Language,用来替代<%= %>脚本表达式。
基本结构: ${ 表达式 }
EL只能获取域中的数据!!
EL只能获取不能设置!!!
EL只能获取不能遍历!!!
EL具有获取数据、执行运算、获取常用开发对象、调用java方法这四方面的功能
--%>
<h1>EL表达式功能1:获取数据</h1>
<h3>1.1获取数据</h3>
字符型:${"WuYun"}<br>
数值型:${123}<br>
布尔型:${true}<br>
<%--EL表达式获取变量,只能获取保存在作用域中的变量,-----------特别注意:变量必须保存在作用域 ,EL才能获取--------------- --%>
<%--------------↑↑↑↑------------- --%>
<hr>
<h3>1.2获取变量</h3>
<%
int i=10;
String name="张三";
pageContext.setAttribute("i", i);
pageContext.setAttribute("name", name);
%>
<%--EL表达式获取变量的执行逻辑和findAttribute()一样,从四大作用域从小到大获取 page->request->session->application --%>
<%--EL表达式作用域获取不到输出空,findAttribute()作用域找不到输出null --%>
i=${i}<br> <%--按四大作用域小到大查找,找不到输出空 --%>
i=<%=pageContext.findAttribute("i") %> <%--这个方法找不到null --%>
<hr>
<h3>1.3获取数组中的元素</h3>
<% String[] prov={"北","上","广"};
pageContext.setAttribute("prov", prov);
%>
prov=${prov[2]}<br>
prov=${prov[9]}<br> <%-- EL表达式不会抛出数组下标越界异常 显示空 --%>
<hr>
<h3>1.4获取集合中的元素</h3>
<%
List<String> list=new ArrayList();
list.add("张三");
list.add("李四");
list.add("王五");
pageContext.setAttribute("list", list);
%>
name=${list[0]} <br> <%--推荐使用 --%>
name=${list.get(1)}<br><%--不建议,建议尽量不使用java语法 --%>
name=${list[5]} <br> <%--不会抛出集合下标越界异常,显示空--%>
<%-- --%>
<hr>
<h3>1.5获取map中的元素</h3>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("namec", "szh");
map.put("job", "student");
map.put("job.money", "500");
pageContext.setAttribute("map", map);
pageContext.setAttribute("namec", "job");
%>
name=${map["namec"]} <br> <%--1.map["key"] 推荐使用 --%>
<%--如果省略双引号,会从作用域获取对应key的value 相当于先获取了namdc的value为job等价于${map["job"]},输出Student --%>
<%--省略双引号,查找作用域中key这个变量,使用查到的value作为这里的值 --%>
name=${map[namec]} <br>
job=${map.job} <br> <%--2.map.key 不建议有歧义 --%>
job.money01=${map["job.money"] }
<%-- job.money02=${map.job.money} 找到map.job是student,然后从student再找money出现歧义异常--%>
<hr>
<h3>1.6获取JavaBean中的元素</h3>
<%
Person p1=new Person();
p1.setName("恒讯");
p1.setAge(18);
pageContext.setAttribute("p1", p1);
%>
name=${p1.name}<br> <%--p1.name默认是调用JavaBean的getName()方法,而不是破坏封装性 --%>
age=${p1.age}<br> <%--这种访问方式只看对应的getAge()方法有没有,不管实际有没有该属性age --%>
<img src="<%= pageContext.getRequest().getRealPath("") %>">
<img src="${pageContext.request.contextPath}"> <%--默认调用对应的get方法 先调用getRequest() 然后再调用getContextPath() --%>
</body>
</html>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ 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>EL表达式功能2:进行基本运算</title>
</head>
<body>
<h1>EL表达式功能2:进行基本运算</h1>
<h3>2.1算术运算</h3>
1+1=${1+1}<br>
1-1=${1-1}<br>
1*1=${1*1}<br>
10/3=${10/3}<br> <%--结果是3.3333333333333335 不是整除 --%>
10%3=${10%3}<br>
<%--EL表达式执行算数运算时,会将传入的参数转成数值型,如果转换失败,会抛出异常 , --%>
<%-- a+1=${'a'+1} 出现异常,不是98--%>
123+1=${'123'+1} <%-- 输出124--%>
<hr>
<h3>2.2关系运算 < > <= >= == != lt,gt,le,ge,ne,eq</h3>
1<2=${1<2}<br> <%--输出true --%>
1>2=${1>2}<br>
1≤2=${1<=2}<br>
1≥2=${1>=2}<br>
1=1 =${1==1}
1!=1 =${1!=1}
1<2=${1 lt 2}<br>
1>2=${1 gt 2}<br>
2>=2${2 ge 2}<br>
<hr>
<h3>2.3逻辑运算 与或非 && || ! and or not</h3>
true&&true=${true&&true}<br>
true||false=${true||false}<br>
!true=${!true}<br>
<br>
true&&true=${true and true}<br>
true||false=${true or false}<br>
!true=${not true}<br>
<hr>
<h3>2.4Empty运算符</h3>
<br>empty / not empty
<br>1.判断对象是否为null,
<br>2.判断字符串是否为空串
<br>3.数组长度是否为0,
<br>4.判断集合是否为空,
<br>5.判断域中是否没有任何属性。
<br>
<%
pageContext.setAttribute("str1", null);
pageContext.setAttribute("str2", "");
String[] StringArray=new String[0];
pageContext.setAttribute("StringArray",StringArray);
int[] IntArray=new int[0];
pageContext.setAttribute("IntArray",IntArray);
List<String> list=new ArrayList<String>(10);
pageContext.setAttribute("list", list);
%>
<br>1.判断对象是否为null<br>
empty str1=${empty str1}
<br>2.判断字符串是否为空串<br>
empty str2=${empty str2}
<br>3.数组长度是否为0,只对引用数组有用<br>
empty StringArray=${empty StringArray}<br> <%--引用数组 true,只对引用数组有用 --%>
empty IntArray=${empty IntArray}<br> <%--基本类型数组false --%>
<br>4.判断集合是否为空,不是判断有长度,而是判断是否添加数据<br>
empty list=${empty list}<br> <%--为true 集合空 --%>
<% list.add("123");%>
empty list=${empty list}<br> <%-- 为false ,集合添加过元素非空--%>
<br>5.判断域中是否没有任何属性<br>
empty pageScope=${empty pageScope}<br> <%--为false,page作用域有属性 --%>
empty session=${empty sessionScope}<br> <%--为true,session作用域没有属性,空 --%>
<% session.setAttribute("name", "123"); %>
empty session=${empty sessionScope}<br> <%--为false,session作用域有属性,非空 --%>
<hr>
<h3>2.5三目运算符</h3>
1?2的结果 ${1<2 ? "1<2" : "1>2" }
</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>EL表达式功能3.获取常用开发对象</title>
<%--
3.EL获取常用开发对象
EL中内置了11个常用对象, 可以不用预先存入域中就可以使用
为了
◇ 代表当前JSP页面环境的pageContext对象 1个
pageContext - 有了它就意味着el中就有了其他八大隐式对象
◇ 代表四大作用域的隐式对象, 用来明确指定从哪个域中查找数据 4个
pageScope -- pageContext
requestScope -- request
sessionScope -- session
applicationScope -- ServletContext
注意: 上面这四个对象只能代表四大作用域对象身上的那个域!!
◇ 请求参数组成的map 2个
param - Map<String, String>
paramValues - Map<String, String[]>
◇ 请求头组成的map 2个
header -- Map<String, String>
headerValues - Map<String, String[]>
key为请求头的名字
◇ 所有cookie信息组成的map 1个
cookie -- Map<String, Cookie>
key为Cookie的名字, 值为Cookie对象
Cookie cookie1 = new Cookie("c1", "xxx")
Cookie cookie2 = new Cookie("c2", "xxx")
Cookie cookie3 = new Cookie("c3", "xxx")
c1:cookie1
c2:cookie2
c3:cookie3
${ cookie.c1.value }
◇ 所有web应用初始化信息组成的map 1个
initParam -- Map<String, String>
key初始化参数的名字, value为参数对应的值
--%>
</head>
<body>
<h1>EL的功能3:获取11个常用的开发对象</h1>
<h3>3.1 1pageContext 代表当前JSP页面环境</h3>
<%--◇ 代表当前JSP页面环境的pageContext对象 1个
pageContext - 有了它就意味着el中就有了其他八大隐式对象 --%>
<%--基于pageContext,EL可以访问jsp的9大内置对象 --%>
<%----------------------------------------------------------------------------%>
<hr>
<h3>3.2 代表四大作用域的map对象</h3>
<%--
◇ 代表四大作用域的隐式对象, 用来明确指定从哪个域中查找数据 4个
pageScope -- pageContext
requestScope -- request
sessionScope -- session
applicationScope -- ServletContext
类型Map<String,Object>
注意: 上面这四个对象只能代表四大作用域对象身上的那个域!!
--%>
<%
pageContext.setAttribute("name", "沈1page",PageContext.PAGE_SCOPE);
pageContext.setAttribute("name", "沈2request",PageContext.REQUEST_SCOPE);
pageContext.setAttribute("name", "沈3session",PageContext.SESSION_SCOPE);
pageContext.setAttribute("name", "沈4application",PageContext.APPLICATION_SCOPE);
%>
name=${name} <br> <%-- 输出沈1page,默认从page开始获取,
EL表达式获取变量的执行逻辑和findAttribute()一样,从四大作用域从小到大获取 page->request->session->application --%>
<%--applicationScope是一个map对象,类型Map<String,Object> --%>
application.name=${applicationScope["name"] } <br> <%-- map["name"]推荐使用--%>
application.name=${applicationScope.name } <br> <%-- map.name--%>
session.nmae=${sessionScope["name"] } <br>
request.name=${requestScope["name"] } <br>
<%--如果指定作用域没有该属性,显示空 --%>
<%----------------------------------------------------------------------------%>
<hr>
<h3>3.3代表请求参数的map对象</h3>
<%--
◇ 请求参数组成的map 2个
param - Map<String, String>
paramValues - Map<String, String[]>
--%>
<%--浏览器后面拼接参数访问http://localhost/day014JavaWebJSP/EL/ELDemo03.jsp?name=%22szj%22 --%>
username=${pageContext.request.parameterMap["name"][0] }<br><%--没有请求参数头要这么完整写 --%>
username=${param["name"] }<br>
username=${paramValues["name"][0]}<br> <%--先获取到key对应的value为String[]数组,然后取第几位 --%>
username=${paramValues["name"][1]}<br>
<%----------------------------------------------------------------------------%>
<hr>
<h3>3.4代表请求头的map对象</h3>
<%--
◇ 请求头组成的map 2个
header -- Map<String, String>
headerValues - Map<String, String[]>
key为请求头的名字
--%>
host=${header["host"] }<br>
cookie=${headerValues["cookie"][0]}<br> <%--先获取到key对应value为String[]数组,然后取第几位 --%>
cookie=${headerValues["cookie"][1]}<br>
<%----------------------------------------------------------------------------%>
<hr>
<h3>3.5代表Cookie的map对象</h3>
<%--
◇ 所有cookie信息组成的map 1个
cookie -- Map<String, Cookie>
key为Cookie的名字, 值为Cookie对象
Cookie cookie1 = new Cookie("c1", "xxx")
Cookie cookie2 = new Cookie("c2", "xxx")
Cookie cookie3 = new Cookie("c3", "xxx")
c1:cookie1
c2:cookie2
c3:cookie3
${ cookie.c1.value }
--%>
<%--等价于cookie["JSESSIONID"] --%>
JSESSIONID=${cookie.JSESSIONID}<br> <%--输出JSESSIONID=javax.servlet.http.Cookie@5c08e00d --%>
<%--cookie先获取map集合key对应的Cookie对象 --%>
JSESSIONID=${cookie.JSESSIONID.value}<br> <%--输出JSESSIONID=4590301950FD37873972A2F8D47EC4E1 --%>
<%--cookie先获取map集合key对应的Cookie对象,然后获取它的值,getValue()这里可以直接写value默认调相对于的get方法 --%>
<%----------------------------------------------------------------------------%>
<hr>
<h3>3.5代表Cookie的map对象</h3>
<%--
◇ 所有web应用初始化信息组成的map 1个
initParam -- Map<String, String>
key初始化参数的名字, value为参数对应的值
--%>
encode=${initParam.encode } <%--等价于initParam["encode"] --%>
</body>
</html>
3.JSTL
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%--注意--------------------用<%@taglib%>指令引入标签库-------------------%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
JSTL JavaServer Pages Standard Tag Library *JSP标准标签库
概念:
jsp的标准标签库,可以使用jstl标签替换jps页面中的java代码
使用:
1. 需要在工程中导入jstl.jar和standard.jar
2. 在jsp页面上使用 <%@ taglib%>指令,设定引用的是哪个具体的标签库
<%@ taglib prefix="前缀" uri="选择使用的库"%>
3. 在页面上使用标签
常用的库:
core 核心库!!!
fmt 国际化的库
sql sql操作的库
xml xml操作的库
functions el表达式中可以使用的标签库
--%>
<!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>JSTL全称为JavaServer Pages Standard Tag Library *JSP标准标签库</title>
</head>
<body>
<%--
1.<c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。
1.1输出常量
1.2输出变量
1.3转义输出
1.4输出默认值
--%>
<%--1.1输出常量 --%>
<c:out value="123" /><br>
<c:out value="张三" /><br>
<c:out value="true" /><br>
<c:out value="1+1" /><br> <%--输出1+1 --%>
<hr>
<%--1.2输出变量 --%>
<%
int i=10;
pageContext.setAttribute("i", i);
%>
<c:out value="i"></c:out> <%--输出i,当做常量 --%>
<c:out value="${i}"></c:out> <%--输出10 --%>
<hr>
<%--1.3转义输出 --%>
<%--使用c:out 输出html内容时,会被当做普通字符串原样输出,不会执行标签原本的含义 --%>
<c:out value="<a href='/day014JavaWebJSP/index.jsp'>跳转</a>" /><br> <%--原样输出整个字符串 --%>
${"<a href='/day014JavaWebJSP/index.jsp'>跳转</a>"}<br> <%-- 输出跳转 超链接--%>
<%--为c:out添加escapeXml="false",可以使html的内容生效 --%>
<c:out escapeXml="false" value="<a href='/day014JavaWebJSP/index.jsp'>跳转</a>" /><br> <%-- 输出跳转 超链接--%>
<hr>
<%--1.4输出默认值 --%>
age=<c:out value="${age}" default="18岁" ></c:out> <br> <%--输出age=18岁 没有值才给默认值--%>
<%
pageContext.setAttribute("age", "22岁");
%>
age=<c:out value="${age}" default="18岁" ></c:out> <%--输出age=22岁,没有值才给默认值,有值给现在的值 --%>
</body>
</html>
<%@page import="com.hxuner.web.Person"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%--用<%@taglib%>指令引入标签库 --%>
<!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>JSTL全称为JavaServer Pages Standard Tag Library *JSP标准标签库</title>
</head>
<body>
<%--
2.<c:set> 标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的属性。
2.1向四大作用域中增加域属性
2.2向map中增加、修改键值对
2.3修改javabean的属性,不能增加JavaBean的属性
--%>
<%--2.1向四大作用域中增加域属性 --%>
<c:set scope="page" var="fruit" value="apple" ></c:set> <%--c:set scope作用域 var变量 value值 --%>
<c:set scope="request" var="fruit" value="banana" ></c:set>
<c:set scope="session" var="fruit" value="orange" ></c:set>
<c:set scope="application" var="fruit" value="watermaleon" ></c:set>
page=${pageScope.fruit}<br>
request=${requestScope.fruit}<br>
session=${sessionScope.fruit}<br>
application=${applicationScope.fruit}<br> <%--输出watermaleon --%>
<%--也可以修改域中已有属性的值 --%> <%--c:set scope作用域 var变量 value值 --%>
<c:set scope="application" var="fruit" value="pear" ></c:set>
application=${applicationScope.fruit}<br> <%--输出pear --%>
<hr>
<%--2.2向map中增加、修改键值对 --%>
<%
Map<String,String> map=new HashMap<String,String>();
map.put("namec", "szh");
map.put("job", "student");
pageContext.setAttribute("map", map);
%>
job=${map["job"]}<br> <%--输出student --%>
<%--修改map集合属性的值 --%>
<c:set target="${map}" property="job" value="businessman"></c:set> <%-- c:set target操作的集合 property操作的属性 value对应的值 --%>
job=${map.job}<br> <%--输出businessman --%>
<%--添加map集合没有的属性 --%>
<c:set target="${map}" property="school" value="CJLU"></c:set> <%-- c:set target操作的集合 property操作的属性 value对应的值 --%>
school=${map["school"]}<br> <%--输出cjlu --%>
<hr>
<%--2.3修改javabean的属性--%>
<%
Person p1=new Person();
p1.setName("szh");
pageContext.setAttribute("p1", p1);
%>
name=${p1.name}
<%--只能给JavaBean修改属性的值 --%>
<c:set target="${p1}" property="name" value="wuyun" ></c:set> <%-- c:set target操作的集合 property操作的属性 value对应的值 --%>
name=${p1.name}
<%--注意:不能给JavaBean添加没有的属性 --%>
</body>
</html>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.hxuner.web.Person"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%--用<%@taglib%>指令引入标签库 --%>
<!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>JSTL全称为JavaServer Pages Standard Tag Library *JSP标准标签库</title>
</head>
<body>
<%--
3.<c:remove> 标签用于删除各种Web域中的属性
如果不指定scope属性,会删除所有作用域中的该属性
--%>
<%--3.1删除指定域的属性--%>
<c:set scope="page" var="fruit" value="apple" ></c:set>
<c:set scope="request" var="fruit" value="banana" ></c:set>
<c:set scope="session" var="fruit" value="orange" ></c:set>
<c:set scope="application" var="fruit" value="watermaleon" ></c:set>
fruit=${fruit}<br> <%--输出 fruit:apple --%>
<c:remove var="fruit" scope="page"></c:remove> <%--删除指定域scope的属性 var--%> <%--c:remove var变量名 scope=指定域 page|request|session|application--%>
fruit=${fruit}<br> <%--输出 fruit:banana --%>
<c:remove var="fruit" ></c:remove> <%--不指定域scope.删除所有的属性 var--%>
fruit=${fruit}<br> <%--输出 fruit: --%>
<hr>
<%--
4.<c:catch> 标签用于捕获嵌套在标签体中的内容抛出的异常,
其语法格式如下:<c:catch [var="varName"]>nested actions</c:catch>
捕获到的异常 可以通过声明var属性 用指定的名称 写入 pageContext域 后续处理
--%>
<%
try{
int i=10/0;
}catch(Exception e){
out.write(e.toString());
}
%>
<br>
<%--var属性指定一个属性名,该属性的值就是捕获的异常,写入 pageContext域 后续处理 --%>
<c:catch var="exception01"> <%---var属性指定一个属性名,该属性的值就是捕获的异常 --%>
<%--捕获在标签内部产生的异常 --%>
<%
int z=100/0;
%>
</c:catch>
出现异常的原因:${exception01} <%--写入 pageContext域 后续处理 --%>
<hr>
<%--
5.<c:if test=""> 标签可以构造简单的“if-then”结构的条件表达式
test 写判断表达式
scope 声明将test的结果存入哪个域
var 写入域时的属性名
c:if标签会自动将test的结果保存在作用域中
--%>
<c:set var="day" value="6" scope="page"></c:set>
<%-- if --%>
<c:if test="${day eq 7}" var="flag" scope="session"> <%-- c:if test是用于判断的布尔表达式 ,var设定作用域中的值的名称,scope指定保存在哪个作用域中--%>
周末开心
</c:if>
<%--else --%>
<c:if test="${not flag }">
学习使我快乐
</c:if>
<hr>
<%--
6.
<c:choose> - <c:when> <c:otherwise>
标签用于指定多个条件选择的组合边界,实现多重判断,可以构造类似 “if-else if-else” 的复杂条件判断结构。
实现的效果类似于java中的switch-case
--%>
<c:set var="phone" value="3" scope="page"></c:set> <%--<c:choose> - <c:when> <c:otherwise> --%>
<c:choose>
<c:when test="${phone eq 1}">
小米手机就是好
</c:when>
<c:when test="${phone eq 2}">
苹果手机还不错
</c:when>
<c:otherwise>
永远相信美好的事情即将发生。
</c:otherwise>
</c:choose>
<hr>
<%--
7
<c:forEach> 标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。
--%>
<%--1.实现普通for循环 --%>
<c:forEach begin="1" end="5" step="1"> <%--实现5次 是<=end --%>
hello JSTL jsp标准标签库<br>
</c:forEach>
<%--2.实现增强for循环 --%>
<%
List<String> fruits=new ArrayList<String>();
fruits.add("苹果");
fruits.add("香蕉");
fruits.add("西瓜");
fruits.add("水蜜桃");
pageContext.setAttribute("fruits", fruits);
%>
<c:forEach items="${fruits}" var="f"> <%--等价于 for{fruits f:fruits} items是fruits var是f--%>
水果是=${f}<br>
</c:forEach>
<!-- 遍历10到100的偶数,如果数字所在的位置是3的倍数,
显示成红色 -->
<%-- varStatus记住用于保存迭代信息的变量
index现在指到成员的索引
count总共指到成员的总数
first现在指到的成员是否是第一个
last现在指到的成员是否是最后一个
--%>
<c:forEach begin="10" end="100" step="2" var="i" varStatus="vs"> <%-- c:forEach begin开始 end结束 step步长 var暂时变量 varStatus记住用于保存迭代信息的变量--%>
<c:if test="${vs.count%3==0}" var="flag"> <%--if test判断条件 总共指到成员的总数是否是3的倍数--%>
<font color="red">${i} </font>
</c:if>
<c:if test="${!flag}"> <%--else --%>
<font color="blue">${i} </font>
</c:if>
</c:forEach>
<hr>
<%--
8
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的
--%>
<%
String data="1,admin,超级管理员,[email protected]";
pageContext.setAttribute("data", data);
%>
<c:forTokens items="${data}" delims="," var="d"> <%--c:forTokens items操作的字符串 delims分隔对象 var定义的简单变量 --%>
${d}<br>
</c:forTokens>
<hr>
<%--
9
<c:url>标签用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。
URL重写: 就是在传入的URL地址后拼接JSESSIOINID返回一个新的地址, 用来在禁用Cookie的情况下用url地址来携带JSESSIOINID
禁用Cookie的情况下使用Session
response.encodeURL(String url);
//--如果是普通的地址用这个方法
response.encodeRedirectURL(String url);
//--如果地址是用来进行重定向的,用这个方法
--%>
<a href="/day014JavaWebJSP/index.jsp">链接1</a>
<a href="<%= response.encodeUrl("/day014JavaWebJSP/index.jsp")%>" >链接2</a>
<a href="<c:url value='/index.jsp'></c:url>">链接3</a> <%--不需要提供web应用映射的路径,c:url会自动获取并添加 --%>
</body>
</html>