JSP的EL表达式语言
1.EL表达式的简介
EL表达式是一种JSP技术,能够代替JSP中原本要用Java语言进行显示的语句,使得代码更容易编写与维护。最基本的语法是${express}。
EL的特点:
2.获取并显示数据
1)从四个域中通过key找到简单数据并显示出来。表达式代码:
[html] view plain copy
- ${name}
四个域的寻找顺序是 page,request,session,application。 用EL表达式还有个好处,若找不到键值为name的属性值,不会显示null,会显示空字符串。 若是确定键值是在request域中,则可以用如下EL表达式代码:
[html] view plain copy
${requestScope.name}
2)从存储在WEB域中的封装了数据的JavaBean中得到对象的某个属性值并显示出来。
[html] view plain copy
- <%
- Person p = new Person();
- Address address = new Address();
- address.setCity(“浙江”);//Adress类中有个私有String属性为city
- p.setName(“mike”);//Person类中有私有String属性为name
- p.setAddress(address);//Person类中有私有Adress属性为address
- session.setAttribute(“person”, p);//存入sessionScope
- %>
- ${person.name}
- ${person.address.city}
[html] view plain copy
- ${person[‘name’]}
- ${person[‘address’][‘city’]}
除了用.方式获得对象的属性,也可以用[ ]方式,当然遇到键值名字中有-的,如mike-abc,或者key值为数字开头,则只能用[ ]方式。
苏小虎数组元素:
3)从List集合对象中获取某个值并显示。
<body>
<%
List<String> list=new ArrayList<String>();
list.add("hello");
list.add("this");
list.add("world");
session.setAttribute("word",list);
%>
<%
List<String> list1=(List<String>)session.getAttribute("word");
for(int i=0;i<list1.size();i++){
request.setAttribute("li",i);//JSP代码与java代码需要分开
%>
${li}:${word[li]} <br>
<%
}
%>
</body>
<body>
<%
List<String> list=new ArrayList<String>();
list.add("hello");
list.add("this");
list.add("world");
session.setAttribute("word",list);
%>
<%
List<String> list1=(List<String>)session.getAttribute("word");
for(int i=0;i<list1.size();i++){
request.setAttribute("li",i);//JSP代码与java代码需要分开
%>
${li}:${word[li]} <br>
<%
}
%>
</body>
[html] view plain copy
- <%
- List
list = new ArrayList (); - list.add(new Person(“kkk”));
- list.add(new Person(“sss”));
- list.add(new Person(“jjj”));
- application.setAttribute(“list_1”, list);
- %>
- ${list_1[1].name }
4)从Map中获取某个值并显示。
[html] view plain copy
- <%
- Map map = new HashMap();
- map.put(“a”, new Person(“aaa”));
- map.put(“b”, new Person(“bbb”));
- map.put(“1”, new Person(“ccc”));
- request.setAttribute(“map”, map);
- %>
- ${map[‘1’].name }
- ${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.such as -->
${pageContext.request.serverPort}<br>
${pageContext.response}<br>
${pageContext.out}<br>
<jsp:useBean id="user" class="com.majun.demo.User">
<!-- 2.such as Scope-->
<%request.setAttribute(“userName”,”haha”); %>${requestScope.userName}
<%
Cookie cookie=new Cookie("name","lidehua");
response.addCookie(cookie);
%>
${cookie.name.value}
替换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<arrAffect.length;i++){
affect+=arrAffect[i]+","; //输出当前元素
}
System.out.println(affect.length());
affect=affect.substring(0,affect.length()-1); //去除字符串中最后一个逗号
}
/*****************************************************/
/*
String memo=request.getParameter("memo"); //获取编辑框的值
*/
%>
使用EL表达式替换:
#
<form name="form1" method="post" action="">
<table width="400" height="30" border="0" align="center" cellpadding="0" cellspacing="1" bgcolor="#333333">
<tr>
<td width="76" align="center" bgcolor="#FFFFFF">用 户 名:</td>
<td width="324" bgcolor="#FFFFFF"> ${param.user }</td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">密 码:</td>
<td bgcolor="#FFFFFF"> ${param.pwd }</td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">E-mail:</td>
<td bgcolor="#FFFFFF"> ${param.email }</td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">性 别:</td>
<td bgcolor="#FFFFFF"> ${param.sex }</td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">爱 好:</td>
<td bgcolor="#FFFFFF"> ${paramValues.affect[0]} ${paramValues.affect[1]} ${paramValues.affect[2]} ${paramValues.affect[3]}</td>
</tr>
<tr>
<td align="center" bgcolor="#FFFFFF">备 注:</td>
<td bgcolor="#FFFFFF"> ${param.memo }</td>
</tr>
<tr>
<td colspan="2" align="center" bgcolor="#FFFFFF"><a href="index.jsp">返回</a></td>
</tr>
</table>
</form>
5.访问环境信息的隐含对象
使用EL调用Java方法
EL表达式语法允许开发人员开发自定义函数,以调用Java类的方法。语法:${prefix:method(params)}
在EL表达式中调用的只能是Java类的静态方法,这个Java类的静态方法需要在TLD文件中描述,才可以被EL表达式调用。
EL自定义函数用于扩展EL表达式的功能,可以让EL表达式完成普通Java程序代码所能完成的功能。
5.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("<");
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.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>
运行结果如下:
5.6、开发EL Function注意事项
编写完标签库描述文件后,需要将它放置到
TLD文件中的
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方法,不然会报错。
还没有评论,来说两句吧...