JSP的EL表达式语言


1.EL表达式的简介

EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。

EL的特点:

JSP的EL表达式语言_第1张图片


2.获取并显示数据

1)从四个域中通过key找到简单数据并显示出来。表达式代码:

[html]  view plain  copy
  1. ${name}        
四个域的寻找顺序是 page,request,session,application。 用EL表达式还有个好处,若找不到键值为name的属性值,不会显示null,会显示空字符串。 若是确定键值是在request域中,则可以用如下EL表达式代码:
[html]  view plain  copy
  1. ${requestScope.name}  
2)从存储在WEB域中的封装了数据的JavaBean中得到对象的某个属性值并显示出来。
[html]  view plain  copy
  1. <%  
  2.     Person p = new Person();  
  3.     Address address = new Address();  
  4.     address.setCity("浙江");//Adress类中有个私有String属性为city  
  5.     p.setName("mike");//Person类中有私有String属性为name  
  6.     p.setAddress(address);//Person类中有私有Adress属性为address  
  7.     session.setAttribute("person", p);//存入sessionScope  
  8. %>  
  9. ${person.name}  
  10. ${person.address.city}  
[html]  view plain  copy
  1. ${person['name']}  
  2. ${person['address']['city']}  

除了用.方式获得对象的属性,也可以用[ ]方式,当然遇到键值名字中有-的,如mike-abc,或者key值为数字开头,则只能用[ ]方式。

苏小虎数组元素:

JSP的EL表达式语言_第2张图片

3)从List集合对象中获取某个值并显示。


<%
List list=new ArrayList();
list.add("hello");
list.add("this");
list.add("world");
session.setAttribute("word",list);
%>
<% 
List list1=(List)session.getAttribute("word");
for(int i=0;i
${li}:${word[li]}  
<% } %>


<%
List list=new ArrayList();
list.add("hello");
list.add("this");
list.add("world");
session.setAttribute("word",list);
%>
<% 
List list1=(List)session.getAttribute("word");
for(int i=0;i
${li}:${word[li]}  
<% } %>

[html]  view plain  copy
  1. <%  
  2.     List<Person> list = new ArrayList<Person>();  
  3.     list.add(new Person("kkk"));  
  4.     list.add(new Person("sss"));  
  5.     list.add(new Person("jjj"));  
  6.     application.setAttribute("list_1", list);  
  7. %>  
  8. ${list_1[1].name }  

4)从Map中获取某个值并显示。

[html]  view plain  copy
  1. <%  
  2.     Map map = new HashMap();  
  3.     map.put("a", new Person("aaa"));  
  4.     map.put("b", new Person("bbb"));  
  5.     map.put("1", new Person("ccc"));  
  6.     request.setAttribute("map", map);  
  7. %>  
  8. ${map['1'].name }  
  9. ${map.a.name }  

3.执行运算

1)语法:${运算表达式}

2)常见运算符:==(eq)   !=(ne)    <(lt)    >(gt)    <=(le)    >=(ge)    &&(and)   ||(or)   !(not)

3)判断是否为空:${empty name }

4)三目运算符:${name == null?"null":name }


4.获取常用对象

1)语法:${隐式对象名称}

2)隐式对象表

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

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



	${pageContext.request.serverPort}
${pageContext.response}
${pageContext.out}
${pageScope.user.name}
<%request.setAttribute("userName","haha"); %>${requestScope.userName}
<%
Cookie cookie=new Cookie("name","lidehua");
response.addCookie(cookie);

%>
${cookie.name.value}

JSP的EL表达式语言_第3张图片

替换jsp中繁杂的代码量:

<%
/*
String user=request.getParameter("user");	//获取文本框的值
String pwd=request.getParameter("pwd");		//获取密码域的值
String email=request.getParameter("email");	//获取文本框的值
String sex=request.getParameter("sex");		//获取单选按钮的值
/*****************获取复选框的值**********************/
/*
String[] arrAffect=request.getParameterValues("affect");	//获取复选框的值
String affect="";
if(arrAffect!=null){
	//通过for循环遍历获取到的数组
	for(int i=0;i
使用EL表达式替换:

用 户 名:  ${param.user }
密    码:  ${param.pwd }
E-mail:  ${param.email }
性    别:  ${param.sex }
爱     好:  ${paramValues.affect[0]} ${paramValues.affect[1]} ${paramValues.affect[2]} ${paramValues.affect[3]}
备    注:  ${param.memo }
返回




5.访问环境信息的隐含对象

使用EL调用Java方法

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

5.5、EL Function开发步骤

JSP的EL表达式语言_第4张图片

  一般来说, 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("<");
32                 break;
33             case '>':
34                 result.append(">");
35                 break;
36             case '&':
37                 result.append("&");
38                 break;
39             case '"':
40                 result.append(""");
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.0tlib-version>
 5  <short-name>EL Functionshort-name>
 6  
10  <uri>/ELFunctionuri>
11  
12  
13   <function>
14         <description>html标签转义处理方法description>
15         
16         <name>filtername>
17         
18         <function-class>me.gacl.util.HtmlFilterfunction-class>
19         
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>
复制代码

运行结果如下:

  

5.6、开发EL Function注意事项

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

5.7、EL注意事项

  EL表达式是JSP 2.0规范中的一门技术 。因此,若想正确解析EL表达式,需使用支持Servlet2.4/JSP2.0技术的WEB服务器。
注意:有些Tomcat服务器如不能使用EL表达式
    (1)升级成tomcat6
    (2)在JSP中加入<%@ page isELIgnored="false" %>

5.8、EL表达式保留关键字

  



6.EL表达式原理及注意点

原理:EL表达式在获取某个对象的属性值时,先将某个属性值首字母变成大写,然后加上get前缀,拼接成getter方法,通过反射将该对象构建出来,然后再对该对象执行getter方法,这与私有属性并没有关系,所以要注意,JavaBean的属性名要小写,且要有getter方法,不然会报错。

 


你可能感兴趣的:(Java,Web)