EL表达式
– JSP表达式语言(ExpressionLanguage),简称EL,最初定义在JSTL1.0规范中,直到JSP2.0之后,EL表达式才正式成为JSP规范中的一部分。EL为存取变量、表达式运算和读取内置对象等内容提供了新的操作方式。
– EL表达式的目的是为了使JSP页面编写起来更简单
EL主要作用
• 获取数据:
– EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web域中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)
• 执行运算:
– 利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。${user==null}
• 获取web开发常用对象
– EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
• 与作用范围有关的EL隐含对象包含有:pageScope、requestScope、sessionScope和applicationScope
– 它们可以读取使用JSP内置对象pageContext、request、session以及application的setAttribute()方法所设定的对象的数值-----即getAttribute(String name),却不能取得其他相关信息。
– 例如,要取得session中储存的一个username属性的值,可以利用下面的方法:session.getAttribute("username")
– 在EL中则使用下面的方法:${sessionScope.username}
与输入有关的隐式对象
• 与输入有关的隐含对象有两个,即param和paramValues,它们是EL中比较特别的隐含对象。例如,要取得用户的请求参数时,可以利用下列方法:
– request.getParameter(String name)
– request.getParameterValues(String name)
• 在EL中则可以使用param和paramValues两者来取得数据:
– ${param.name}
– ${paramValues.name}
这时可同时使用[]运算符号来读取哪个元素,例如${paramValues.week[0]}
其他隐式对象
• initParam
– initParam用来读取设置在web.xml中的参数值。例如${initParam.repeat},等价于:(String)application.getInitParameter(“repeat”); 或
servletContext.getInitParameter(“repeat”);
• pageContext
– pageContext用于取得其他有关用户要求或页面的详细信息
${pageContext.request.queryString}取得请求的参数字符串
${pageContext.request.requestURL} 取得请求的URL,不包括参数字符串
${pageContext.request.contextPath} 服务的webapplication 的名称
${pageContext.request.method} 取得HTTP 的方法(GET、POST)
${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser} 取得用户名称
${pageContext.request.remoteAddr} 取得用户的IP 地址
${pageContext.session.new} 判断session 是否为新的
${pageContext.session.id} 取得session 的ID
${pageContext.servletContext.serverInfo} 取得主机端的服务信息
• EL表达式也可以很轻松获取JavaBean的属性,或获取数组、Collection、Map类型集合的数据,例如:
– ${user.address.city}
– ${user.list[0]}:访问有序集合某个位置的元素
– ${map.key} :获得map集合中指定key的值
• 结合JSTL的foreach标签,使用EL表达式也可以很轻松迭代各种类型的数组或集合,示例:
– 迭代数组
– 迭代collection类型集合
– 迭代map类型集合
<%@ page language="java"import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="com.hbsi.el.*" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01Transitional//EN">
<html>
<head>
<title>My JSP'a7.jsp' starting page</title>
</head>
<body>
<%
String data="abcd";
request.setAttribute("data1",data);
%>
${data1 }
<br/>
<%
User user = new User();
user.setName("zhangsan");
request.setAttribute("user1",user);
%>
${user1.name }
<br/>
<%
User user2 = new User();
Address add = newAddress();
add.setCity("北京");
user2.setAddress(add);
request.setAttribute("user2",user2);
%>
${user2.address.city}
<br/>
<%
List list = newArrayList();
list.add(newUserBean("aaaa"));
list.add(newUserBean("bbbb"));
list.add(newUserBean("cccc"));
request.setAttribute("list",list);
%>
${list[1].name }
${list[2].name }
${list[3].name }
<br/>
<%
Map map = newHashMap();
map.put("aa",new User("aaaa"));
map.put("bb",new User("bbbb"));
map.put("cc",new User("cccc"));
map.put("123",new User("dddd"));
request.setAttribute("map1",map);
%>
${map1.aa.name }
${map1.bb.name }
${map1.cc.name}
${map1["123"].name }
</body>
</html>