jstl标签库
jstl通常被认为是一种单标签库。但jstl实际上有4个标签库。这些标签库被概括为如下:
核心标签库—包含一些web应用的必要的标签。核心标签库的实例包括循环,表达式赋值和基本输入输出。.
格式化/国际化标签库—包括被用来解析数据的标签库。这种标签会解析数据,比如日期,不同的场所区域等。
数据库标签库—包含被用来访问sql数据库的标签。这些标签通常仅仅只创建原形(prototype)程序。这个是因为大多数程序不会直接从jsp页面中来处理数据库访问。数据库访问应该被嵌入到能够被jsp页面所访问的ejb中。
xml标签库—包含被用来访问xml元素的标签。因为xml广泛使用于web开发,xml的处理是jstl的一个重要的特征。
在本文中,我们将仅仅只对核心标签做一个简单介绍。我们将考察一个简单的范例,来说明如何处理用户在表单中输入的数据。在我们开始检查程序之前,我们必须先看看jstl是如何处理表达式的,jstl的表达式处理是通过使用el表达式语言来完成的,仅仅只能在jsp2.0被使用。下一节,我们会考察el表达式语言。
el表达式语言
jsp2.0的一个主要的组件就是这个新的叫做el的表达式语言。el被广泛用在jstl中。然而,重要的是记住,el是jsp的功能而不是jstl的。被用在jsp2.0中jsp scriptlet代码能够包含el表达式。下面这行代码演示了jsp scriptlet代码中的el:
<p>
your total, including shipping is ${total+shipping}
</p>
正如你看到的,total和shipping相加后会产生html并且在浏览器中显示它们的值。这些表达式也可以在jstl标签中使用。jstl1.0的一个重要问题是,jstl不能用在jsp1.2的版本上。因为jsp1.2不支持el,所以有必要提供一些额外的jstl标签来帮助el的使用。例如,如果你想使用jstl来显示上面的表达式,你可以使用下面的代码。
<p>
your total, including shipping is <c:out var="${total+shipping"/>
</p>
值得注意的是,jstl不需要jsp2.0来运行。通过提供一个能够显示el表达式的标签,就可以达到这样的需求。
jstl范例
我们将考察一个简单的使用jstl的范例。在这个例子里,我们将考察web应用中的一个常见过程。我们会看到如何提交(post)一个表单,并处理post的结果。程序代码如下:
<%@ taglib uri=" http://java.sun.com/jstl/core " prefix="c" %>
<html>
<head>
<title>if with body</title>
</head>
<body>
<c:if test="${pagecontext.request.method=='post'}">
<c:if test="${param.guess=='java'}">you guessed it!
<br />
<br />
<br />
</c:if>
<c:if test="${param.guess!='java'}">you are wrong
<br />
<br />
<br />
</c:if>
</c:if>
<form method="post">guess what computer language
i am thinking of?
<input type="text" name="guess" />
<input type="submit" value="try!" />
<br/>
</form>
</body>
</html>
这个简单的web页面显示一个表单,要求用户猜测程序所想的计算机语言。当然,计算机想的是“java”。这个页面通过检查“是否已提交”来开始。这使得表单和处理表单的代码可以放在同一个页面中。是通过下面的jstl if语句实现的。
<c:if test="${pagecontext.request.method=='post'}">
现在你看到了,<c:if>标签使用el表达式来决定是否请求的方式是post的。如果数据被post到页面,那么用户输入的他们的猜想值就会存储在名为“guest”的参数中。这是因为“guest”是表单输入项的名字。我们现在必须检查是否这个参数等于“java”。这个是通过下面的<c:if>标签来完成:
<c:if test="${param.guess=='java'}">
you guessed it!
</c:if>
正如你所看到的,如果表达式为true,<c:if>标签的标签体就被执行。在本文中,我们开始考察了jstl如何被安装,以及它是如何运转的,也提供了一些jstl小范例帮助大家理解。
jstl的核心标签也包含循环,叠代器和变量处理。通过使用标签,你能在collections里进行iterate,访问用户的会话数据(session data),执行其他的核心任务等。除了核心标签库,xml,数据库和格式化标签库也提供了更多高级的用处。
(end)
注:el expression language这里翻译成el表达式语言,有的是翻译成el表达语言,是一个意思。
translated by caiyi0903(willpower),2004.2.19