JSP的EL表达式语言

ゝ一世哀愁。 2022-05-28 13:28 344阅读 0赞

1.EL表达式的简介

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

EL的特点:

2018040815141685

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值为数字开头,则只能用[ ]方式。

苏小虎数组元素:

20180408153834233

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

  1. <body>
  2. <%
  3. List<String> list=new ArrayList<String>();
  4. list.add("hello");
  5. list.add("this");
  6. list.add("world");
  7. session.setAttribute("word",list);
  8. %>
  9. <%
  10. List<String> list1=(List<String>)session.getAttribute("word");
  11. for(int i=0;i<list1.size();i++){
  12. request.setAttribute("li",i);//JSP代码与java代码需要分开
  13. %>
  14. ${li}:${word[li]} <br>
  15. <%
  16. }
  17. %>
  18. </body>
  19. <body>
  20. <%
  21. List<String> list=new ArrayList<String>();
  22. list.add("hello");
  23. list.add("this");
  24. list.add("world");
  25. session.setAttribute("word",list);
  26. %>
  27. <%
  28. List<String> list1=(List<String>)session.getAttribute("word");
  29. for(int i=0;i<list1.size();i++){
  30. request.setAttribute("li",i);//JSP代码与java代码需要分开
  31. %>
  32. ${li}:${word[li]} <br>
  33. <%
  34. }
  35. %>
  36. </body>

[html] view plain copy

  1. <%
  2. Listlist = new ArrayList();
  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对象
  1. <!-- 1.such as -->
  2. ${pageContext.request.serverPort}<br>
  3. ${pageContext.response}<br>
  4. ${pageContext.out}<br>
  5. <jsp:useBean id="user" class="com.majun.demo.User">
  6. <!-- 2.such as Scope-->

${pageScope.user.name}
<%request.setAttribute(“userName”,”haha”); %>${requestScope.userName}

  1. <%
  2. Cookie cookie=new Cookie("name","lidehua");
  3. response.addCookie(cookie);
  4. %>
  5. ${cookie.name.value}

20180408165446694

替换jsp中繁杂的代码量:

#

  1. <%
  2. /*
  3. String user=request.getParameter("user"); //获取文本框的值
  4. String pwd=request.getParameter("pwd"); //获取密码域的值
  5. String email=request.getParameter("email"); //获取文本框的值
  6. String sex=request.getParameter("sex"); //获取单选按钮的值
  7. /*****************获取复选框的值**********************/
  8. /*
  9. String[] arrAffect=request.getParameterValues("affect"); //获取复选框的值
  10. String affect="";
  11. if(arrAffect!=null){
  12. //通过for循环遍历获取到的数组
  13. for(int i=0;i<arrAffect.length;i++){
  14. affect+=arrAffect[i]+","; //输出当前元素
  15. }
  16. System.out.println(affect.length());
  17. affect=affect.substring(0,affect.length()-1); //去除字符串中最后一个逗号
  18. }
  19. /*****************************************************/
  20. /*
  21. String memo=request.getParameter("memo"); //获取编辑框的值
  22. */
  23. %>

使用EL表达式替换:

#

  1. <form name="form1" method="post" action="">
  2. <table width="400" height="30" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#333333">
  3. <tr>
  4. <td width="76" align="center" bgcolor="#FFFFFF">用 户 名:</td>
  5. <td width="324" bgcolor="#FFFFFF"> ${param.user }</td>
  6. </tr>
  7. <tr>
  8. <td align="center" bgcolor="#FFFFFF">密 码:</td>
  9. <td bgcolor="#FFFFFF"> ${param.pwd }</td>
  10. </tr>
  11. <tr>
  12. <td align="center" bgcolor="#FFFFFF">E-mail:</td>
  13. <td bgcolor="#FFFFFF"> ${param.email }</td>
  14. </tr>
  15. <tr>
  16. <td align="center" bgcolor="#FFFFFF">性 别:</td>
  17. <td bgcolor="#FFFFFF"> ${param.sex }</td>
  18. </tr>
  19. <tr>
  20. <td align="center" bgcolor="#FFFFFF">爱 好:</td>
  21. <td bgcolor="#FFFFFF"> ${paramValues.affect[0]} ${paramValues.affect[1]} ${paramValues.affect[2]} ${paramValues.affect[3]}</td>
  22. </tr>
  23. <tr>
  24. <td align="center" bgcolor="#FFFFFF">备 注:</td>
  25. <td bgcolor="#FFFFFF"> ${param.memo }</td>
  26. </tr>
  27. <tr>
  28. <td colspan="2" align="center" bgcolor="#FFFFFF"><a href="index.jsp">返回</a></td>
  29. </tr>
  30. </table>
  31. </form>

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

使用EL调用Java方法

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

5.5、EL Function开发步骤

20180408171204966

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

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

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

复制代码

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

复制代码

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

  

  elFunction.tld的代码如下:

复制代码

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

复制代码

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

复制代码

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

发表评论

表情:
评论列表 (有 0 条评论,344人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JSP EL表达式

    一、EL (Expression Language) 作用:获取数据、执行运算、获取 Web 开发常用对象。 1、获取数据:EL 表达式主要用于替换掉 Jsp 页面中的

    相关 Jsp---EL表达式

    EL表达式简介  EL 全名为Expression Language。EL主要作用:  获取数据:  EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的

    相关 JSP-EL表达式

    一、EL表达式简介        EL(Expression Language) 是为了使JSP写起来更加简单。表达式语言的灵感来自于 ECMAScript 和 XPath

    相关 JspEL表达式

    在jsp页面使用EL表达式,可以达到取内置对象值的效果: $\{requestScope.reqKey \}   //reqKey为request.setAttribute(

    相关 jsp,el表达式

    一、jsp 1.jsp页面(html与jsp的区别) html页面属于一种静态页面,jsp是一种动态页面,html和jsp最大的区别是:在HTML中只能定义css、js等,

    相关 JSP--EL表达式详解

    EL表达式概述 EL(Express Lanuage)表达式可以嵌入在jsp页面内部,减少jsp脚本的编写,EL出现的目的是要替代jsp页面中脚本的编写。 语法: