Java Servlet(十):JSTL核心标签库
2016-05-14 21:45
357 查看
JSTL全名称:JaveServer Pages Standard Tag Library.JSTL是由JCP(Java Community Process)所定制的标准规范,它主要提供给Java Web开发人员一个标准通用的函数库。
Java Web程序员能利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入JAVA程序(Scripting)的做法,以提高的阅读性、维护性和方便性。
安装
要想使用使用jstl标签库,首先要引入jstl标签库包:jstl.jar,standard.jar
官网下载地址:http://tomcat.apache.org/taglibs/standard/
这里选择的是下载jstl标签库是1.1版本(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip),目前最新版本是1.2。
下载好后,解压目录下:\lib下,可以发现这两个包。
JSTL所提供的标签函数库主要分为五大类:
(1) 核心标签库 (Core tag library)
(2) I18N格式标签库 (I18N-capable formatting tag library)
(3) SQL标签库 (SQL tag library)
(4) XML标签库 (XML tag library)
(5) 函数标签库 (Functions tag library)
核心标签库(Core tag library)
新建一个Dynamic Web Project,命名为:MyJSTL001工程。
在default.jsp页面中头部引入核心标签库:
表达式操作
表达式操作分类中包含四个标签:<c:out>、<c:set>、<c:remove>和<c:catch>。
<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样
语法1:没有本体(body)内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
用法示例:
浏览效果:
<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。
语法1:将value的值储存至范围为scope的 varName 变量之中
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2:将本体内容的数据储存至范围为scope的 varName 变量之中
<c:set var="varName" [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>
用法示例:
浏览效果:
c:remove 用来移除变量。
<c:remove var="varName" [scope="{ page|request|session|application }"] />
用法示例:
浏览效果:
c:catch 用来扑捉异常,并把异常信息存储到某个指定的变量中。
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
用法示例:
浏览效果:
流程控制
流程控制分类中包含四个标签:<c:if>、<c:choose>、<c:when>和<c:otherwise>
<c:if>
语法1:没有本体内容(body)
<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>
用法示例:
效果:
c:choose,c:when,c:otherwise。可以实现if ... else if ... else ... ;也能实现 if ... else ...语句。
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
用法示例:
浏览效果:
迭代操作
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>
<c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c: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>
使用示例:
浏览效果:
<c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forTokens>
用法示例:
浏览效果:
URL操作
JSTL包含三个与URL操作有关的标签,它们分别为:<c:import>、<c:redirect>和<c:url>。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有url的产生。
参考书籍:
《JSP2.0 技术手册》
Java Web程序员能利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入JAVA程序(Scripting)的做法,以提高的阅读性、维护性和方便性。
安装
要想使用使用jstl标签库,首先要引入jstl标签库包:jstl.jar,standard.jar
官网下载地址:http://tomcat.apache.org/taglibs/standard/
这里选择的是下载jstl标签库是1.1版本(http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/jakarta-taglibs-standard-1.1.2.zip),目前最新版本是1.2。
下载好后,解压目录下:\lib下,可以发现这两个包。
JSTL所提供的标签函数库主要分为五大类:
(1) 核心标签库 (Core tag library)
(2) I18N格式标签库 (I18N-capable formatting tag library)
(3) SQL标签库 (SQL tag library)
(4) XML标签库 (XML tag library)
(5) 函数标签库 (Functions tag library)
JSTL | 前置名称 | URI | 范例 |
核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> |
I18N格式标签库 | fmt | http://java.sun.com/jsp/jstl/xml | <fmt:formatDate> |
SQL标签库 | sql | http://java.sun.com/jsp/jstl/sql | <sql:query> |
XML标签库 | xml | http://java.sun.com/jsp/jstl/fmt | <x:forBach> |
函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | <fn:split> |
新建一个Dynamic Web Project,命名为:MyJSTL001工程。
在default.jsp页面中头部引入核心标签库:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ page import="com.dx.work.Customer" %> <%@ page import="java.util.*" %> <!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>
表达式操作
表达式操作分类中包含四个标签:<c:out>、<c:set>、<c:remove>和<c:catch>。
<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样
语法1:没有本体(body)内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
用法示例:
<h4>c:out 可以对特殊字符进行转换</h4> <% request.setAttribute("BookName", "<<jsp2.0技术手册>>"); %> BookName:${requestScope.BookName} <br/> <br/> BookName:<c:out value="${requestScope.BookName}"/> <br/> BookName(escapeXml="false"是,将取消对特殊字符进行转换操作):<c:out value="${requestScope.BookName}" escapeXml="false"/> <br/>
浏览效果:
<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。
语法1:将value的值储存至范围为scope的 varName 变量之中
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2:将本体内容的数据储存至范围为scope的 varName 变量之中
<c:set var="varName" [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>
用法示例:
<h4>c:set 可以对域对象进行赋值,为域对象里边的某一个javabean属性赋值。</h4> <c:set var="Title" value="dkkkd" scope="request" /><br/> title:${requestScope.Title}<br/> title:<c:out value="${requestScope.Title}" /><br/> <% Customer cust=new Customer(); cust.setId(1); cust.setName("number one"); request.setAttribute("cust", cust); %> <br/> id:${requestScope.cust.id}<br/> <c:set target="${requestScope.cust}" property="id" value="1001" /><br/> id:${requestScope.cust.id}<br/>
浏览效果:
c:remove 用来移除变量。
<c:remove var="varName" [scope="{ page|request|session|application }"] />
用法示例:
<h4>c:remove 用来移除变量。</h4> <c:set var="waitRemoveObject" value="abcde" scope="request" /> waitRemoveObject:<c:out value="${waitRemoveObject }" /><br/> <c:remove var="waitRemoveObject" scope="request"/> 从requestScope中移除waitRemoveObject:<c:out value="${waitRemoveObject }"/><br/>
浏览效果:
c:catch 用来扑捉异常,并把异常信息存储到某个指定的变量中。
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
用法示例:
<h4>c:catch 用来扑捉异常,并把异常信息存储到某个指定的变量中。</h4><br/> <c:catch var="errorParseMessage"> <% String intStr="111Acx"; int intVal= Integer.parseInt(intStr); %> </c:catch><br/> <c:out value="${errorParseMessage}"/><br/>
浏览效果:
流程控制
流程控制分类中包含四个标签:<c:if>、<c:choose>、<c:when>和<c:otherwise>
<c:if>
语法1:没有本体内容(body)
<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>
用法示例:
<h4>c:if 用来判定条件是否满足。不能实现if ... else if ... else ... ;也不能实现 if ... else ...</h4> <c:set var="currentUser" value="administrator" scope="session" /> <c:if var="ifConditionResult" test="${sessionScope.currentUser=='administrator'}" scope="request"> <c:out value="当前用户是:admin"/><br/> </c:if> <br/> result:<c:out value="${requestScope.ifConditionResult }"/><br/>
效果:
c:choose,c:when,c:otherwise。可以实现if ... else if ... else ... ;也能实现 if ... else ...语句。
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
用法示例:
<h4>c:choose,c:when,c:otherwise。可以实现if ... else if ... else ... ;也能实现 if ... else ...语句。<br/> 其中:c:choose以c:when,c:otherwise的父标签出现; c:when,c:otherwise不能脱离c:choose单独使用; c:otherwise 必须在c:when之后使用。 </h4> <c:set var="age" value="20" scope="request" /> the age is:<c:out value="${age}"/> <br/> <c:choose> <c:when test="${requestScope.age>=65}"> 老年。 </c:when> <c:when test="${requestScope.age>=40}"> 中年 </c:when> <c:when test="${requestScope.age>=18}"> 青年 </c:when> <c:when test="${requestScope.age>=12}"> 成年 </c:when> <c:when test="${requestScope.age>=3}"> 少年 </c:when> <c:otherwise> 儿童 </c:otherwise> </c:choose>
浏览效果:
迭代操作
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>
<c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当条件符合时,就会持续重复执行<c: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>
使用示例:
<h4>迭代操作:</h4> <c:forEach begin="0" end="2" step="1" var="item"> <c:out value="${item}"/><br/> </c:forEach> item:<c:out value="${item}"/><br/> <% List<Customer> custs=new ArrayList<Customer>(); custs.add(new Customer(1,"first member")); custs.add(new Customer(2,"first member")); custs.add(new Customer(3,"first member")); custs.add(new Customer(4,"first member")); request.setAttribute("custs", custs); %> <c:forEach items="${requestScope.custs }" var="item" varStatus="status"> first:${status.first}-index:${status.index}-count:${status.count}-last:${status.last}-${item.id}-${item.name}<br/> </c:forEach>
浏览效果:
<c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forTokens>
用法示例:
<h4>字符分割:用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。</h4> <c:set var="delimsOriginal" value="a,b,c,1;2;3;-xx-yy-zz" scope="request" /> <c:forTokens items="${requestScope.delimsOriginal}" delims=",;-" var="item"> <c:out value="${item}"/><br/> </c:forTokens>
浏览效果:
URL操作
JSTL包含三个与URL操作有关的标签,它们分别为:<c:import>、<c:redirect>和<c:url>。它们主要的功能是:用来将其他文件的内容包含起来、网页的导向,还有url的产生。
参考书籍:
《JSP2.0 技术手册》
相关文章推荐
- java多线程系列7-停止线程
- JavaSE_String 截取字符串 String.substring
- JAVA多线程之wait/notify
- 第二道题:括号配对问题
- java中的==、equals和hashCode以及hashCode生成
- HBase新版本Java API编程实战及基本操作方法封装
- 69道Spring面试题和答案
- java多线程系列6-阻塞队列
- 【JavaEE】JDBC
- Spring Mvc那点事---(5)Spring Mvc请求参数传递
- 百度之星2016 资格赛 java 代码实现
- 学习SpringMVC(四)之使用pojo作为参数
- 深入理解java内存模型(七)——总结
- 合并排序-java
- 深入理解java内存模型(六)——final
- 深入理解java内存模型(五)——锁
- 深入理解java内存模型(四)——volatile
- [Java] 贪吃蛇 V1.0
- 深入理解java内存模型(三)——顺序一致性
- Java加密技术——BASE64与单向加密算法MD5、SHA、MAC