Chinaunix首页 | 论坛 | 博客
  • 博客访问: 119961
  • 博文数量: 24
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 0
  • 用 户 组: 普通用户
  • 注册时间: 2016-11-22 14:58
个人简介

坚持,做最好的自己

文章分类

全部博文(24)

文章存档

2015年(2)

2014年(9)

2013年(13)

我的朋友

分类: 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中是作为标准支持的。
JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标签库目前支持四种标签:
标签 URI 前缀 示例
Core c
XML processing x
I18N capable formatting fmt
Database access (SQL) sql

Core支持JSP中的一些基本的操作;
XML processing支持XML文档的处理;
I18N capable formatting支持对JSP页面的国际化;
Database access (SQL)支持JSP对数据库的操作。

 

版本

  要注意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}必面都要写在里。在支持JSP2.0规范的容器中,可以直接使用el表达式。

一些BUG

  在websphere 6.0(6.0.2.13版以前)中,有fn:length函数的BUG。只有打补丁了。

        在websphere 中,如这样的句子会出问题,tomcat下刚运行很好。应该是:jstl只是一个规范,各个web容器对其实现不同的原因吧。

 

 

 JSTL使用配置总结

1.web.xml版本为2.3版本的配置

引用文档: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"%>

2 web.xml版本为2.4的配置

<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"%>

3 web.xml版本为2.5的配置

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使用示例

JSTL获取值范围.

引用文档:http://blog.csdn.net/tiancaoyan/archive/2009/06/10/4256637.aspx

一个EL表达式包含变量和操作符。任何存储在某个JSP作用范围(如:pagerequestsessionapplication)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), 通过每一个cookiejavax.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值。

获取单个对象

<%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=""    
    xmlns:xsi=""    
    xsi:schemaLocation="    
    /web-app_2_4.xsd">  
      
          
              
            /WEB-INF/tlds/fmt.tld  
        
  
           
          
            -rt  
            /WEB-INF/tlds/fmt-rt.tld  
        
  
           
          
              
            /WEB-INF/tlds/c.tld  
        
  
           
          
            -rt  
            /WEB-INF/tlds/c-rt.tld  
        
  
           
          
              
            /WEB-INF/tlds/sql.tld  
        
  
           
          
             -rt  
                 /WEB-INF/tlds/sql-rt.tld  
        
  
           
          
            
            /WEB-INF/tlds/x.tld  
        
  
           
          
            
            /WEB-INF/tlds/x-rt.tld  
        
  
    
  
 

 

 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.

这个标签相当于捕获在它里边的标签抛出的异常对象

//var是异常的名字

内容


条件标签

1.

语法1:无Body情况

语法2:有Body的情况

Body内容


名字 类型 描述

test Boolean 表达式的条件,相当于if()中的条件判断语句。

var String 表示这个语句的名字。

scope String var这个变量的作用范围。


2.

语法:

Body内容(子标签)

注意:它的Body只能由以下元素组成:

1) 空格

2) 0或多个子标签,必须在标签之前出现.

3) 0个或多个子标签。


3.

代表的是的一个条件分支,只能在中使用

语法: //test是boolean类型,用于判断条件真假

Body语句


4.

代表的是中的最后选择。必须在最后出现

内容


迭代标签

1.

语法1:在Collection中迭代

[begin=”begin”] [end=”end”] [step=”step”]

Body内容


语法2:迭代固定的次数.

[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。


URL相关的标签

1.

语法1:资源的内容使用String对象向外暴露

[var=”varName”] [scope=”{page|request|session|application}”] [charEncoding=”charEncoding”]>

内容


语法2:资源的内容使用Reader对象向外暴露。

varReader=”varReaderName” [charEncoding=”charEncoding”]>

内容

名字 类型 描述

url String 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源

context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字。

var String 参数的名字。

scope String var参数的作用范围。

cahrEncoding String 输入资源的字符编码。

varReader String 这个参数的类型是Reader,用于读取资源。


2.

语法1:没有Body的情况.

语法2:有Body情况下,在Body中指定查询的参数


3.

语法1:没有Body

语法2:有Body


名字 类型 描述

value String URL值

context String 当使用相对路径访问外部context资源时,context指定了这个资源的名字

var String 标识这个URL标量。

Scope String 变量作用范围。


SQL相关的标签

1.

2.

3.

4.

5.

 

jstl之foreach循环举例:

<%@ page contentType="text/html; charset=GBK" %> 
<%@ page import="java.util.*" %> 

<%@ taglib uri="" prefix="c" %> 
 
   
    JSTL测试1--c:forEach循环 
   

   
一、整数 
     
      
    

 
二、计算x的平方 
   

  
     
      
      
    
  
          
     
  
ValueSquare
 

 
三、字符串"47,52,53,55,46,22,16,2" 分隔. 
    
    
     
    
   

 
四、使用步长 
   

  
      
      
     .maxInactiveInterval}" step="60">  
    
  
          
     
  
secondsecond
 

 
五、对数组进行循环

 
  <% 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
阅读(1953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~