坚持,做最好的自己
分类: Java
2015-04-24 13:35:22
JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。标签 | URI | 前缀 | 示例 |
Core | c |
|
|
XML processing | x |
|
|
I18N capable formatting | fmt |
|
|
Database access (SQL) | sql |
|
版本
要注意1.0.x和1.1.x两个版本,目前最新版分别为1.0.6和1.1.2
1.1版比1.0版多了fn标签库(常用的字符串操作在里面,特别是length、substring、等用于显示的函数)
各个版本都可以在apache网站下载得到
使用中注意的问题
在仅支持JSP1.2规范的容器中,只能使用jstl 1.0版,所以fn就不能用了,很不爽。${1 + 2}必面都要写在
一些BUG
在websphere 6.0(6.0.2.13版以前)中,有fn:length函数的BUG。只有打补丁了。
在websphere 中,如
引用文档:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx
使用环境: WebLogic92 + JDK1.5,web.xml版本为2.3, 文件是如下表示:
使用步骤:
l 拷贝jstl.jar,standard.jar文件到Web-INF/lib目录下
l 在引用JSP页面加上: <%@ taglib uri="" prefix="c"%>
l 如web.xml版本为2.3,还要在加上: <%@ page isELIgnored="false"%>
<web-app version="2.4"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation="
/web-app_2_4.xsd">
l 拷贝jstl.jar,standard.jar文件到Web-INF/lib目录下
l 在引用JSP页面加上: <%@ taglib uri="" prefix="c"%>
在J2EE5.0中已经将JSTL纳入标准规范,将jstl.jar,standard.jar二个jar文件合并为jstl1.2.jar.
<web-app version="2.5"
xmlns=""
xmlns:xsi=""
xsi:schemaLocation="
/web-app_2_5.xsd">
l 在引用JSP页面加上: <%@ taglib uri="" prefix="c"%>
以上的web.xml各个版本在Tomcat6.0.24下也能正常显示.
JSTL获取值范围.
引用文档:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx
一个EL表达式包含变量和操作符。任何存储在某个JSP作用范围(如:page、request、session、application)的bean能被作为一个EL变量来使用。另外,EL支持以下预定义的变量:
变量名称
|
说明 |
pageScope |
一个包含所有page scope范围的变量集合 (a java.util.Map)
|
requestScope
|
一个包含所有request scope范围的变量集合 (a java.util.Map)
|
sessionScope
|
一个包含所有session scope范围的变量集合 (a java.util.Map)
|
applicationScope
|
一个包含所有application scope范围的变量集合 (a java.util.Map) |
param
|
一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String值的方式赋值
|
paramValues
|
一个包含所有请求参数的集合 (a java.util.Map),通过每个参数对应一个String数组的方式赋值
|
header
|
一个包含所有请求的头信息的集合, (a java.util.Map) ,通过每个头信息对应一个String值的方式赋值
|
headerValues
|
一个包含所有请求的头信息的集合 (a java.util.Map) ,通过每个头信息的值都保存在一个String数组的方式赋值
|
cookie
|
一个包含所有请求的 cookie集合 (a java.util.Map), 通过每一个cookie(javax.servlet.http.Cookie)对应一个cookie值的方式赋值
|
initParam
|
一个包含所有应用程序初始化参数的集合(a java.util.Map) ,通过每个参数分别对应一个String值的方式赋值
|
pageContext
|
一个javax.servlet.jsp.PageContext类的实例, 用来提供访问不同的请求数据
|
操作符描述了你对变量所期望的操作。如果你之前曾经使用过任何编程语言的话,在EL表达式中所使用的操作符对你来说可能看起来很熟悉。因为它们和那些在大多数语言中所支持的操作符一样。
.
访问一个bean属性或者 Map entry
[]
访问一个数组或者链表元素
()
对子表达式分组,用来改变赋值顺序
? :
条件语句,比如: 条件 ? ifTrue : ifFalse.如果条件为真,表达式值为前者,反之为后者
+
数学运算符,加操作
-
数学运算符,减操作或者对一个值取反
*
数学运算符,乘操作
/ or div
数学运算符,除操作
% or mod
数学运算符,模操作(取余)
== or eq
逻辑运算符,判断符号左右两端是否相等,如果相等返回true,否则返回false
!= or ne
逻辑运算符,判断符号左右两端是否不相等,如果不相等返回true,否则返回false
< or lt
逻辑运算符,判断符号左边是否小于右边,如果小于返回true,否则返回false
> or gt
逻辑运算符,判断符号左边是否大于右边,如果大于返回true,否则返回false
<= or le
逻辑运算符,判断符号左边是否小于或者等于右边,如果小于或者等于返回true,否则返回false
>= or ge
逻辑运算符,判断符号左边是否大于或者等于右边,如果大于或者等于返回true,否则返回false
&& or and
逻辑运算符,与操作赋。如果左右两边同为true返回true,否则返回false
|| or or
逻辑运算符,或操作赋。如果左右两边有任何一边为true返回true,否则返回false
! or not
逻辑运算符,非操作赋。如果对true取运算返回false,否则返回true
empty
用来对一个空变量值进行判断: null、一个空String、空数组、空Map、没有条目的Collection集合
func(args)
调用方法, func是方法名,args是参数,可以没有,或者有一个、多个参数.参数间用逗号隔开
一个EL表达式可以包含:数字、文本(在单引号或者双引号之间)、布尔值、null值。
1 获取单个对象
<%request.setAttribute(“username”,”david”)%>
${requestScope.userName}
2遍历Map类型
<%
Hashtable hashtable1 = new Hashtable();
hashtable1.put(new Integer(1), "uno");
hashtable1.put(new Integer(2), "dos");
hashtable1.put(new Integer(3), "tres");
request.setAttribute("numberMap", hashtable1);
//JSTL最好指定范围访问值:
// ${sessionScope. numberMap2},${ applicationScope. numberMap2}.
request.getSession().setAttribute("numberMap2",hashtable1); request.getSession()
.getServletContext().setAttribute("numberMap3",hashtable1);
%>
<c:forEach var="month" items="${numberMap}">
<li>
${month.key}, ${month.value}
li>
c:forEach>
各JSTL相关引用标记
<%@ taglib uri="" prefix="c"%>
<%@ taglib uri="" prefix="x"%>
<%@ taglib uri="" prefix="f"%>
<%@ taglib uri="" prefix="sql"%>
<%@ taglib uri="" prefix="fn"%>
下面介绍一下web.xml的配置
xmlns:xsi=""
xsi:schemaLocation="
/web-app_2_4.xsd">
JSTL语法及参数详解
JSTL语法及参数
JSTL包含以下的标签:
常用的标签:如
条件标签:如
URL标签:如
XML标签:如
国际化输出标签:如
SQL标签:如
一般用途的标签:
1.
没有Body时的语法
有Body时的语法
这里是Body部分
名字 类型 描述
value Object 将要输出的表达式
escapeXml boolean 确定以下字符:<,>,&,’,”在字符串中是否被除数,默认为true
default Object 如果vaule计算后的结果是null,那么输出这个默认值
2.
这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值,或者设定某个已经存在的javabean对象的属性。他类似于<%request.setAttrbute(“name”,”value”);%>
语法1:使用value属性设定一个特定范围中的属性。
语法2:使用value属性设定一个特定范围中的属性,并带有一个Body。
Body部分
语法3:设置某个特定对象的一个属性。
语法4:设置某个特定对象的一个属性,并带有一个Body。
Body部分
名字 类型 描述
value Object 将要计算的表到式。
var String 用于表示value 值的属性,如果要在其他标签中使用,就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量,并且这个变量只能在标签中的一个。
scope String var的有效范围,可以是page|request|session|application中的一个
target String 将要设置属性的对象,它必须是javabean或则java.util.Map对象
property Object 待设定的Target对象中的属性名字,比如在javabean中有个name属性,提供了setUserId方法,那么这里填userId。
3.
4.
这个标签相当于捕获在它里边的标签抛出的异常对象
内容
条件标签
1.
语法1:无Body情况
语法2:有Body的情况
Body内容
名字 类型 描述
test Boolean 表达式的条件,相当于if()中的条件判断语句。
var String 表示这个语句的名字。
scope String var这个变量的作用范围。
2.
语法:
Body内容(
注意:它的Body只能由以下元素组成:
1) 空格
2) 0或多个
3) 0个或多个
3.
代表的是
语法:
Body语句
4.
代表的是
内容
迭代标签
1.
语法1:在Collection中迭代
[begin=”begin”] [end=”end”] [step=”step”]
Body内容
[begin=”begin”] [end=”end”] [step=”step”]
Body内容
var String 迭代的参数,它是标签参数,在其他标签中通过它来引用这个标签中的内容。
Items Collection、ArrayList、 要迭代的items集合.
Iterator、Map、String、
Eunmeration等
VarStatus String 表示迭代的状态,可以访问迭代自身的信息
Begin int 表示开始迭代的位置。
End int 表示结束迭代的位置。
Step int 表示迭代移动的步长,默认为1。
1.
语法1:资源的内容使用String对象向外暴露
[var=”varName”] [scope=”{page|request|session|application}”] [charEncoding=”charEncoding”]>
内容
varReader=”varReaderName” [charEncoding=”charEncoding”]>
内容
名字 类型 描述
url String 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源
context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。
var String 参数的名字。
scope String var参数的作用范围。
cahrEncoding String 输入资源的字符编码。
varReader String 这个参数的类型是Reader,用于读取资源。
语法1:没有Body的情况.
语法2:有Body情况下,在Body中指定查询的参数
语法1:没有Body
语法2:有Body
value String URL值
context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字
var String 标识这个URL标量。
Scope String 变量作用范围。
1.
2.
3.
4.
5.
jstl之foreach循环举例:
语法2:迭代固定的次数.
名字 类型 描述
URL相关的标签
语法2:资源的内容使用Reader对象向外暴露。
2.
3.
名字 类型 描述
SQL相关的标签
<%@ page import="java.util.*" %>
<%@ taglib uri="" prefix="c" %>
一、整数
二、计算x的平方
Value
Square
三、字符串"47,52,53,55,46,22,16,2" 分隔.
四、使用步长
second
second
五、对数组进行循环
<% int ai[] = {10, 20, 30, 40, 50};
pageContext.setAttribute("ary", ai);
%>
<%
Cookie c=new Cookie("cookie1","one");
response.addCookie(c);
%>
<%
Cookie cookies[]=request.getCookies();
Cookie sCookie=null;
String sname=null;
String name=null;
if(cookies==null) // 如果没有任何cookie
out.print("none any cookie");
else
{
//out.print(cookies.length + "
");
for(int i=0;i
sCookie=cookies[i];
sname=sCookie.getName();
name = sCookie.getValue();
out.println(sname + "->" + name + "
");
}
}
%>
Cookie Name
Cookie Value
六、字符串数组循环
<% String as[] = {
"A first string", "La deuxieme string", "Ella troisiemo stringo"
};
request.setAttribute("stringArray", as);
%>
七、枚举
<%
Hashtable hashtable1 = new Hashtable();
pageContext.setAttribute("numberMap", hashtable1);
hashtable1.put(new Integer(1), "uno");
hashtable1.put(new Integer(2), "dos");
hashtable1.put(new Integer(3), "tres");
hashtable1.put(new Integer(4), "cuatro");
hashtable1.put(new Integer(5), "cinco");
hashtable1.put(new Integer(6), "seis");
hashtable1.put(new Integer(7), "siete");
hashtable1.put(new Integer(8), "ocho");
hashtable1.put(new Integer(9), "nueve");
hashtable1.put(new Integer(10), "diez");
java.util.Enumeration enumeration = hashtable1.keys();
pageContext.setAttribute("enumeration", enumeration);
%>
八、map
转载自
http://fulong258.blog.163.com/blog/static/17895044201081833046758