4-2 JSP中的JSTL、POJO、MVC
1 JSTL
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。
1.1 JSTL的作用
JSTL 有助于加速开发周期,极大地简化了 JSP 应用程序的开发和维护。
1.2 JSTL的使用
将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,在JSP页面头部加入<%@ taglib prefix="..." uri="..." %>,然后在这个JSP页面中就可以使用这个引入的标签了。
1.3 JSTL中常用标签
核心标签库、国际化标签(I18N)
1.3.1 核心标签库
Core 标签库主要包括了一般用途的标签、条件标签、迭代标签和 URL 相关的标签。在 JSP 页面使用 Core 标签,要使用 taglig 指令,指定引用的标签库,如下:
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<c:out>的功能与JSP中的<%= 表达式%>类似,用于向页面输出,其语法格式分为如下五种:
- 通过在<c:out>中的value属性指定需要显示的值。<c:out value="value"/>
- 通过escapeXml属性设置是否将value中的内容按照原样输出。因为<c:out>默认会将<、>、’、”、&转换成<、>、'、"和&。如果不想转换,只需要设定escapeXml属性为“false”。<c:out value="value" escapeXml="true | false"/>
- 通过default属性来指定默认值。如果value的值为null时,则显示default的值。<c:out value="value" default="No data"/>
- 通过本体内容来指定默认值。如果value的值为null时,则显示default的值。<c:out value="value" escapeXml="true | false"/>本体内容</c:out>
.<c:set>用于设置范围变量的值或者 javabean 对象的属性,其语法格式分为如下五种:
- 指定变量名以及变量值,不指定scope(范围)。<c:set var="username" value="value"></c:set>
- 将value的值储存到范围为scope的变量中。<c:set var="username" value="value" scope=”page | request | session | application”></c:set>
- 将本体内容的数据储存至范围为scope的变量中。<c:set var="varname" scope=”page | request | session | application”>本体内容</c:set>
- 将value值储存到targer对象的属性中。<c:set value=”value” target=”target” property=”propertyName”></c:set>
- 将本体内容的数据储存到targer对象的属性中。<c:set target=”target” property=”propertyName”>本体内容</c:set
<c:remove>用来移除指定范围的变量。其语法格式如下:
<c:remove var=”number” scope=”session”>,var属性指定待删除变量的名称,scope属性是可选的,用来指定删除变量的范围,缺省为page。
<c:if>标签用来执行流程控制,其功能和Java语言中的if完全相同。<c:if>标签有两种语法格式:一种没有本体内容,一种有本体内容。
- 没有本体内容的<c:if>标签格式如下。<c:if test = ”testCondition” var=”varName” [scope=”{page | request | session | application}]” />其中test属性是必须填写的,表示进行判断的表达式。属性var定义变量,该变量存放判断后的结果。scope表示var定义变量储存的范围。
- 有本体内容的<c:if>标签格式如下。<c:if test = ”testCondition” var=”varName” [scope=”{page | request | session | application}]” >本体内容</if>其中test属性是必须填写的,当test中表达式的结果为true时,则会执行本体内容;如果为false则不会执行。
<c:if>标签只能判断一个表达式,而且无法指定如果表达式不成立执行语句。JSTL同样提供了类似于if....else....的语句<c:choose>标签。<c:choose>中可以有一个或多个<c:when>标签,有零个或多个<c:otherwise>标签。其语法格式如下:
<c:choose>
<c:when test = ”testCondition”>
</c:when>
...
<c:oherwise>
</c:oherwise>
</c:choose>
<c:forEach>标签两种语法格式。一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数。
- <c:forEach>遍历集合对象的成员,语法格式如下:<c:forEach [var=”varname”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>本地内容</forEach>,其中“var”用来存放现在指到的成员;“items”指被迭代的集合对象;“varStatus”用来存放现在指到的相关成员的信息;“begin”表示开始位置(默认为0);“end”表示结束位置。“step”表示步长(默认为1)。
- <c:forEach>指定语句执行次数,其语法格式如下:<c:forEach [var=”varname”] [varStat