1、安装JSTL(标准标签库)
1)下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下,下载链接:
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip
2)将需要引入的tld文件(标签库描述文件)复制到拷贝到 /WEB-INF/tld/ 下
(tld文件中将写好的类映射成jsp标签,然后可以在jsp页面中使用定义好的标签)
3)在web.xml文件中添加配置:
以下列出了常用的tld文件的uri和文件名
<jsp-config>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt-rt</taglib-uri>
<taglib-location>/WEB-INF/tld/fmt-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core-rt</taglib-uri>
<taglib-location>/WEB-INF/tld/c-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/sql</taglib-uri>
<taglib-location>/WEB-INF/tld/sql.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/sql-rt</taglib-uri>
<taglib-location>/WEB-INF/tld/sql-rt.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/x</taglib-uri>
<taglib-location>/WEB-INF/tld/x.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/x-rt</taglib-uri>
<taglib-location>/WEB-INF/tld/x-rt.tld</taglib-location>
</taglib>
</jsp-config>
4)在使用该库的每个JSP的顶部包含一个 <taglib> 指令定义应用的标签库和访问前缀,例如:
<%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" %>
2、核心标签库
1)定义:用于完成JSP页面的常用功能,包括JSTL的表达式标签(<c:out>、<c:set>、<c:remove>、<c:catch>)、URL标签(<c:import>、<c:redirect>、<c:url>、<c:param>)、流程控制标签(<c:if>、<c:choose>、<c:when>、<c:otherwise>)、循环标签(<c:foreach>、<c:forTokens>),他们的基本作用如下所示:
将表达式的值输出到JSP页面中,相当于JSP表达式<%=表达式%> |
|
在指定范围中定义变量或为指定的对象设置属性值 |
|
从指定的JSP范围中移除指定的变量 |
|
捕获程序中出现的异常,并且将错误信息储存起来 |
|
与Java语言中用的if语句类似,仅当对表达式求出的值为true时,才处理标记的主体内容 |
|
本身只当做<c:when>和<c:otherwise>的父标签,与Java预言中的switch语句类似 |
|
<c:choose>的子标签,用来判断条件是否成立 |
|
<c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
|
导入站内或其他网站的静态和动态文件到Web页面中 |
|
根据循环条件遍历数组和集合类中的所有或部分数据 |
|
根据指定的分隔符来分隔字符串并迭代输出 |
|
为其它标签提供参数信息,通常与其它标签结合使用,比如给重定向的页面传递参数 |
|
重定向至一个新的URL |
|
使用正确的URL重写规则构造一个URL |
2)<c:out>标签
①属性:
属性 |
描述 |
是否必要 |
默认值 |
value |
要输出的内容 |
是 |
无 |
default |
输出的默认值 |
否 |
主体中的内容 |
escapeXml |
指定是否转换特殊字符 |
否 |
true |
②注意:
escape的值为true时不转换特殊字符,例如<转换后为<
只有value属性可以使用EL表达式
③使用示例:
<c:out value="${null}" default="hello" escapeXml="false"></c:out>
3)<c:set>标签
①属性:
属性 |
描述 |
是否必要 |
默认值 |
value |
要存储的值 |
否 |
主体的内容 |
target |
要修改的属性所属的对象 |
否 |
无 |
property |
要修改的属性 |
否 |
无 |
var |
存储信息的变量 |
否 |
无 |
scope |
var属性的作用域 |
否 |
Page |
②说明:用于在某个范围(page、request、session、application等)中为某个名称设定特定的值,或者设定某个已经存在的JavaBean对象的属性。使用改标签可以在页面中定义变量。
③语法:
用法1:
<c:set value="value" var="varName" [scope="{page | request | session | application}"] />
或:
<c:set value="value" var="varName" [scope="{page | request | session | application}"] ></c:set>
用法2:
<c:set value="value" target="object" property="propertyName" />
或:
<c:set value="value" target="object" property="propertyName" ></c:set>
④使用示例:
设置变量:
<c:set var="str" value="hello JSTL" scope="page" ></c:set>
设置JavaBean对象的属性:
<jsp:useBean id="msg" class="cn.qi.JavaBean.MyMessage" scope="page" ></jsp:useBean> <c:set target="${msg}" property="message" value="hello JSTL" ></c:set> <c:out value="${msg.message}" ></c:out>
⑤注意:
只有value、target属性可以使用EL表达式
4)<c:if>标签:
①属性:
属性 |
描述 |
是否必要 |
默认值 |
test |
条件表达式 |
是 |
无 |
var |
用于存储条件判断结果的变量 |
否 |
无 |
scope |
var属性的作用域(存在范围) |
否 |
page |
②说明:将test属性的判断结果保存在指定范围scope的变量var中,还可以根据条件的判断结果执行标签主体。标签主体是JSP页面能够使用的任何元素,如HTML标记、Java代码或者其它的JSP标签。
③语法:
<c:if test="condition" [var="varName"] [scope="{page | request | session | application}"] >
标签主体部分
</c:if>
④使用示例:
<c:if test="${'1'.equals('1')}" var="res" scope="page"> <c:out value="${res}" ></c:out> </c:if>
⑤注意:
只有test属性可以使用EL表达式
5)<c:forEach>标签:
①属性:
属性 |
描述 |
是否必要 |
默认值 |
items |
指定被循环遍历的对象,多用于数组与集合类 |
否 |
无 |
begin |
循环变量的初始位置(0=第一个元素,1=第二个元素) |
否 |
0 |
end |
循环的终止位置(0=第一个元素,1=第二个元素) |
否 |
Last element |
step |
每一次迭代的步长 |
否 |
1 |
var |
代表当前条目的变量名称,例如items当前迭代到的对象成员 |
否 |
无 |
varStatus |
代表循环状态的变量名称 |
否 |
无 |
②说明:
可以根据循环条件遍历数组和集合类中的所有或部分数据。
③语法:
<c:forEach items="collection_requestAttribute" [varStatus="varStatusName"] [var="varName"] [begin="begin"] [end="end"] [step="step"]>
标签体部分
</c:forEach>
④使用示例:
<% ArrayList<String> arr = new ArrayList<>(); arr.add("Linux入门"); arr.add("windows入门"); arr.add("系统平台入门"); arr.add("Web应用程序入门"); arr.add("安卓开发入门"); request.setAttribute("book_arr", arr); %> <c:forEach items="${book_arr}" var="index" begin="1" end="3" step="2"> <c:out value="${index}"/> </c:forEach>
⑤注意:
var属性不可以使用EL表达式
6)<c:forTokens>标签:
①属性:
属性 |
描述 |
是否必要 |
默认值 |
items |
指定要迭代的String对象 |
否 |
无 |
begin |
迭代的开始位置(0=第一个元素,1=第二个元素) |
否 |
0 |
end |
迭代的结束位置(0=第一个元素,1=第二个元素) |
否 |
Last element |
step |
每一次迭代的步长 |
否 |
1 |
var |
保存分隔后的字符串 |
否 |
无 |
varStatus |
代表循环状态的变量名称 |
否 |
无 |
②说明:用指定的分隔符分割一个字符串,根据分隔的数量确定循环的次数。
③语法:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"] >
标签主体部分
</c:forTokens>
④使用示例:
<c:set value="Java入门经典、Oracle学习手册、C#编程基础、轻松学Linux、ASP.NET实践" var="params" ></c:set> <b>分隔后的字符串:</b><br /> <c:forTokens items="${params}" delims="、" var="cl" > <c:out value="${cl}"></c:out> </c:forTokens>