文档章节

引用 JAVA标签库JSTL-EL表达式介绍使用配置手册

junsun
 junsun
发布于 2010/10/16 18:06
字数 3346
阅读 5554
收藏 4

 

引用

【轰隆隆】JAVA标签库JSTL-EL表达式介绍使用配置手册

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 http://java.sun.com/jstl/core c
XML processing http://java.sun.com/jstl/xml x
I18N capable formatting http://java.sun.com/jstl/fmt fmt
Database access (SQL) http://java.sun.com/jstl/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="http://java.sun.com/jsp/jstl/core" prefix="c"%>

l  web.xml版本为2.3,还要在加上: <%@ page isELIgnored="false"%>

2 web.xml版本为2.4的配置

<web-app version="2.4"

    xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   

l  拷贝jstl.jar,standard.jar文件到Web-INF/lib目录下

l  在引用JSP页面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

3 web.xml版本为2.5的配置

J2EE5.0中已经将JSTL纳入标准规范,jstl.jar,standard.jar二个jar文件合并为jstl1.2.jar.

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

l  在引用JSP页面加上: <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

以上的web.xml各个版本在Tomcat6.0.24下也能正常显示.

JSTL使用示例

JSTL获取值范围.

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

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

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="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="x"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="f"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>

 

 

 下面介绍一下web.xml的配置

  

    xmlns="http://java.sun.com/xml/ns/j2ee"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee    
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
      
          
            http://java.sun.com/jstl/fmt  
            /WEB-INF/tlds/fmt.tld  
          
           
          
            http://java.sun.com/jstl/fmt-rt  
            /WEB-INF/tlds/fmt-rt.tld  
          
           
          
            http://java.sun.com/jstl/core  
            /WEB-INF/tlds/c.tld  
          
           
          
            http://java.sun.com/jstl/core-rt  
            /WEB-INF/tlds/c-rt.tld  
          
           
          
            http://java.sun.com/jstl/sql  
            /WEB-INF/tlds/sql.tld  
          
           
          
             http://java.sun.com/jstl/sql-rt  
                 /WEB-INF/tlds/sql-rt.tld  
          
           
          
            http://java.sun.com/jstl/x  
            /WEB-INF/tlds/x.tld  
          
           
          
            http://java.sun.com/jstl/x-rt  
            /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="http://java.sun.com/jstl/core" prefix="c" %>

  
    JSTL测试1--c:forEach循环
  

  
一、整数
    
      ,
    


二、计算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://www.honglonglong.com

http://blog.163.com/fulong258

本文转载自:http://sunjun041640.blog.163.com/blog/static/256268322010967530218

共有 人打赏支持
junsun
粉丝 13
博文 20
码字总数 0
作品 0
杭州
高级程序员
私信 提问
javaweb开发之EL和JSTL

一、EL 1.概述 EL 全名为Expression Language。 EL表达式可用在所有的HTML和JSP标签中作用是代替JSP页面中复杂的JAVA代码。 EL主要作用如下: (1)获取数据: EL表达式主要用于替换JSP页面中的...

小米米儿小
2013/12/05
0
0
JSP——Java Server Pages

简介 1. Jsp技术:Jsp是一种 html代码+ Java代码 + Jsp页面代码的技术,而且其不用像Servlet哪样需要配置访问路径。 2. Jsp执行原理:第一次访问服务器web项目中的jsp页面时,会首先把jsp页面...

江左煤郎
09/13
0
0
浅谈jsp、freemarker、velocity区别

以前做web开发页面层用的基本就是就是,最近公司java项目页面层用的技术是velocity。听说jsp要淘汰,也不知道是真是假,但本人还是比较喜欢jsp的,下面是网上查找的javaweb项目页面3种技术的...

cccyb
2017/10/21
0
0
公开课

课程名称:Java EE企业级应用开发 课程大纲: 一、Java面向对象 1. Java面向对象编程 2. 泛型集合框架 3. I/O输入输出 4. 多线程 5. 网络编程 6. 反射Reflection 7. JDBC 二、HTML+CSS 8. H...

柯普瑞杨老师
2017/10/24
0
0
Apache Tomcat8必备知识

一、Apache Tomcat 8介绍 Apache Tomcat 8支持Java EE 7规范,包括Java Servlet 3.1、JSP 2.3、Java统一表达式语言EL 3.0等。 我们可以来看看Tomcat最近几个版本分别支持的JavaEE规范。 --...

山海经
2014/05/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-7(静态代理和JDK代理)

静态代理 我们平时去餐厅吃饭,不是直接告诉厨师做什么菜的,而是先告诉服务员点什么菜,然后由服务员传到给厨师,相当于服务员是厨师的代理,我们通过代理让厨师炒菜,这就是代理模式。代理...

白话
今天
20
0
Flink Window

1.Flink窗口 Window Assigner分配器。 窗口可以是时间驱动的(Time Window,例如:每30秒钟),也可以是数据驱动的(Count Window,例如:每一百个元素)。 一种经典的窗口分类可以分成: 翻...

满小茂
今天
15
0
my.ini

1

architect刘源源
今天
12
0
docker dns

There is a opensource application that solves this issue, it's called DNS Proxy Server It's a DNS server that solves containers hostnames, if could not found a hostname that mat......

kut
今天
14
0
寻找数学的广度——《这才是数学》读书笔记2700字

寻找数学的广度——《这才是数学》读书笔记2700字: 文|程哲。数学学习方式之广:国内外数学教育方面的专家,进行了很多种不同的数学学习方式尝试,如数学绘本、数学游戏、数学实验、数学步道...

原创小博客
今天
25
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部