EL表达式
程序员文章站
2022-05-06 07:57:51
...
EL表达式
一、使用EL表达式获取数据语法:
1.基本语法:“${标识符}”,示例:${user}
2.其它语法1:${sessionScope.varName},从指定的容器中读取
3. 其它语法2:${2*200+80},可以执行算术、逻辑运算
二、原理:
EL表达式语句在执行时,会调用pageContext.findAttribute方法,用标识符为关键
字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相
应对象,找不到则返回”” (注意,不是null,而是空字符串)。
三、作用:
1.读取容器中的属性变量
<%
pageContext.setAttribute("nameP", "JackP");
request.setAttribute("nameR", "JackR");
session.setAttribute("nameS", "JackS");
application.setAttribute("nameA", "JackA");
%>
${nameP},${nameR},${nameS},${nameA},,${applicationScope.nameA}
${abc},不存在则输出空字符串
2.读取javaBean中的信息
<%
User u = new User();
u.setName("jack");
u.setPwd("1234");
u.setAge(23);
pageContext.setAttribute("user", u); //注意,一定要把数据存入容器中,否则EL表达式无法读取出数据
%>
${user}, ${user.name}, ${user.pwd},${user.age}
3.读取Map中的信息
<%
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "Bob");
map.put("age", 25);
map.put("u", u); //把复杂数据如JavaBean,List等作为一个对象存入map
pageContext.setAttribute("mm", map);
%>
常用的读法: ${mm}, ${mm.age},${mm.name}
<br> 不常用的读法:${mm['age']}, ${mm["name"] }
<br> 复杂数据读取:${mm.u}, ${mm.u.name}, ${mm.u.age}
4.读取List中的信息
<%
List<Object> list = new ArrayList<Object>();
list.add("周末");
list.add(100);
list.add(u);
list.add(map);
request.setAttribute("list", list);
%>
${list}<br>
${list[0]},${list[1]},${list[2].name} <br>
${list[3].u.age} <br>
<%
map.put("list",list);
%>
${mm.list[2]} <br>
5.执行运算
5.1.可以使用算术运算符: +, - , * , / , % 等
<jsp:useBean id="u" class="cn.hncu.domain.User">
</jsp:useBean>
<jsp:setProperty property="name" name="u" value="Alice" />
<jsp:setProperty property="age" name="u" value="20" />
<%
pageContext.setAttribute("u", u);
%>
${u.age/2+20}
5.2 可以使用比较运算符: ==, !=, <, >, <=, >= 以及逻辑运算符: &&,|| 等
${u.age>=25} , ${u.name=="Alice" && u.age!=18 }
5.3可以使用"问号表达式"
${ u.age>=25 ? "old" : "young" }
5.4以后用得比较多的一个运算符: empty 功能:当属性为null或不存在时,返回true,否则返回false<br>
${empty u}, ${empty u.age}, ${empty map} ,Over! <br>
6.读取它内部定义的11个隐藏对象:
6.1:1个便于操作其它jsp隐藏对象的对象:pageContext 4个容器相关:pageScope,
requestScope, sessionScope, applicationScope
6.2:6个其它:param, paramValues, header, headerValues, cookie, initParam
<%
User u = new User();
u.setName("Tom");
u.setPwd("1234");
u.setAge(83);
pageContext.setAttribute("u", u);
request.setAttribute("info", "weekend");
%>
6.3:pageContext 和 4个容器的演示
${pageContext.request.remoteAddr}
${pageScope.u},${requestScope.info},${applicationScope.info}
6.4:2个请求参数相关隐藏对象的演示, 访问方式如下:
//http://localhost:8080/elWeb/jsps/elDemo3.jsp? name=Jack&age=28
${param} ,${paramValues}
{param.name},${paramValues.name[0]}
6.5:2个HTTP请求头相关隐藏对象的演示
${header} ${headerValues}
${header.host}, ${header.accept}
${headerValues.host[0]}, ${headerValues.accept[0]}<br>
${header.cookie},
<!--下面的方式是无法获取session的id值的,
因为header.cookie中把所有cookie信息封装成一个完整字符串。
如果要获取session-cookie的id值,就自己用底层方式从该字符串中解析出来。
当然el中给我们提供了一个隐藏对象cookie,通过它可以方便地获取session的id值
${header.cookie.JSESSIONID}-->
6.6:1个专用于获取cookie信息的隐藏对象演示
${cookie.JSESSIONID}, ${cookie.JSESSIONID.value}
6.7:1个页面初始化参数信息获取的隐藏对象initParam,演示时需要在web.xml中配置,这里略过了,一般很少用
${initParam.name}