1. 概述

EL:Expression Language 表达式语言
它的作用就是替换和简化jsp页面中java代码的编写
EL表达式支持简单的运算符:加减乘除取摸,逻辑运算符。empty运算符(判断是否为null),三目运算符
empty运算符可以判断对象是否为null,用作于流程控制!
三目运算符简化了if和else语句,简化代码书写

  1. <%
  2. List<Person> list = null;
  3. %>
  4. ${list==null?"list集合为空":"list集合不为空"}

2. 内置对象

EL表达式主要是来对内容的显示,为了显示的方便,EL表达式提供了11个内置对象

  • pageContext 对应于JSP页面中的pageContext对象(注意:取的是pageContext对象)
  • pageScope 代表page域中用于保存属性的Map对象
  • requestScope 代表request域中用于保存属性的Map对
  • sessionScope 代表session域中用于保存属性的Map对象
  • applicationScope 代表application域中用于保存属性的Map对象
  • param 表示一个保存了所有请求参数的Map对象
  • paramValues 表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
  • header 表示一个保存了所有http请求头字段的Map对象
  • headerValues 同上,返回string[]数组
  • cookie 表示一个保存了所有cookie的Map对象
  • initParam 表示一个保存了所有web应用初始化参数的map对象

    3. 数据回显

    ```html <%—模拟数据回显场景—%> <% User user = new User(); user.setGender(“male”);

    //数据回显 request.setAttribute(“user”,user); %>

  1. <a name="QzpDU"></a>
  2. # 4. 自定义函数
  3. EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能<br />**开发HTML转义的EL函数**<br />**我们有时候想在JSP页面中输出JSP代码,但是JSP引擎会自动把HTML代码解析,** **输出给浏览器。此时我们就要对HTML代码转义。**<br />**步骤:**<br />编写一个包含静态方法的类(EL表达式只能调用静态方法),该方法很常用,Tomcat都有此方法,可在webappsexamplesWEB-INFclassesutil中找到
  4. ```java
  5. public static String filter(String message) {
  6. if (message == null)
  7. return (null);
  8. char content[] = new char[message.length()];
  9. message.getChars(0, message.length(), content, 0);
  10. StringBuilder result = new StringBuilder(content.length + 50);
  11. for (int i = 0; i < content.length; i++) {
  12. switch (content[i]) {
  13. case '<':
  14. result.append("&lt;");
  15. break;
  16. case '>':
  17. result.append("&gt;");
  18. break;
  19. case '&':
  20. result.append("&amp;");
  21. break;
  22. case '"':
  23. result.append("&quot;");
  24. break;
  25. default:
  26. result.append(content[i]);
  27. }
  28. }
  29. return (result.toString());

在WEB/INF下创建tld(taglib description)文件,在tld文件中描述自定义函数

  1. <?xml version="1.0" encoding="ISO-8859-1"?>
  2. <taglib xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  5. version="2.1">
  6. <tlib-version>1.0</tlib-version>
  7. <short-name>myshortname</short-name>
  8. <uri>/zhongfucheng</uri>
  9. <!--函数的描述-->
  10. <function>
  11. <!--函数的名字-->
  12. <name>filter</name>
  13. <!--函数位置-->
  14. <function-class>utils.HTMLFilter</function-class>
  15. <!--函数的方法声明-->
  16. <function-signature>java.lang.String filter(java.lang.String)</function-signature>
  17. </function>
  18. </taglib>

在JSP页面中导入和使用自定义函数,EL自定义的函数一般前缀为”fn”,uri是”/WEB-INF/tld文件名称”

  1. <%@ page language="java" contentType="text/html" pageEncoding="UTF-8" %>
  2. <%@taglib prefix="fn" uri="/WEB-INF/ideal.tld" %>
  3. <html>
  4. <head>
  5. <title></title>
  6. </head>
  7. <body>
  8. //完成了HTML转义的功能
  9. ${fn:filter("<a href='#'>点这里</a>")}
  10. </body>
  11. </html>

5. EL函数库(fn方法库)

  • 由于在JSP页面中显示数据时,经常需要对显示的字符串进行处理,SUN公司针对于一些常见处理定义了一套EL函数库供开发者使用。
  • 其实EL函数库就是fn方法库,是JSTL标签库中的一个库,也有人称之为fn标签库,但是该库长得不像是标签,所以称之为fn方法库
  • 既然作为JSTL标签库中的一个库,要使用fn方法库就需要导入JSTL标签!要想使用JSTL标签库就要导入jstl.jar和standard.jar包!
  • 所以,要对fn方法库做测试,首先导入开发包(jstl.jar、standard.jar)

在JSP页面中指明使用标签库

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