JSP之EL

EL(Expression Language,表达式语义),它提供了Web网页和JavaBean管理进行通信的重要机制,简化了JSP开发中对象的引用,从而规范页面代码,增加了程序的可读性和可维护性。EL提供了获取对象及属性的简单方式,支持简单的运算。

1、EL基本语法

语法格式:

${expression}   //expression为要输出的内容,可以使字符串或表达式

EL禁用
在低版本及JSP 2.0以前的版本不支持EL,为了兼容低版本,可以禁用EL,共三种方法。

  1. 禁用一行EL,使用"\",语法格式如下:\${expression};
  2. 禁用一个JSP页面的EL,使用JSP的表示指令page,语法格式如下:<%@ page isELIgored = "true"%>
  3. 禁用一个应用程序的EL,在web.xml配置中禁用,其代码如下:
    <jsp-config>
      <jsp-property-group>
             <url-pattern>*.jsp<url-pattern>
             <el-ignored>true</el-ignored>
      </jsp-property-group>
    <jsp-config>
EL访问数据的方式:通过 . 和 []来访问数据,通常情况下二者等价,但当属性中包括一些特殊符号时只能使用[]来访问对象的属性。例如:${userInfo.user-id}是错误的,${userInfo[user-id]}是正确的。另外[]可以用来访问数组或者List集合。
在EL中判断对象是否为空,其语法结构:
${empty expression}   //expression为空返回true,反之返回false

2、EL隐含对象

EL提供了11个隐含对象,类似如JSP的内置对象,可以直接通过对象名进行操作,分为三个大类页面上下文对象、访问作用域的隐含对象和访问环境信息的隐含对象。

  1. pageContext对象,属于页面上下文对象,用于访问JSP部分内置对象(Request、Response、out、session、exception、page),其他JSP内置对象不能被其访问。在获得JSP内置对象后,即可获得其属性值。
  2. pageScope对象,属于访问作用域隐含对象,用于返回page范围内的属性值的集合。
  3. requestScope对象,属于访问作用域隐含对象,用于返回包含request范围内的属性值的集合。
  4. responseScope对象,属于访问作用域隐含对象,用于返回包含response范围内的属性值的集合。
  5. sessionScope对象,属于访问作用域隐含对象,用于返回包含session范围内的属性值的集合。
  6. applicationScope对象,属于访问作用域隐含对象,用于返回包含request范围内的属性值的集合。
  7. param对象,属于访问环境信息的隐含对象,用于获取请求参数的值,应用在参数值只有一个的情况下。
  8. paramValues对象,属于访问环境信息的隐含对象,用于获取请求参数的值,应用在参数名对应多个值的情况下。
  9. header和headerValues对象,属于访问环境信息的隐含对象,当获取HTTP请求的一个具体header的值时使用header对象,当同一个header对象对应多个不同的值时使用headerValues对象。
  10. initParam对象,属于访问环境信息的隐含对象,用于获取Web应用初始化参数的值。
  11. cookie对象。

3、定义和使用EL函数

定义和使用EL函数的三个步骤:

  1. 编写Java类,并编写公共的静态方法,用于实现自定的EL函数的具体功能;
  2. 编写标签库描述文件声明函数,该文件扩展名为“.tld”,保存在WEB-INF文件夹下。
  3. 在JSP页面中引用标签库,并调用定义的EL函数实现相应的功能。
示例stringDeal.tld文件如下:
<?xml version="1.0" encoding="utf-8"?>
<taglib 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/j2eeweb-jsptaglibrary_2_o.xsd" version="2.0">
   <tlib-version>1.0</tlib-version>
   <uri>/stringDeal</uri>
   <function>
         <name>shiftEnter</name>
         <function-class>com.wgh.StringDeal</function-class>
         <function-signature>java.lang.String shiftEnter(java.lang.String)</function-signature>
   </function>
</taglib>
<uri>标记:用于指定tld文件的映射路径,在应用EL函数时需要使用该标记指定的内容。
<name>标记:用于指定EL函数所对应的静态方法名,与Java文件中的方法名相同。
<function-class>标记:用于指定EL函数所对应的Java文件,文件要求完整路径。
<function-signature>标记:用于指定EL函数多对应的静态方法,其中包括返回值和参数的完整类型。

使用自定义的EL函数的JSP页面中:
...//代码省略
<%@ taglib prefix="wgh" uri="/stringDeal"%>
...//代码省略
${wgh:shiftEnter(param.content)}


发布了23 篇原创文章 · 获赞 1 · 访问量 2万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章