核心标签库:
流程处理标签:
<c:if>:这个标签可以根据某个表达式的结果,决定是否显示Body内容。<c:if>标签的test属性中可以放置EL表达式,如果表达式的结果是true,则会将<c:if>Body输出。
<c:chosse>、<c:when>、<c:otherwise>:这些标签在某些条件成立时显示某些内容,不成立时就显示另一些内容。<c:when>及<c:otherwise>必须放在<c:choose>标签中,当<c:when>的test运算结果为true时,会输出<c:when>的Body内容,而不理会<c:otherwise>的内容,当<c:choose>中包含多个<c:when>标签,此时,从上 往下进行测试,如果有个<c:when>的test运算结果为true就输出其Body内容,之后的<c:when>就不会做测试。当所有的<c:when>测试都不成立,才会输出<otherwise>的内容。
<c:forEach>:使用这个标签简单的实现Scriplet中Java代码的for循环。标签中items属性可以是数组、Collection、Iterator、Enumeration、Map与字符串,每次会依次从items指定的对象中取出一个元素,指定给var属性设置的变量,之后在<c:forEach>标签Body中使用var属性所设置的变量来取得该元素。
错误处理标签:
如果想在错误发生时,在本网页中捕捉异常,显示相关信息,就可以使用<c:catch>标签
使用<c:catch>将可能产生异常的网页段落包起来,若有异常发生,异常对象将会设置给var属性所指定的名称,这样才可以使用这个异常对象。如下是捕捉一个加法网页类型转换异常的测试代码:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>add page</title>
</head>
<body>
<c:catch var="error">
${param.a} + ${param.b} = ${param.a + param.b}
</c:catch>
<c:if test="${error != null}">
<br><span style="color: red;">${error.message}</span>
<br>${error}
</c:if>
</body>
</html>
网页导入、重定向、URL处理标签:
网页导入:
在JSTL中,可以通过<c:import>标签在运行 时动态导入另一个网页,也可以搭配<c:param>在导入另一个网页时带有参数。如下操作:
<c:import url="add.jsp">
<c:param name="a" value="1" />
<c:param name="b" value="2" />
</c:import>
重定向:
在Servlet/JSP中,必须使用HttpServletResponse的sendRedirect()方法进行重定向,可以使用JSTL的<c:redirect>标签达到相同的作用,如果重定向需要参数,可以通过<c:param>设置,如下使用:
<c:redirect url="add.jsp">
<c:param name="a" value="1" />
<c:param name="b" value="2" />
</c:redirect>
URL处理标签:
当用户关闭cookie功能时,可以利用response的encodeURL()方法进行URL重写来维持使用session进行会话管理。在JSTL中同样可以使用<c:url>标签达到同样的功能,它在用户关闭Cookie功能时,自动用Session ID作URL重写。如下一个计数程序:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<c:set var="count" value="${sessionScope.count + 1}" scope="session"/>
<html>
<head>
<title>JSP Count</title>
</head>
<body>
<h1>JSP Count ${sessionScope.count}</h1>
<a href="<c:url value='count.jsp'/>">递增</a>
</body>
</html>
同样,如果在URL上需要携带参数,可以搭配<c:param>标签,参数将会被编码后附加在URL上,如下使用:
<c:url value="some.jsp">
<c:param name="name" value="test"/>
</c:url>
属性处理与输出标签:
属性处理:
如果想要在page、request、session、application等范围中设置一个属性,则可以使用<c:set>标签。
如下要设置一个login属性,代表用户已经登陆:
<c:set var="login" value="${user}" scope="session" />
如上使用,value值也可通过EL表达式来进行设置。在使用<c:set>时,不设置scope时,则会以page、request、session、application的范围寻找属性名称,如果在某个范围内找到属性名称,则在该范围设置属性。如果在所有的范围都没有找到属性,则会在page页面中新增属性。如果想要移除某个属性可以使用<c:remove>标签:
<c:remove var="login" scope="session"/>
<c:set>也通过如下设置JavaBean的属性或Map对象的键/值,必须要使用到target属性:
<c:set target="${user}" propert="name" value="${param.name}"/>
输出标签:
<c:out>:输出指定的文字:
<c:out value="${param.message}"/>
<c:out>标签会自动将角括号、单引号、双引号等字符用替待字符取代,该功能由<c:out>的escapeXml属性控制,默认true,若设置为false,就不会替代字符。
同时,使用<c:out>标签可以通过default属性设置EL运算结果为null时默认显示值。
I18N兼容格式标签库:
JSTL提供I18N兼容格式标签库,协助Web应用程序完成国际化功能,提供数字、日期等格式功能,以及区域(Locale)、信息、编码处理等国际化功能的标签
之前有一篇关于程序国际化的博文有说到一些知识,可以进行参考
信息标签:
- <fmt:bundle>:属性basename代表默认使用的信息文件
- <fmt:message>:属性key指定信息文件中的哪条信息
- <fmt:setBundle>:标签中的basename属性设置使用的信息文件,设置的作用于默认是整个页面都有作用,如果在页面中有额外的<fmt:bundle>设置,则以<fmt:bundle>的设置为主
如果在信息文件中某些部分必须动态决定,则可以使用占位字符先替代,在具体使用时在<fmt:message>标签内部再通过<fmt:param>逐一设置占位字符
地区标签:
在JSTL中决定信息文件的顺序如下:
- 使用指定的Locale对象取得信息文件
- 根据浏览器Accept-Language标头指定的偏好地区(Prefered locale)顺序,这可以使用HttpServletRequest的getLocales()来取得。
- 根据后背地区(fallback locale)信息来取得信息文件
- 使用基础名称取得信息文件
如果要共享Locale信息,可以使用<fmt:setLocale>标签,在value属性上指定地区信息。
格式标签:
- <fmt:formatDate>:默认用来格式化日期,属性dateStyle用来指定日期的详细程度,可设置”default”、”short”、”medium”、”long”、”full”。如果想显示时间,则要在type属性上指定”time”或”both”,默认是date。timeStyle属性用来指定时间的详细程度。pattern属性则可自定义格式。
- <fmt:timeZone>:可指定时区
- <fmt:setTimeZone>:全局的时区指定
- <fmt:fromatNumber>:用来格式化数字
- <fmt:parseDate>、<fmt:parseNumber>:用来解析日期
XML标签库:
Xpath、XSLT:
XPath是用来寻找XML文件中特定信息的语言,XPath常用的路径表示如下:
路径表示 | 说明 |
---|---|
节点名称 | 选择指定名称节点的所有子节点 |
/ | 从根节点开始选择 |
// | 从符合选择的目前节点开始选择结点,无论其出现位置 |
. | 选择目前节点 |
.. | 选择目前节点的父节点 |
@ | 选择属性 |
XSLT是将XML文件转换为另一个XML文件、HTML或XHTML的语言
- <xsl:template>:定义模板
- <xsl:for-each>:逐一选择节点
- <xsl:value-of>:取出指定结点的值
解析、设置与输出标签:
- <x:parse>:解析XML文件,doc属性指定String或Reader作为XML文件来源,var属性指定解析结果要存储的属性名称,默认会存储在page属性范围,可以使用scope来指定保存范围,也可在<x:parse>的Body放置XML进行解析。
- <x:out>:取得XML文件中的信息并输出。属性select必须以XPath表示,以$作为开头,后面接着解析结果存储时的属性名称。
- <x:set>:取得值并存储至某个属性范围
流程处理标签:
- <x:if>:在属性select指定选择的元素存在时执行
- <x:choose>、<x:when>、<x:otherwise>:类似于if……else……
文件转换标签
- <x:transform>:直接进行XML文件转换,doc属性指定XML文件,xslt属性是xslt文件
函数标签库
使用EL函数库,必须指定taglib指示元素进行定义
使用EL语法来指定使用那个EL函数,使用如下:
${fn:length()}