JSTL技术
JSTL(JavaServer Pages Standard Tag Library)——JSTL标准标签库
导入指令
语法:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
注:JSTL1.0导入rui中的地址不需要加jsp
taglib: 是JSP指令,作用于JSP页面中,将标签库描述文件(.tld)引入该页面中
prefix: 设置前缀,前缀用于使用标签库描述文件中的标签
uri: 用于指定标签库的uri
可以把导入的标签指令写在一个 JSP 文件里面,然后应用页面使用include指令导入即可
导入标签指令示例:
<%@ page contentType="text/html; charset=UTF-8" language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
导入示例:<%@include file="taglib.jsp"%>
核心标签库
运算符操作—out、set、remove、catch 流程控制—if、choose、when、otherwise
迭代操作—forEach、forTokens URl操作—import、url、redirect、param
常用标签:
<c:out>
作用:用于显示内容,相当于脚本中的表达式 <%= %>
语法:1:没有本体内容<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
2:有本体内容<c:out value="value" [escapeXml="{true|false}"] > default value</c:out>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
value |
需要显示的值(即要输出的信息,可以是EL表达式或常量) |
是 |
Object |
是 |
无 |
default |
如果 value 的值为 null,则显示 defalut 的值 |
是 |
Object |
否 |
无 |
escapeXml |
是否转换特殊字元,如:< 转换成 <(为true则避开特殊的xml字符集) |
是 |
boolean |
否 |
true |
示例:
<!-- 在页面显示 Hello JSP 2.0 !!! --><c:out value="Hello JSP 2.0 !!!" />
<!-- 在页面显示 Hello JSP 2.0 !!! --><c:out> Hello JSP 2.0 !!</c:out>
<!获得存在 request 作用域中 name 的值并显示,如果 ${requestScope.name } 为 null 则显示默认值 ->
<c:out value="${requestScope.name }" default="Guest"/>
<!-- 在页面显示 <p>显示特殊字符</p> --><c:out value="<p>显示特殊字符</p>" />
<!-- 在页面显示 不显示特殊字符> -->
<c:out value="<p>不显示特殊字符</p>" escapeXml="false"/><c:set>
作用:用于将变量存储至 JSP 范围中或是 JavaBean 的属性中,就是说设置指定范围内的变量值,如果该变量不存在,则创建它。
语法:
1:将 Value的值,储存至范围为 scope 的 varName 变量中
<c:set var="varName" value="value" [scope="{page | request | session | application}"] />
2:将本体内容的资料,储存至范围为 scope 的 varName 变量中
<c:set var="varName" value="value" [scope="{page | request | session | application}"] >本体内容</c:set>
3:将 value 的值,储存至 target 物件的属性中
<c:set value="value" target="target" property="propertyName" />
4:将本体内容的资料,储存至 target 物件的属性中
<c:set target="target" property="propertyName" > 本体内容</c:set>
注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
value |
要被储存的值(即要保存的信息,可以是EL表达式或常量) |
是 |
Object |
否 |
无 |
var |
要存入的变量名称(即需要保存信息的变量) |
否 |
String |
否 |
无 |
scope |
var 变量的 JSP 范围(作用域) |
否 |
String |
否 |
page |
target |
为 JavaBean 或 java.util.Map 物件(如果指定了target属性, 那么property属性也必须指定) |
是 |
Object |
否 |
无 |
property |
指定 target 物件的属性 |
是 |
String |
否 |
无 |
示例:<!-- 获得并存储 User 对象集合 --><c:set var="users" value="${requestScope.allUsers}" />
<!-- 如果 ${param.Username} 为 null 时,则设定 User (即 JavaBean 对象) 的 name 属性值为 null,
反则不为 null ,则将 ${param.Username } 的值存入 User 的 name 属性中(setter 机制) -->
<jsp:useBean id="user" class="com.java.demo.model.User" scope="request"/>
<c:set target="User" property="name" value="${param.Usernsame}"/>
<c:remove>作用:用于删除变量
语法:<c:remove var="varName" [scope="{page | request | session | application}"] />
注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
var |
要删除的变量名称 |
否 |
String |
否 |
无 |
scope |
var 变量的 JSP 范围(作用域) |
否 |
String |
否 |
page |
示例:
<!-- 从 reques 作用域中删除 name 变量 --><c:remove var="name" scope="request" />
<c:catch>作用:用于处理产生错误的例外状况,并且将错误讯息存储起来。
语法:<c:catch [var="varName"]> 要抓取错误的部分</c:catch>
注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
var |
用来储存错误信息的变量 |
否 |
String |
否 |
无 |
示例:<!-- 因为字符串无法转换成整型,所以 <c:catch> 之间程序产生错误,<c:catch> 会自动的把错误存到 error_Message 变量中 -->
<c:catch var="error_Message"> <% int num = Integer.parseInt("Number"); %></c:catch>
<c:if>作用:用于条件判断
语法:1:没有本体内容<c:if test="testCondition" var="varName" [scope="{page | request | session | application}"] />
2:有本体内容<c:if test="testCondition" [var="varName"] [scope="{page | request | session | application}"] >本体内容</c:if>
注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
test |
如果运算式的结果为 true 则执行本体内容,false 则相反 |
是 |
boolean |
是 |
无 |
var |
用来储存 test 运算后的结果,即 true 或 false |
否 |
String |
否 |
无 |
scope |
var 变量的 JSP 范围(作用域) |
否 |
String |
否 |
page |
示例:<!-- 从 request 作用域中获取用户名,如果用户名等于 Guest ,则将 true 存入 result 变量中 -->
<c:if var="result" test="${requestScope.userName=='Guest' }" > ${result }</c:if>
<c:choose>作用:本身只当做 <when/>和 <otherwise/> 的父标签,即<when />和 <otherwise/> 标签的即容器。
语法:<c:choose> 本体内容(<when>和<otherwise>)</c:choose>
示例:
<c:choose>
<c:when test="${requestScope.userType=='Admin' }"> 用户名为一级管理员 </c:when>
<c:when test="${requestScope.userType=='Guest'}"> 用户名为二级管理员 </c:when>
<c:otherwise> 用户名为普通用户 </c:otherwise>
</c:choose>
<c:when>作用:如果条件成立则执行 when 里的语句
语法:<c:when test="testCodition"> 本体内容</c:when>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
test |
如果运算式的结果为 true 则执行本体内容,false 则相反 |
是 |
boolean |
是 |
无 |
<c:otherwise>作用:在用一个<c:choose>中,当所有<c:when>的条件都没有成立时,则执行<c:otherwise>的本体内容
语法:<c:otherwise> 本体内容</c:otherwise>
<c:forEach>作用:用于遍历集合(collection)中的每个成员。当集合中成员条件成立时,就会持续重复执行forEach的本体内容
语法:1:遍历所有成员<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>本体内容</c:forEach>
2:迭代指定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>
本体内容</c:forEach>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
var |
用来存放被遍历集合成员的变量 |
否 |
String |
否 |
无 |
items |
被遍历的集合物件 |
是 |
Arrys |
否 |
无 |
varStatus |
用来存放现在遍历到的相关成员资讯 |
否 |
String |
否 |
无 |
begin |
开始的位置 |
是 |
int |
否 |
0 |
end |
结束的位置 |
是 |
int |
否 |
最后一个成员 |
step |
每次迭代的间隔数 |
是 |
int |
否 |
1 |
varStatus 属性
属性 |
属性类型 |
说明 |
index |
number |
现在遍历到成员的索引 |
count |
number |
总共遍历成员的总数 |
first |
boolean |
现在遍历到的成员,是否为第一个成员 |
last |
boolean |
现在遍历到得成员,是否为最后一个成员 |
示例:<!-- 从 request 作用域中获得所有用户,以 user 变量来遍历所有用户 -->
<c:forEach var="user" items="${requstScope.allUser }" varStatus="varStatus">
编 号:${varStatus.index }用户名:${user.userName }密 码:${user.userPass }</c:forEach>
<c:forTorkens>作用:用来遍历一字符串中所有的成员,每个成员是由定义符号(delimiters)分隔的。
语法:<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"][begin="begin"] [end="end"] [step="step"]> 本体内容</c:forTokens>
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
var |
用来存放被遍历集合成员的变量 |
否 |
String |
否 |
无 |
items |
被遍历的字串 |
是 |
String |
是 |
无 |
delims |
定义用来分割字串的字符 |
否 |
String |
是 |
无 |
varStatus |
用来存放现在遍历到的相关成员资讯 |
否 |
String |
否 |
无 |
begin |
开始的位置 |
是 |
int |
否 |
0 |
end |
结束的位置 |
是 |
int |
否 |
最后一个成员 |
step |
每次遍历的间隔数 |
是 |
int |
否 |
1 |
示例:<!-- 从 phoneNumber 变量中获得字符串,以 str 变量 "-" 为分隔符遍历 -->
<% String phoneNumber = "123-456-7890" %>
<c:forTokens var="str" items="phoneNumber" delims="-"> ${str }</c:forTokens>
<c:import>作用:可以把其他静态或动态文件包含至本身 JSP 页面。
<c:import>和<jsp:includ> 的区别在于:<jsp:includ>只能包含和自己同一个工程下的文件,而<<c:import>除了包含和自己同一个工程下的文件还可以包含不同工程下的文件或者其他网站文件。
语法:1:<c:import url="url" [context="context"] [var="varName"] [scope="{page | request | session | application}"] >本体内容</c:import>
2<c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"] >本体内容</c:import>
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
url |
被包含文件(页面)的地址 |
是 |
String |
是 |
无 |
context |
相同Container(容器)下,其他 Web 站台必须以/开头 |
是 |
String |
否 |
无 |
var |
储存被包含的文件的内容(以 String 形态存入) |
否 |
String |
否 |
无 |
scope |
var 变量的 JSP 范围(作用域) |
否 |
String |
否 |
page |
charEncoding |
被包含页面文件内容的编码格式 |
是 |
String |
否 |
ISO-8859-1 |
varReader |
储存被包含的文件的内容(以 Reader 形态存入) |
否 |
String |
否 |
无 |
示例:<!-- 将 tools.jsp 包含到当前页的当前位置 -->
<c:import url="/tools.jsp"/>
<c:param>作用:可以将参数给被包含文件(设置参数)
语法:1:参数的值使用value属性指定<c:param name="name" value="value"/>
2:参数的值在标签中指定<c:param name="name">parameter value</c:param>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
name |
参数名称 |
是 |
String |
是 |
无 |
value |
参数的值 |
是 |
String |
否 |
本体内容 |
<c:url>作用:用来产生一个URL,用于构造URL,主要的用途是URL重写.
语法:
1:没有本体内容、<c:url value="value" [context="context"] [var="varName"] [scope="{page | request | session | application}"] />
2:本体内容代表查询字串(Query String)参数
<c:url value="value" [context="context"] [var="varName"] [scope="{page | request | session | application}"] ><c:param>标签</c:url>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
value |
执行的URL |
是 |
String |
是 |
无 |
context |
相同 Container 下,其他 Web 站台必须以 / 开头 |
否 |
String |
否 |
无 |
scope |
var 变量的 JSP 范围(作用域) |
否 |
String |
否 |
page |
示例:<!-- 设置百度的连接 -->
<a href="<c:url value='http://www.baidu.com'><c:param name='param' value='value'/></c:url>">百</a>
<c:redirect>作用:可以将用户端的请求,从一个 JSP 网页导向到其他文件
语法:1:没有本体内容<c:redirect url="url" [context="context"] />
2:本体内容代表查询字串(Query String)参数<c:redirect url="url" [context="context"] ><c:param /></c:redirect>注:
属性 |
说明 |
是否支持EL |
属性类型 |
是否必须存在 |
默认值 |
url |
导向的目标 URL 地址 |
是 |
String |
是 |
无 |
context |
相同 Container 下,其他 Web 站台必须以 / 开头 |
否 |
String |
否 |
无 |
示例:<!-- 网页会自动导向 http://www.bidu.com -->
<c:redirect url="http://www.bidu.com"/>
<!-- 网页会自动导向 http://www.bidu.com 网址,地址栏中显示http://www.bidu.com?param=value -->
<c:redirect url="http://www.bidu.com"> <param name="param" value="value"/></c:redirect>