posts - 37, comments - 8, trackbacks - 0, articles - 0

jsp程序设计:jstl之el

Posted on 2008-10-25 23:29 梦与桥 阅读(1686) 评论(0)  编辑  收藏 所属分类: jsp程序设计
1、el即表达式语言,是JSP技术的主要特点之一。可用于
    1)静态文本,包含EL表达式,其值在运行时计算出来,EL表达式被该值替换。
    2)标准标签和自定义标签,以帮助显示网页上的动态内容。
    3)读取JavaBean的值,使用EL表达式可以简洁地读出JavaBean的属性值。
    4)实例:包括book.java与readBook.jsp
    book.java的代码如下:
package wzz;
public class book {
    
private String name="J2EE编程技术";
    
private String author="郝玉龙";
    
private String publish="清华大学出版社";
    
private Double price=27.00;
    
public String getName() {
        
return name;
    }

    
public String getAuthor() {
        
return author;
    }

    
public String getPublish() {
        
return publish;
    }

    
public Double getPrice() {
        
return price;
    }

}
    readBook.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<jsp:useBean id="books" class="wzz.book"></jsp:useBean>
<body> 
书名:${books.name}
<br>
作者:${books.author}
<br>
出版社:${books.publish }
<br>
定价:${books.price }
<br>
打八折后:${books.price*0.8 }
<br>
</body>
2、EL使用语法
    1)“.”与[ ]运算符,两者是等价的,${books.name}与${books["name"]}的作用一样。
    2)EL变量可以引用存储在标准范围中的属性,默认的搜索顺序是page、request、session和application。如果需要,可以使用toString()方法将变量的返回值转换成为字符串;如果找不到变量,则返回null值。字符串可以用单引号也可以用双引号括起来,可以使用转义字符。
    3)EL保留字:
运算符 描述 运算符 描述 运算符 描述 运算符 描述 运算符 描述
and 与 eq 等于 gt 大于 false False div 相除
or 或 ne 不等于 ge 大于 等于 null Null mod 取模
not 非 le 小于等于 true True empty 清空
4)EL隐式对象:
下表中列出了 11 个 EL 隐式对象的标识符。不要将这些对象与 JSP 隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

 

类别 标识符 描述
JSP pageContext PageContext 实例对应于当前页面的处理
作用域 pageScope 与页面作用域属性的名称和值相关联的 Map 类
requestScope 与请求作用域属性的名称和值相关联的 Map 类
sessionScope 与会话作用域属性的名称和值相关联的 Map 类
applicationScope 与应用程序作用域属性的名称和值相关联的 Map 类
请求参数 param 按名称存储请求参数的主要值的 Map 类
paramValues 将请求参数的所有值作为 String 数组存储的 Map 类
请求头 header 按名称存储请求头主要值的 Map 类
headerValues 将请求头的所有值作为 String 数组存储的 Map 类
Cookie cookie 按名称存储请求附带的 cookie 的 Map 类
初始化参数 initParam 按名称存储 Web 应用程序上下文初始化参数的 Map 类

尽管 JSP 和 EL 隐式对象中只有一个公共对象(pageContext),但通过 EL 也可以访问其它 JSP 隐式对象。原因是 pageContext 拥有访问所有其它八个 JSP 隐式对象的特性。实际上,这是将它包括在 EL 隐式对象中的主要理由。

其余所有 EL 隐式对象都是映射,可以用来查找对应于名称的对象。前四个映射表示先前讨论的各种属性作用域。可以用它们来查找特定作用域中的标识符,而不用依赖于 EL 在缺省情况下使用的顺序查找过程。

接下来的四个映射用来获取请求参数和请求头的值。因为 HTTP 协议允许请求参数和请求头具有多个值,所以它们各有一对映射。每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。每对中第二个映射允许检索参数或头的所有值。这些映射中的键是参数或头的名称,但这些值是 String对象的数组,其中的每个元素都是单一参数值或头值。

cookie 隐式对象提供了对由请求设置的 cookie 名称的访问。这个对象将所有与请求相关联的 cookie 名称映射到表示那些 cookie 特性的 Cookie对象。

最后一个 EL 隐式对象 initParam 是一个映射,它储存与 Web 应用程序相关联的所有上下文的初始化参数的名称和值。初始化参数是通过 web.xml 部署描述符文件指定的,该文件位于应用程序的 WEB-INF 目录中。

5)隐式对象实例:Book.java+z1.jsp(设置bean并转向z2.jsp)+z2.jsp(el读取bean)
Book.java的代码如下:
package wzz;
public class Book {
    
private String name;
    
private String author;
    
public void setName(String name) {
        
this.name = name;
    }

    
public void setAuthor(String author) {
        
this.author = author;
    }

    
public String getName() {
        
return name;
    }

    
public String getAuthor() {
        
return author;
    }

}
z1.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ page import="wzz.Book"%>
<body>
    
<%
        Book book1 
= new Book();
        book1.setName(
"JSP大学实用教程");
        book1.setAuthor(
"耿祥义");
        request.setAttribute(
"book", book1);

        Book book2 
= new Book();
        book2.setName(
"JSP应用开发");
        book2.setAuthor(
"邓子云");
        session.setAttribute(
"book", book2);
        request.setCharacterEncoding(
"gb2312");
        pageContext.forward(
"z2.jsp?pj=好书!");
    
%>
</body>
z2.jsp的代码如下:
<%@ page language="java" contentType="text/html; charset=GBK"%>
<body>
这本书是:${book.name }
<br>
这本书的作者是:${requestScope.book.author }
<br>
那本书是:${sessionScope['book'].name }
<br>
那本书的作者是:${sessionScope.book.author }
<br>
对这两书的评价(传来的参数):${param.pj }
<br>
主机是:${header['host'] }
<br>
浏览器是:${header['User-Agent'] }
</body>
    6)EL运算符(算术运算符、关系运算符、逻辑运算符、验证运算符)
以下是EL运算符列表,其中empty可以检查某个值是否为空
    1. 运算符
    说明 运算符 说明

    +

    加

    > 或 gt 大于

    -

    减

    <= 或 le 小于等于

    *

    乘

    >= 或 ge 大于等于

    / 或 div

    除

    && 或 and 逻辑与

    % 或 mod

    模(求余)

    || 或 or 逻辑或

    == 或 =

    等于

    ! 或 not 逻辑非

    != 或 !=

    不等于

    empty 检查是否为空值

    < 或 lt

    小于

    a ? b : c 条件运算符
        7)EL运算符演示程序:
    <%@ page contentType="text/html;charset=gbk" %>
    <html>
      
    <head>
        
    <title>
          EL运算符使用演示
        
    </title>
      
    </head>
      
    <body bgcolor="#ffffff">
        
    <h1>
          EL运算符使用演示
        
    </h1>
        
    <table border="1">
          
    <thead>
            
    <td><b>EL Expression</b></td>
            
    <td><b>Result</b></td>
          
    </thead>
          
    <tr>
            
    <td>\${1}</td>
            
    <td>${1}</td>
          
    </tr>
          
    <tr>
            
    <td>\${1.2E4 + 1.4}</td>
            
    <td>${1.2E4 + 1.4}</td>
          
    </tr>
          
    <tr>
            
    <td>\${3 div 4}</td>
            
    <td>${3 div 4}</td>
          
    </tr>
          
    <tr>
            
    <td>\${3/0}</td>
            
    <td>${3/0}</td>
          
    </tr>
          
    <tr>
            
    <td>\${(1==2) ? 3 : 4}</td>
            
    <td>${(1==2) ? 3 : 4}</td>
          
    </tr>
          
    <tr>
              
    <td>\${1 lt 2}</td>
              
    <td>${1 lt 2}</td>
          
    </tr>
          
    <tr>
              
    <td>\${4.0 &gt;= 3}</td>
            
    <td>${4.0 >= 3}</td>
          
    </tr>
          
    <tr>
              
    <td>\${(10*10) ne 100}</td>
              
    <td>${(10*10) ne 100}</td>
          
    </tr>
          
    <tr>
              
    <td>\${'a' &lt; 'b'}</td>
              
    <td>${'a' < 'b'}</td>
          
    </tr>
          
    <tr>
              
    <td>\${'hip' &gt; 'hit'}</td>
              
    <td>${'hip' > 'hit'}</td>
          
    </tr>
          
    <tr>
            
    <td>${'${'}true && false}</td>
            
    <td>${true && false}</td>
          
    </tr>     
        
    </table>
      
    </body>
    </html>
        8)EL表达式计算的配置与禁用

    对于一个单个JSP页面,你可以使用定义page指令来设置jsp页面是否支持EL。默认是支持EL(如果要页面不支持EL,请设置为isELIgnored=true;禁用为false。

    <%@ page isELIgnored="true|false"%>

    对于整个JSP应用程序,要修改WEB.XML配置(tomcat6默认是支持EL的,不用进行修改。);

    <jsp-property-group> 
    <description> For config the ICW sample application </description>
    <display-name>JSPConfiguration</display-name>
    <url-pattern>/jsp/datareset.jsp</url-pattern>
    <el-ignored>true< / el-ignored>
    <page-encoding>ISO-8859-1</page-encoding>
    <scripting-invalid>true</scripting-invalid>
    <include-prelude>/jsp/prelude.jspf</include-prelude>
    <include-coda>/jsp/coda.jspf</include-coda>
    </jsp-property-group>