JSP中EL表达式的应用

1.EL表达式的概念

EL全称Expression Language,用来简化JSP页面的数据访问操作,代替<%%>、<%=%>,提供一个更清晰简洁的视图层。

通常与JSTL标签一起使用。

 

2.EL表达式语法

${expression},expression为有效表达式,如常量,变量,操作符和函数调用。

 

3..与 [ ] 运算符

EL 提供 . 和 [ ] 两种运算符来存取数据。

${user.name}等价于${user["name"]}或${user['name']}

. 和 [ ] 也可以同时混合使用

${requestScope.userlist[0].name},回传结果为用户数据列表中第一个用户的名字。

不过,以下两种情况,两者会有差异(转自:https://blog.csdn.net/JavaNotes/article/details/80722153):

(1) 当要存取的属性名称中包含一些特殊字符,如. 或 – 等并非字母或数字的符号,就一定要使用 [ ],

例如:${user.My-Name }

上述是不正确的方式,应当改为:${user["My-Name"] }

(2) 我们来考虑下列情况:

${sessionScope.user[data]}

此时,data 是一个变量,假若data的值为"sex"时,那上述的例子等于${sessionScope.user.sex};

假若data 的值为"name"时,它就等于${sessionScope.user.name}。

因此,如果要动态取值时,就可以用上述的方法来做,但无法做到动态取值。

 

4.EL表达式的简单应用

<%@page import="java.util.Map"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@page import="entity.User"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>EL表达式用法</title>
</head>
<body>

<!--1.获取JSP的隐式对象,并使用其中的方法-->
<br>获取JSP的隐式对象,并使用其中的方法
<%
out.println("获取项目根路径:"+request.getContextPath()+"<br>");
out.println("获取response对象的字符集:"+response.getCharacterEncoding());
%>
<br>使用EL表达式获取项目根路径:${pageContext.request.contextPath} 
<br>使用EL表达式获取response对象的字符集:${pageContext.response.characterEncoding} 
<hr>

<!--2.获取四个域对象中的值-->

<%
//设置域对象的值
pageContext.setAttribute("username", "pageContext张三");
pageContext.setAttribute("password", "pageContext123456");
request.setAttribute("username", "request张三");
request.setAttribute("password", "request123456");
session.setAttribute("username", "session张三");
session.setAttribute("password", "session123456");
application.setAttribute("username", "application张三");
application.setAttribute("password", "application123456");
%>


<%
out.println("Java程序片中获取request域对象的值");
%>
<br>用户名:<%=request.getAttribute("username") %>
<br>密码:<%=request.getAttribute("password") %>
<br>EL从域中取出数据(EL最重要的作用)获取的顺序:依次从pageContext域,request域,session域,application域中获取属性,在某个域中获取后将不在向后寻找
<br>用户名:${username} 
<br>密码:${password} 
<hr>

<!--3.EL本身也有和JSP中一样的隐含对象-->
<br>EL表达式中的隐式对象
<br>\${sessionScope.username}${sessionScope.username}
<br>\${requestScope.username}${requestScope.username}
<br>\${username}${username}
<br>\${applicationScope.username}${applicationScope.username}
<hr>


<!--4.EL借助四个域对象来读取javabean的属性值-->
<br>EL借助四个域对象来读取javabean的属性值
<%
User u = new User();
u.setName("张三");
out.println(u.getName());
request.setAttribute("user", u);
%>
<br>EL读取javaBean属性:\${u.name},无法读取
<br>EL读取javaBean属性:\${user.name}${user.name}

<hr>
<!--5.EL算术运算、关系运算-->
<br>EL算术运算、关系运算
<br>\${1+2}=${1+2}
<br>\${1-2}=${1-2}
<br>\${1*2}=${1*2}
<br>\${1/2}=${1/2}
<br>\${1 div 2}=${1 div 2}
<br>\${1%2}=${1%2}
<br>\${1 mod  2}=${1 mod  2}
<br>\${1<2?true:false}=${1<2?true:false}
<br>关系运算中,gt表示大于,ge表示大于等于,lt表示小于,le表示小于等于,eq表示等于,ne表示不等于
<br>\${100>200}=${100>200}
<br>\${100 ge 200}=${100 ge 200}
<hr>
<!--6.EL读取collection-->
<%
List<User> users = new ArrayList<User>();
users.add(u);
users.add(new User("李四","123456"));
request.setAttribute("userlist", users);
%>
<br>\${userlist}${userlist}
<br>\${userlist[0].name}${userlist[0].name}
<br>\${userlist[1].name}${userlist[1].name}
<hr>
<!--7.EL读取Map对象-->
<%
Map map1 = new HashMap();
map1.put("username", "york");
map1.put("user", u);
request.setAttribute("userlist2", map1);
%>
<br>\${userlist2.username}${userlist2.username}
<br>\${userlist2.user.name}${userlist2.user.name}
</body>
</html>

运行结果:

 

EL表达式读取JavaBean,Map对象,Collection集合都是要先放到四个域对象中才能访问,本质还是读取域对象中存放的数据。

 

 

参考文章:

https://blog.csdn.net/JavaNotes/article/details/80722153

https://www.cnblogs.com/xdp-gacl/p/3938361.html

posted @ 2020-05-02 14:17  YorkShare  阅读(298)  评论(0编辑  收藏  举报