jsp---EL和JSTL
Posted T,X
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jsp---EL和JSTL相关的知识,希望对你有一定的参考价值。
----------------------------------------------------------------------------
EL:表达式语言
1. 基本用法
${表达式}
表达式为字符串或EL运算符组成的表达式
tips:要输出 ${ 这个字符串
${\\${} 或 ${\'${\'}
2. 兼容低版本--禁用EL
(1) 在 &{ 前加 \\
不解析为EL表达式
(2)page指令
<%@ page isELIgnored="true"%>
禁用整个JSP页面的EL
(3)配置文件
web.xml文件
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
</jsp-property-group>
</jsp-config>
禁用整个web应用中所有jsp页面中的EL
3.
(1)EL关键字
(2)运算符优先级
empty运算符:判断有域中键对应的值是否为空、长度是否为0
4. 获取数据
只能从域对象中获取值
(1)值为字符串
①格式: ${域名称.键名}
域:pageScope 从pageContext对象获取
requestScope 从request
sessionScope 从session
applicationScope 从application(ServletContext)
②格式: ${键名}
一次从最小的域中找该键值对,直到找到为止【pageScope-->requestScope-->sessionScope-->applicationScope】
(2)值为对象
①自定义的符合JavaBean的类,用 域.键.成员变量名
②值为List集合 ${域名称.键名[索引]} 索引为数值,从0开始
③值为Map集合 ${域名称.键名.Map中的键名}
${域名称.键名["Map中的键名"]}
4. EL的隐含对象
4.1 pageContext 页面上下文对象
可获取JSP的内置对象,包括request、response、out、session、exception、page,不能获取application、config、pageContext对象
不能获取servletContext
6. 定义使用EL函数
----------------------------------------------------------------------------------------------------------------
JSTL标签
1. 5个标签库
核心标签库:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
格式标签库:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
SQL标签库:
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
XML标签库:
<%@ taglib prefix="xml" uri="http://java.sun.com/jsp/jstl/xml"%>
函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
2. 配置
3. 核心标签库
3.1 表达式标签
(1)<c:out>
作用:将表达式的值输出到JSP页面,类似<%=表达式%> ${表达式}
两种格式:
①
<c:out value="表达式" escapeXml="true|false" default="默认值"/>
②
<c:out value="表达式" escapeXml="true|false">
默认值
</c:out>
value里面可使用EL表达式
escapeXml:是否将特殊字符进行转换(转换从字符输出,而不是对应的标签含义) 如要输出< ,就要将其转换成 <
即true:输出字面字符串 false:按其html含义解析输出
例:
<c:out value="<hr>" escapeXml="true" default=""/> <%-- 输出 <hr> 这个字面字符串--%> <c:out value="<hr>" escapeXml="false" default=""/> <%-- 输出 水平分割线--%>
(2)<c:set>
在指定范围内(page、request、session、application)定义保存某个值的变量,或者为指定对象设置值
①定义变量
<c:set var="name" value="value" scope="范围"/>
<c:set var="name" scope="page|request|session|application"> 值 </c:set>
②为对象属性设置值(为target指定的目标的属性propName设置值为value)
<c:set value="value" target="object" property="propName"/>
<c:set target="object" property="propName"> 值 </c:set>
(3)<c:remove>
移除指定范围内的变量
<c:remove var="name" scope="范围"/>
(4)<c:catch>
捕获异常 var可指定存储异常信息的变量
<c:catch var="exception"> //可能存在异常的代码 </c:catch>
3.2 URL标签
(1)<c:import>
导入静态或动态文件到web页面,类似<jsp:include>
可导入其它网站的资源,而<jsp:include page="uri"> 只能导入本应用内的资源
①
<c:import url="url" context="context" var="name" scope="范围" charEncoding="encoding"> 标签体 </c:import>
②
<c:import url="url" varReader="name" context="context" charEncoding="encoding"> 标签体 </c:import>
context:访问同一个服务器其它web应用,以 "/" 开头,指定了此属性则url也必须以 "/" 开头
var:变量名,String类型,存储获取的资源
scope:指定变量的范围,默认page
varReader:指定变量名,以Reader类型存储被包含文件的内容
标签体:可通过 <c:param> 为导入的文件传递参数
(2)<c:redirect>
将客户端发出的request请求重定向到其它URL服务端,可修改request中的属性进行修改然后传递
<c:redirect url="url" context="/context"/>
<c:redirect url="url" context="/context"> <c:param/> <c:param/ </c:redirect>
(3)<c:url>
生成一个URL路径字符串,可赋予HTML的 <a> 标记实现URL的连接,或用这个URL实现网页转发、重定向
<c:url value="url" var="name" scope="范围" context="context"/>
<c:url value="url" var="name" scope="范围" context="context"> <c:param/> <c:param/> </c:url>
(4)<c:param>
与import、redirect、url标签组合传递参数
<c:param name="paramName" value="paramValue"/>
3.3 流程控制标签
(1)<c:if>
条件表达式结果保存在var指定的变量中:
<c:if test="condition" var="name" scope="page|request|session|application">
结果保存在var指定的变量,且根据条件结果执行标签体(HTML标记、java代码、其它jsp标签):
<c:/if test="condition" var="name" scope="page|request|session|application"> 标签体 </c:if>
(2)<c:choose>
判断第一个when标签条件,为true则执行该标签体;否则判断下一个;如果都不满足,则执行 otherwise 标签体
<c:choose> <c:when test="condition"> 标签体 </c:when> <c:when test="condition"> 标签体 </c:when> <c:when test="condition"> 标签体 </c:when> <c:otherwise> 标签体 </c:otherwise> </c:choose>
(3)<c:when>
(4)<c:otherwise>
3.4 循环标签
(1)<c:forEach>
根据循环条件遍历数组、集合中数据
①
//集合成员迭代 <c:forEach items="data" var="name" begin="start" end="finish" step="step" varStatus="statusName"> 标签体 </c:forEach>
items为必选属性,一般使用EL指定,其它可选
②
//数字索引迭代 <c:forEach begin="start" end="finish" var="name" step="step" varStatus="statusName"> 标签体 </c:forEach>
begin、end为必选属性,其它可选
items:被遍历对象
var:items指定的对象的成员
begin、end:起始、终止位置 可用EL
step:循环步长 可用EL
varStatus:指定循环的状态变量
标签体:JSP页面任何元素
例:遍历一个List里的第1、2个元素,并输出索引
<% List<String> list = new ArrayList<String>(); list.add("str1"); list.add("str2"); list.add("str3"); list.add("str4"); request.setAttribute("list",list); %> <%--遍历第1、2个元素--%> <c:forEach items="${requestScope.list}" var="val" varStatus="status" begin="1" end="2"> ${status.index} :${val}<br/> </c:forEach>
(2)<c:forTokens>
用指定的分隔符将一个字符串分割开,根据分割的数量确定循环次数
<c:forTokens items="String" delims="char" var="name" begin="start" end="end" step="step" varStatus="statusName"> 标签体 </c:forTokens>
以上是关于jsp---EL和JSTL的主要内容,如果未能解决你的问题,请参考以下文章