现在的位置: 首页 > 综合 > 正文

Servlet&JSP的那些事儿(十八)

2012年09月26日 ⁄ 综合 ⁄ 共 4473字 ⁄ 字号 评论关闭

jsp提供了自定义标签的功能,扩展了jsp对标签的处理能力,方便了开发人员开发。不过由于不同的开发人员对于同一功能可能定义了不同的标签,这使得自定义标签变得随意。由于在web开发中很多功能都是开发人员所共用的,所以定义一套标准的标签库供开发人员使用无疑能提高开发效率。这就是JSTL(JavaServer Pages Standard Tag Library,JSTL)的由来。本篇主要介绍JSTL。

对于JSTL的简介在此就不再赘述了,有兴趣可以百度或谷歌即可。

如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。这个zip文件可以从http://tomcat.apache.org/taglibs/standard/下载。

JSTL标签库分为五类,分别为JSTL核心标签库,数据库标签库,I18N格式化标签库,xml标签库和JSTL函数标签库。

JSTL核心标签库

核心标签库主要包括了一般用途的标签,条件标签,迭代标签和URL相关的标签。在jsp页面要使用核心标签库,必须使用<%@taglib%>指令指定核心标签,代码如下:

<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<c:set>标签

jstl提供了方便定义变量的标签<c:set>,能够将变量存储在jsp范围中或javabean属性中。其语法格式分为如下五种:

1)指定变量名和变量值,不指定scope(范围)

<c:set var="username" value="value"></c:set>

2)将value的值存储到范围为scope的变量中。

<c:set var="username" value="value" scope="page|request|session|application"></c:set>

3)将本体内容的数据存储至范围为scope的变量中。

<c:set var="username" scope="page|request|session|application">
本体内容
</c:set>

4)将value值存储到target对象的属性中。

<c:set value="value" target="target" property="propertyName"></c:set>

5)将本体内容的数据存储到target对象的属性中。

<c:set target="target" property="propertyName">
本体内容
</c:set>

<c:out>标签

<c:out>用来显示数据的内容,类似于<%=%>,但是功能更加强大。使用它输出内容比使用scriptlets代码要更加简单,方便页面维护。它的语法格式分为以下四种。

1)通过在<c:out>中的value属性指定需要显示的值。

<c:out value="value"/>

2)通过escapeXml属性设置是否将value中的值按照原样输出。因为<c:out>默认会将<,>,',",&转换成&lt;,&gt;,&#039;,&#034;和&amp;。如果不想转换,只需将escapeXml属性设置为"false"。

<c:out value="value" escapeXml="true|false" />

3)通过default属性来指定默认值。如果value的值为null,则显示default的值。

<c:out value="value" default="no data" />

4)通过本体内容来指定默认值。如果value值为null,则显示本体内容。

<c:out value="value" >本体内容</c:out>

<c:remove>标签
<c:remove>标签用来一处指定范围的变量。其语法格式如下:

<c:remove var="number" scope="session" />

var属性指定待删除的变量名称,scop属性是可选的,用来指定变量范围,默认为page。

<c:if>标签

<c:if>标签用来执行流程控制,其功能和java语言中的if完全相同。它有两种语法格式,一种没有本体内容,一种有本体内容。

1)没有本体内容的<c:if>标签格式如下:

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />

其中test属性必须填写,表示进行判断的表达式。属性var定义变量,该变量存放判断后的结果。scope表示var定义变量的存储范围。

2)有本体内容的<c:if>标签格式如下:

<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] >
本体内容
</c:if>

当test中表达式的结果为true时,执行本体内容。否则,不执行本体内容。

<c:choose>、<c:when>、<c:otherwise>标签

<c:if>标签只能判断一个表达式,而且无法指定表达式不成立执行的语句。JSTL也提供了类似于if...else...的语句<c:choose>标签。
<c:choose>标签本身只能当<c:when>和<c:otherwise>标签的父标签。其中可以由一个或多个<c:when>标签,有0或多个<c:otherwise>标签。其语法格式如下:

<c:choose>
    ....
    <c:when test="testCondition"></c:when>
    ....
    <c:otherwise></c:otherwise>
</c:choose>

<c:forEach>标签

<c:forEach>标签有两种语法格式,一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数。

1)<c:forEach>遍历结合对象成员,语法格式如下:

<c:forEach var="varName" items="collection" varStatus="varStatusName" begin="begin" end="end" step="step">
本体内容
</c:forEach>

其中var用来存放现在指到的成员。items指被迭代的集合对象。varStatus用来存放现在指到的相关成员的信息。begin表示开始位置(默认为0),end表示结束位置,step表示步长(默认为1)。

2)<c:forEach>指定语句执行次数,其语法格式如下。

<c:forEach var="varName" varStatus="varStatusName" begin="begin" end="end" step="step">
本体内容
</c:forEach>

<c:forTokens>标签

<c:forTokens>标签用来根据指定分隔符分割字符串。其语法格式如下。

<c:forTokens var="varName"  items="stringOfTokens"  delims="delimiters" varStatus="varStatusName" begin="begin" end="end" step="step">
本体内容
</c:forTokens>

其中,var,varStatus,begin,end,step属性和<c:forEach>标签中用法一样。items属性表示被分割的字符串,delims属性指定分隔符。

<c:import>标签

<c:import>标签可以把其他静态或动态的文件包含到本身的jsp网页中。它和jsp动作指令<jsp:include>最大的差别在于:<jsp:include>只能包含和自己在同一个web application下的文件,而<c:import>还可以包含不同web application或者其他网站的文件。其语法格式如下:

<c:import url="url" context="context" var="varName" scope="page|request|session|application" charEncoding="charEncoding">
本体内容
</c:import>

或者,资源内容作为Reader对象被导入。格式如下:

<c:import url="url" context="context" varReader="varReaderName" charEncoding="charEncoding">
本体内容
</c:import>

<c:param>标签

<c:param>标签用来传递参数,它包含两个属性name和value。其语法格式如下:

<c:param name="参数名" value="参数值" />

<c:url>标签

<c:url>标签使用正确的url重写规则构造一个url。其语法格式如下:

<c:url value="expression" context="expression" var="name" scope="scope">
  <c:param name="expression" value="expression"/>
  ...
</c:url>

value 属性用来指定基本 URL,然后在必要时标记对其进行转换。如果这个基本 URL 以一个斜杠开始,那么会在它前面加上 servlet 的上下文名称。可以使用 context 属性提供显式的上下文名称。如果省略该属性,那么就使用当前 servlet 上下文的名称。这一点特别有用,因为 servlet 上下文名称是在部署期间而不是开发期间决定的。(如果这个基本 URL 不是以斜杠开始的,那么就认为它是一个相对 URL,这时就不必添加上下文名称。) 
如果通过嵌套 <c:param> 标记指定了任何请求参数,那么将会使用 HTTP GET 请求的标准表示法将它们的名称和值添加到生成的 URL 后面。此外,还进行 URL 编码:为了生成有效的 URL,将对这些参数的名称或值中出现的任何字符适当地进行转换。
<c:redirect>标签

<c:redirect>标签将客户端的请求重定向到另一个资源。其语法格式如下:

<c:redirect url="expression" context="expression">
  <c:param name="expression" value="expression"/>
  ...
</c:redirect>

<c:redirect>用于向用户的浏览器发送 HTTP 重定向响应,它是 JSTL 中与 javax.servlet.http.HttpServletResponse 的 sendRedirect() 方法功能相当的标记。 

转载请注明出处:http://blog.csdn.net/iAm333

抱歉!评论已关闭.