JSTL 学习笔记

原创 2005年04月26日 12:44:00
JSP Standard Tag Library (JSTL) 的规范完成于2002年7月,随后Apache Taglibs Projects在不久的几天中提交了一个参考实现。

JSTL 的出现是为了解决程序员一直渴望有一个标准的标签库的需求,同时也为开发JSP带来了很大的便利。

JSTL 1.0提供了一系列基于JSP 1.2 API的标签库,下表列举了一些标签库的信息:
Description Prefix Default URI
Core c http://java.sun.com/jstl/core
XML Processing x http://java.sun.com/jstl/xml
I18N & Formatting fmt http://java.sun.com/jstl/fmt
Database Access sql http://java.sun.com/jstl/sql

如果要使用JSTL,那么需要加入如下声明段:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>

除了标签库之外,JSTL 1.0还定义了一个所谓的
Expression Language (EL)表达式语言。
EL用于访问运行时数据而出现,如果学过JavaScript,你会发现EL在表达上与其很类似。
${myObj.myProperty}$
${myObj["myProperty"]}$
${myObj[varWithTheName]}$

以上的语句用来检索一个对象的内部值,都是等价的。如果是访问一个数组或者列表:
${myList[2]}$
${myList[aVar + 1]}$

EL的支持的操作符:
Operator Description
. Access a property
[] Access an array/list element
() Group a subexpression
+ Addition
- Subtraction or negation of a number
/ or div Division
% or mod Modulo (remainder)
== or eq Test for equality
!= or ne Test for inequality
< or lt Test for less than
> or gt Test for greater than
<= or le Test for less than or equal
>= or gt Test for greater than or equal
&& or and Test for logical AND
|| or or Test for logical OR
! or not Unary Boolean complement
empty Test for empty value (null, empty string, or an empty collection)
支持的字面量:
Literal Type Description
String Enclosed with single or double quotes. A quote of the same type within the string must be escaped with backslash: (/' in a string enclosed with single quotes; /" in a string enclosed with double quotes). The backslash character must be escaped as // in both cases.
Integer An optional sign (+ or -) followed by digits between 0 and 9.
Floating Point The same as an integer literal, except that a dot is used as the separator for the fractional part and an exponent can be specified as e or E, followed by an integer literal.
Boolean true or false.
Null null.
支持的内建对象:
Variable Description
param A collection of all request parameters as a single string value for each parameter.
paramValues A collection of all request parameters as a string array value for each parameter.
header A collection of all request headers as a single string value for each header.
headerValues A collection of all request headers as a string array value for each header.
cookie A collection of all request cookies as a single javax.servlet.http.Cookie instance value for each cookie.
initParams A collection of all application init parameters as a single string value for each parameter.
pageContext An instance of the javax.servlet.jspPageContext class.
pageScope A collection of all page scope objects.
requestScope A collection of all request scope objects.
sessionScope A collection of all session scope objects.
applicationScope A collection of all application scope objects.

如果你要访问GET参数:
${param.listType}
如果你要访问HTTP头信息:${header['User-Agent']}

访问Session或者Request内部包含对象:
${sessionScope.customer}
${requestScope.customer}

一些例子:
First name: <c:out value="${customer.firstName}" />
<c:out value="First name: ${customer.firstName}" />
First name: <c_rt:out value="<%= customer.getFirstName() %>" />
都是等价的。

控制流程和迭代操作也是JSTL的一个特性,个人认为
迭代标签是当Java 1.5没出来之前对于Java语言的最好补充。
迭代操作使用的forEach标签:
<c:forEach items="${forecasts.rows}" var="city">
City: <c:out value="${city.name}" />
Tomorrow's high: <c:out value="${city.high}" />
Tomorrow's low: <c:out value="${city.low}" />
</c:forEach>

Choose标签:
<c:choose>
<c:when test="${param.first > 0}">
<a href="foreach.jsp?first=<c:out value="${param.first - noOfRows}"/>">
Previous Page</a>
</c:when>
<c:otherwise>
Previous Page
</c:otherwise>
</c:choose>
<c:choose>
<c:when test="${param.first + noOfRows < forecasts.rowsCount}">
<a href="foreach.jsp?first=<c:out value="${param.first + noOfRows}"/>">
Next Page</a>
</c:when>
<c:otherwise>
Next Page
</c:otherwise>
</c:choose>
URL操作:
<c:url var="previous" value="foreach.jsp">
<c:param name="first" value="${param.first - noOfRows}" />
</c:url>

特别提及的URL操作:
<c:url value="/images/logo.gif" />
<a href="<c:out value="${previous}"/>">Previous Page</a>
这里的"/images/logo.gif"不是从网站的根目录起始,而是自动调整到所对应的context根目录,非常实用。

jstl学习笔记

%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> String path = request.getContextPat...
  • huangjing0220
  • huangjing0220
  • 2014年03月30日 23:17
  • 364

JSTL 学习笔记

JSP Standard Tag Library (JSTL) 的规范完成于2002年7月,随后Apache Taglibs Projects在不久的几天中提交了一个参考实现。JSTL 的出现是为了解...
  • herongxin
  • herongxin
  • 2006年01月07日 15:40
  • 905

jstl学习笔记

  jstl学习笔记                                           http://java.sun.com/jsp/jstl/core" prefix="c"%>...
  • comenglish
  • comenglish
  • 2007年05月26日 11:14
  • 702

JSTL学习笔记

 1, c:out tag的default和escapeXml属性①default属性代码:Hello 结果:Hello Guest 代码:Hello 结果:Hello    ②escapeXml属性...
  • matianjun002
  • matianjun002
  • 2007年01月15日 19:07
  • 763

JSP页面引用jstl

在myeclipse 中集成了jstl,所以只需要在jsp页面头部添加如下一句话就可以使用jstl的core标签库: 但是eclipse是没有任何插件的,所以要使用jstl需要自己配置。...
  • echo_oy
  • echo_oy
  • 2016年03月10日 17:13
  • 13070

JSTL 拼接字符串

jstl没有直接拼接字符串的方法 需要分两步 第一步可以这样 第二步再引用 ${tablename}...
  • zz210891470
  • zz210891470
  • 2017年11月04日 15:04
  • 378

JSTL 函数内使用JSTL(内嵌)

JSTL函数内使用JSTL函数 ${fn:contains(rest.methods, ${pay.id})}    这是错误的,实际上内部可以省略${} 正确写法: ${f...
  • u013361445
  • u013361445
  • 2015年11月16日 18:49
  • 721

jstl中定义String数组

有人提出了个这个问题,想了半天可以使用fn函数实现 http://java.sun.com/jsp/jstl/core" prefix="c" %> http://java.sun.com/jsp...
  • cyq1984
  • cyq1984
  • 2011年11月01日 16:59
  • 5694

JSTL遍历数组,List,Set,Map等

  • herrapfel
  • herrapfel
  • 2011年02月14日 17:43
  • 34025

JSTL版本问题

好久没有用JSTL标签了,今天用后竟然出问题了!在网上查了下,把精华留在这里。 应用部署运行的时候出现JSP异常, 发生在使用JSTL库的时候: According to TLD or attribu...
  • fanyuna
  • fanyuna
  • 2011年07月19日 11:04
  • 4072
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JSTL 学习笔记
举报原因:
原因补充:

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