JAVA WEB---EL,JSTL,JSP自带标签

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&lt;2=${1<2}<br>  <%--输出true --%>
		1&gt;2=${1>2}<br>
		1&le;2=${1<=2}<br>
		1&ge;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} &nbsp;&nbsp;</font>
		</c:if>
		
		<c:if test="${!flag}">					     <%--else --%>
			<font color="blue">${i} &nbsp;&nbsp;</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>

猜你喜欢

转载自blog.csdn.net/WuYunCode/article/details/81877244