JSTL简化JSP编码

转载 2006年05月24日 21:11:00

随着J2EE瘦客户机技术JavaServer Pages(JSP)在过去几年中的流行,独立开发人员已经创建了许多自定义的JSP标记库。虽然很多标记库是编写用来实现不同目标的,但它们往往也对迭代、条件及其他通用操作都提供了类似的解决方案。

为了减少对解决类似通用问题的独立标记库的需求,在Java Community Process(JSR 52)的赞助下创建了JSTL(JavaServer Pages Standard Tag Library,JSP)标准标记库,为解决这些通用功能提供一个单一的标准解决方案。

JSTL库

JSTL特别为条件处理、迭代、国际化、数据库访问和可扩展标记语言(XML)处理提供支持。JSTL还引入了expression language(EL,表达式语言),极大地简化了对JSP中应用数据的访问和操作。JSTL包括4个JSP 1.2自定义标记库,每一个都涵盖了一个特定的功能领域。

核心(Core)标记库为日常任务提供通用支持,如显示和设置变量、重复使用一组项目、测试条件以及其他操作(如导入和重定向Web内容)。

XML标记库提供了对XML处理和操作的支持,包括XML节点的解析、迭代、基于XML数据的条件评估以及可扩展样式表语言转换(Extensible Style Language Transformations,XSLT)的执行。

国际化(Internationalization)标记库支持多语种的应用程序。

数据库(Database)标记库对访问和修改数据库数据提供标准化支持。

表1:JSTL的四个标记库

 

功能领域 URI 前缀 例子
核心(Core) http://java.sun.com/jstl/core c <c:tagname ...>
XML http://java.sun.com/jstl/xml x <x:tagname ...>
国际化(Internationalization) http://java.sun.com/jstl/fmt fmt <fmt:tagname ...>
数据库(Database) http://java.sun.com/jstl/sql sql <sql:tagname ...>

 

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、国际化和数据库标记库的例子。

JSP(JSTL)中使用常量防止硬编码

源自:http://blog.csdn.net/zhutianxiang/article/details/4746732     this.state="01";通常的做法是写一个类(接口)来存...

使用JSTL改进JSP来简化网页的实现过程概述

概述    Java Server Pages (JSP) 标准标记库 (JSTL)的版本的发布对于JSP/servlet开发者来说是一个重大的进展。有了一个表达语言(EL)和一组四种强大的、易于学...

用JSTL技术改进JSP来简化网页

  • 2011年08月25日 20:07
  • 62KB
  • 下载

jsp页面中jstl标签详解

JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。   ...

J2EE:JSTL JSP标准标签库

JSTL 主要作用是使开发人员可以像使用HTML标签一样在JSP中开发Java功能 导入JSTL所需jar包jstl.jar 和 standard.jar 放入到web/WEB-INF/lib目录下s...

jstl+js+jsp 实现最简单的分页(附插件)

实现原理:页面一加载注入的list,是jsp页面通过jstl标签进行遍历在html元素中,我则通过控制html元素来使得被遍历的数组内容选择性的隐藏和显示,来实现分页。第一步:jsp页面中需要导入co...
  • xyl_ice
  • xyl_ice
  • 2017年04月26日 17:10
  • 1100

JSP基础 JSTL常用标签概述

JSTL(JSP Standard Tag Library)JSP标准标签库,JSTL作为最基本的表情库,JSTL库中提供了一系列的JSP标签,实现了最基本的功能. 在JSP页面中用taglib指令...

Java jsp页面中jstl标签详解

JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。   ...

jsp中引用的jstl 和fmt标签

JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out、set、remove、catch 2.流程控制标签:if、choose、when、otherwise 3.循环标...

JSP&nbsp;EL表达式详细引见与JSTL&amp;…

JSP EL表达式详细介绍与JSTL 标签库详解 JSP EL表达式详细介绍 一、JSP EL语言定义 E L(Expression Language) 目的:为了使JSP写起来更加简单。 表达式语...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSTL简化JSP编码
举报原因:
原因补充:

(最多只允许输入30个字)