(二十八)jsp之EL表达式

一、EL表达式简介

EL 全名为Expression Language。EL主要作用:
  1、获取数据
    EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域 中检索java对象、获取数据。(某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
  2、执行运算
    利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
  3、获取web开发常用对象
    EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
  4、调用Java方法
    EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

 

1.1、获取数据

使用EL表达式获取数据语法:"${标识符}"
  EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回”” (注意,不是null,而是空字符串)。

  EL表达式可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据

1     <!-- 创建对象 -->
2     <jsp:useBean id="stu" class="jspprojec.Student" scope="request"></jsp:useBean> 3 <!-- 设置属性,target="${stu }"一定要用${}来获取stu对象,否则只是个字符串 --> 4 <c:set target="${stu }" value="s001" property="sno"></c:set> 5 <c:set target="${stu }" value="zhangsan" property="name"></c:set> 6 <% request.setAttribute("stu", stu); %> 7 <c:out value="${stu.sno }"></c:out>
1 <%  ArrayList list=new ArrayList();
2             list.add(0, "zhangsan"); 3 list.add(1, "lisi"); 4 list.add(2, "wangwu"); 5 request.setAttribute("list", list); //要把list添加到request域中,否则${}无法找到 6 %> 7 ${list[2] }

 

1.2、执行运算

  语法:${运算表达式},EL表达式支持如下运算符:

  1、关系运算符

  

  2、逻辑运算符:

  

  3、empty运算符:检查对象是否为null(空)

  4、二元表达式:${user!=null?user.name :""}
  5、[ ] 和 . 号运算符

 

1.3、获得web开发常用对象

  EL表达式语言中定义了11个隐含对象,使用这些隐含对象可以很方便地获取web开发中的一些常见对象,并读取这些对象的数据。
  语法:${隐式对象名称}:获得对象的引用

 

序号隐含对象名称描       述
1pageContext对应于JSP页面中的pageContext对象(注意:取的是pageContext对象。)
2pageScope代表page域中用于保存属性的Map对象
3requestScope代表request域中用于保存属性的Map对象
4sessionScope代表session域中用于保存属性的Map对象
5applicationScope代表application域中用于保存属性的Map对象
6param表示一个保存了所有请求参数的Map对象
7paramValues表示一个保存了所有请求参数的Map对象,它对于某个请求参数,返回的是一个string[]
8header表示一个保存了所有http请求头字段的Map对象,注意:如果头里面有“-” ,例Accept-Encoding,则要header[“Accept-Encoding”]
9headerValues表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组。注意:如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
10cookie表示一个保存了所有cookie的Map对象
11initParam表示一个保存了所有web应用初始化参数的map对象

 

 

1.4、使用EL调用Java方法

  EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}
  在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
  EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。

1.5、EL Function开发步骤

  一般来说, EL自定义函数开发与应用包括以下三个步骤:
  1、编写一个Java类的静态方法
  2、编写标签库描述符(tld)文件,在tld文件中描述自定义函数。
  3、在JSP页面中导入和使用自定义函数

  • 示例:开发对html标签进行转义的el function

1、编写html转义处理工具类,工具类中添加对html标签进行转义的静态处理方法,如下:

复制代码
 1 package me.gacl.util;
 2 
 3 /**  4 * @ClassName: HtmlFilter  5 * @Description: html转义处理工具类  6 * @author: 孤傲苍狼  7 * @date: 2014-8-27 上午12:09:15  8 *  9 */ 10 public class HtmlFilter { 11 12 /** 13  * @Method: filter 14  * @Description: 静态方法,html标签转义处理 15  * @Anthor:孤傲苍狼 16  * 17  * @param message 要转义的内容 18  * @return 转义后的内容 19 */ 20 public static String filter(String message) { 21 22 if (message == null) 23 return (null); 24 25 char content[] = new char[message.length()]; 26 message.getChars(0, message.length(), content, 0); 27 StringBuffer result = new StringBuffer(content.length + 50); 28 for (int i = 0; i < content.length; i++) { 29 switch (content[i]) { 30 case '<': 31 result.append("&lt;"); 32 break; 33 case '>': 34 result.append("&gt;"); 35 break; 36 case '&': 37 result.append("&amp;"); 38 break; 39 case '"': 40 result.append("&quot;"); 41 break; 42 default: 43  result.append(content[i]); 44  } 45  } 46 return (result.toString()); 47  } 48 }
复制代码

2、在WEB-INF目录下编写标签库描述符(tld)文件,在tld文件中描述自定义函数

  

  elFunction.tld的代码如下:

复制代码
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"  3  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">  4 <tlib-version>1.0</tlib-version>  5 <short-name>EL Function</short-name>  6 <!--  7  自定义EL函数库的引用URI,  8  在JSP页面中可以这样引用:<%@taglib uri="/ELFunction" prefix="fn" %>  9 --> 10 <uri>/ELFunction</uri> 11 12 <!--<function>元素用于描述一个EL自定义函数 --> 13 <function> 14 <description>html标签转义处理方法</description> 15 <!--<name>子元素用于指定EL自定义函数的名称--> 16 <name>filter</name> 17 <!--<function-class>子元素用于指定完整的Java类名--> 18 <function-class>me.gacl.util.HtmlFilter</function-class> 19 <!--<function-signature>子元素用于指定Java类中的静态方法的签名, 20  方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。--> 21 <function-signature>java.lang.String filter(java.lang.String)</function-signature> 22 </function> 23 24 </taglib>
复制代码

3、在JSP页面中导入和使用自定义函数

复制代码
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  2 <%--引入EL自定义函数库 --%>  3 <%@taglib uri="/ELFunction" prefix="fn" %>  4 <!DOCTYPE HTML>  5 <html>  6 <head>  7 <title>使用EL调用Java方法</title>  8 </head>  9 10 <body> 11 <%--使用EL调用filter方法--%> 12 ${fn:filter("<a href=''>点点</a>")} 13 </body> 14 </html>
复制代码

运行结果如下:

  

1.6、开发EL Function注意事项

  编写完标签库描述文件后,需要将它放置到<web应用>\WEB-INF目录中或WEB-INF目录下的除了classes和lib目录之外的任意子目录中。
  TLD文件中的<uri> 元素用指定该TLD文件的URI,在JSP文件中需要通过这个URI来引入该标签库描述文件。
  <function>元素用于描述一个EL自定义函数,其中:
  <name>子元素用于指定EL自定义函数的名称。
  <function-class>子元素用于指定完整的Java类名,
  <function-signature>子元素用于指定Java类中的静态方法的签名,方法签名必须指明方法的返回值类型及各个参数的类型,各个参数之间用逗号分隔。

 

转载于:https://www.cnblogs.com/shyroke/p/6530017.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值