zoukankan      html  css  js  c++  java
  • 【学习】JSP 2 特性:表达式语言(EL)

    JSP 2 的新特性:

      > 直接配置JSP 属性

      > 表达式语言(EL)

      > 简化的自定义标签API

      > Tag 文件语法

      如需要使用 JSP 2 语法,其web.xml 文件必须使用 Servlet 2.4 以上的配置文件。如下,绿色处。

      

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
       ....
    </web-app>

      

    表达式语言:

      表达式语言(Expression Language) 是一种简化的数据访问方式。可以方便的访问应用程序数据,避免使用JSP 脚本。

        表达式语言的语法格式是: 

        ${expression}

       1、表达式语言支持的蒜素运算符和逻辑运算符

        所有在Java 语言里面支持的算术运算符和逻辑运算符,表达式语言都可以使用。

        如 ${1+1}、${1*2}、${1/3}。除了上述加、减、乘、除、求余等算术运算符的功能,还支持 div 、 mod 等运算符。而且表达式语言把所有运算符都当成浮点数处理。

        如${1<2}、 ${10 != 10} 等等。表达语言不仅可在数字与数字之间比较,还可以在字符与字符之间比较,字符串的比较是根据其对应UNICODE值来比较大小的。

        如果需要在支持表达式语言的页面正常的输出“$”符号,则在"$"符号前 加转义字符"\"。

       2、表达式语言的内置对象

        使用表达式语言可以直接获取请求参数,可以获取页面中 JavaBean 的指定属性值,获取请求头及获取page、request、session、application范围的属性值。

         表达式语言包含如下11个内置对象。

        > pageContext : 代表 该页面的pageContext 对象。

        > pageScope : 用于获取page 范围内的属性值。

        > requestScope : 用于获取request 范围内的属性值。

        > sessionScope : 用于获取session 范围内的属性值。

        > applicationScope : 用于获取application 范围内的属性值。

        > param : 用于获取请求的参数值。

        > paramValues : 用于获取请求的参数值,其值为数组。

        > header : 用于获取请求头的参数值。

        > headerValues : 用于获取请求头的参数值,其值为数组。

        > initParam : 用于获取请求Web 应用的初始化值。

        > cookie : 获取指定的Cookie 值 。 

        用法如下:

        <!-- 使用两种方式获取请求参数值 -->
        取得请求参数值
        ${param.name};             ${param["name"]};

       3、表达式语言的自定义函数:

        自定义函数的开发步骤类似于标签的开发步骤,定义方式几乎一样。而区别在于自定义标签直接在页面上生成输出,而自定义函数则需要在表达式语言中使用。

        自定义函数的开发步骤:

        1、开发函数处理类:函数处理类就是普通类,这个普通类中包含若干个静态方法,没个静态方法都可以定义成一个函数。(可以使用JDK或其他项目提供的类,只要这个类包含静态方法。) 。 

        

    package text ; 
    public class Functions {
    //    统计字符串的个数
        public static int countChar(String text)
        {
            return text.length() ; 
        }
    //    对字符串进行反转
        public static String reverse(String text)
        {
            return new StringBuffer(text).reverse().toString() ; 
        }
    }

        2、使用标签库定义函数:在<taglib.../>元素下增加<tag.../>元素用于定义自定义标签库 ; 增加<function .../> 元素则用于定义自定义函数。每个<function.../> 只要三个元素即可。

        > name  : 指定自定义函数的名字。

        > function-class : 指定自定义函数的处理类。

        > function-signature :  指定自定义函数对应的方法。 

    <?xml version="1.0" encoding="GBK"?>
    <taglib version="2.0" 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   web-jsptaglibrary_2_0.xsd">
     <tlib-version>1.0</tlib-version>
     <short-name>t</short-name>
     <!-- 定义该标签库的URI -->
     <uri>http://jbelial.cnblogs.com</uri>
     <!-- 定义第一个函数 -->
     <function>
      <!-- 定义函数名:reverse -->
      <name>reverse</name>
      <!-- 定义函数的处理类 -->
      <function-class>text.Functions</function-class>
      <!-- 定义函数的实现方法-->
      <function-signature>java.lang.String reverse(java.lang.String)</function-signature>
     </function>
     <!-- 定义第二个函数: countChar -->
     <function>
      <name>countChar</name>
      <function-class>text.Functions</function-class>
      <function-signature>int countChar(java.lang.String)</function-signature>
     </function>
    </taglib>

        3、在JSP页面的EL 中使用函数:需要先导入标签库,然后再使用函数。

        

    <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
    <%@ taglib prefix="t" uri="http://jbelial.cnblogs.com"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title> new document </title>
    </head>
    <body>
        <h2>表达式语言 - 自定义函数</h2><hr/>
        请输入一个字符串:
        <form action="useFunctions.jsp" method="post">
            字符串 = <input type="text" name="name" >
            <input type="submit"  value="提交">
        </form>
        <table border="1" bgcolor="aaaadd">
            <tr>
            <td><b>表达式语言</b></td>
            <td><b>计算结果</b></td>
            <tr>
            <tr>
                <td>\${param["name"]}</td>
                <td>${param["name"]}&nbsp;</td>
            </tr>
            <!--  使用reverse函数-->
            <tr>
                <td>\${t:reverse(param["name"])}</td>
                <td>${t:reverse(param["name"])}&nbsp;</td>
            </tr>
            <tr>
                <td>\${t:reverse(t:reverse(param["name"]))}</td>
                <td>${t:reverse(t:reverse(param["name"]))}&nbsp;</td>
            </tr>
            <!-- 使用countChar函数 -->
            <tr>
                <td>\${t:countChar(param["name"])}</td>
                <td>${t:countChar(param["name"])}&nbsp;</td>
            </tr>
        </table>
    </body>
    </html>

        自定义函数的实质:就是将指定Java类的静态方法暴露成可以在EL中使用的函数,所以可以定义成函数的方法必须使用 public static 修饰。

        

  • 相关阅读:
    jquery跨域请求jsonp
    php返回json,xml,JSONP等格式的数据
    chrome常用配置
    html body标签的几个属性 禁用鼠标右键,禁用鼠标选中文字等
    jquery form表单序列号
    php实时输出内容能够
    php Xdebug调试
    jsonp的简单例子
    web调试的一些小技巧
    jq动态增加的button标签click回调失效的问题,即动态增加的button标签绑定事件$("button.class").click(function)无效
  • 原文地址:https://www.cnblogs.com/jbelial/p/2579763.html
Copyright © 2011-2022 走看看