jstl简化jsp编码

 

jstl入门

初步了解jstl的最好方法是访问apache网站--jakarta.apache.org,并下载jstl的参考实现。在apache站点还可找到详细的安装指南。可下载的参考实现是一个jar文件、文档和简单代码示例的组合包。

要在你的j2ee web应用程序中使用jstl,只需简单地将"lib"目录下的jstl jar文件复制到你应用程序的web-inf/lib目录下。要在一个特定的jsp中使用jstl标记,你还必须提供一个taglib指令。例如,要将"核心"jstl库导入到你的页面中,你应该在你的jsp顶端包含下面的指令,如下所示:

 

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

 

jstl的el支持

jstl的一个重要优势是它采用了简单的expression language(el),该语言提供一个访问和操作应用程序数据(如存储在servlet上下文中的数据)的简单方式。

el的语法很简单,而且比java中具有相同功能的表示要对用户更为友好。例如, pagecontext.getattribute("aname")表达式在el中就成了${aname}。所有的jstl标记在其属性值中都使用el表达式。el表达式在访问嵌套属性时使用${java.expression}或${ data.reference}格式。数据参考可以是对象及其属性或者对象及其属性数组:

 

${myobject.property}

 

数组存取操作符也用于以索引元素集合显示的数据,如java数组或java.util.list:

 

${mylist[2]}$

 

在el表达式中除了可以使用属性和数组元素操作符以及算术、关系和逻辑操作符以外,你还可以使用特别操作符来测试对象是否为空。

除了对象和数组存取,el还提供了一个完整的常用操作符集合,包括=、!、<、>、<=、>=、+、-、*、/等。

在任何jsp范围(页面、请求、会话或应用程序)中的对象都可以在el表达式中引用。例如,如果你有一个带有一个属性"ename"的java bean--employee,那么可以用el表达式${employee.ename}访问这个变量。

除了显式变量,el还提供了对隐式变量的请求和应答对象中的隐式变量的直接访问。例如,以下语句将访问一个名为"empname"的请求参数:

 

${param.empname}

 

即将推出的jsp 2.0和jstl 1.0都使用el。然而,jsp 2.0中使用的el稍有一点不同。jstl专家组(jsr-052)已经同意在即将推出的jstl维护版中使用el的jsp 2.0版本。

使用jstl核心标记库

jstl核心标记库为诸如显示、迭代和设置变量等操作提供了最常用的标记。下面,我们更详细地介绍一些最常用的jstl核心标记库。首先,在使用任何jstl核心标记之前,你需要将以下指令添加到你的jsp中:

 

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

 

你最常使用的jstl操作之一是显示动态值。为了显示动态数据,核心库提供了c:out标记。c:out标记在一个页面中显示一个el表达式的值。例如:

 

first name: <c:out value="${employee.ename}" />

 

c:out的值属性还可以包含文本和表达式的组合:

 

<c:out value="first name: ${employee.ename}" />

 

(注意:当jsp 2.0提供对el的支持时,你无需再使用c:out操作,你可以直接在页面中嵌入jsp表达式。)

另一个操作是设置变量。为了在一个页面中设置变量,核心标记库提供了c:set标记。这个例子显示了将变量ename设置为参数"enameparm"的值:

 

<c:set var="ename" value="${param.
enameparm}" />

 

jstl核心标记库还提供了用于处理条件的标记。c:if处理简单的条件测试。计算test属性中布尔表达式的值;如果是真,计算主体中的内容。在下面的操作中,你还可以看到存储测试结果以备以后在页面(或者在别的地方,如果指定了其他的可选范围属性)中使用的可选的var属性:

 

<c:if test="${employee.salary <= 10000}" >
it's time for a raise <c:out value="${employee.name">! </c:if>

 

下面,你可以看到jstl通过c:choose、c:when和c:otherwise对跳转逻辑的支持。你可以在一个选择(choose)标记中包含一组c:when操作;如果对c:when块中的表达式求值为真,则不对下面的c:choose操作中的测试进行计算。如果对c:when块中测试求值没有一个为真,则计算c:otherwise操作(如果存在的话)的内容:

 

<c:choose>
<c:when test="${dept.name == 
'development'}">
...
</c:when>
<c:when test="${dept.name == 
'marketing'}">
...
</c:when>
<c:otherwise>
...
</c:otherwise>
</c:choose>

 

c:foreach标记提供了一个对元素集合进行迭代的简单方法。如果你只想迭代集合中的部分元素,你可以分别指定开始和结束索引以及带有可选的开始、结束与步进属性的增量值。在下例中,我们对变量empnames中的一个集合的内容进行迭代;在每个循环中,下一个元素被放置在变量名中,并在c:foreach操作的主体中进行求值。

 

 
<table>
<c:foreach var="name" items="${empnames}">
<tr><td><c:out value="${name}"/></td></tr>
</c:foreach>
</table>

 

jstl核心标记库还可以简化异常处理。以前,你必须将java try/catch语句放置在java scriptlet中,或者在错误页面中提供它们。jstl通过c:catch标记提供了一个处理异常的高明方法,而无需使用scriptlet。

 

<c:catch>
   <!—. . . some set of nested jstl tags that fire an exception->

</c:catch>

 

可以在jakarta.apache.org的参考实现中提供的jstl文档中找到其他jstl标记库如xml、国际化和数据库标记库的例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值