el 表达式只能从域对象中获取值
一、${域名称.键名}
${域名称.键名}
:从指定域中获取指定键的值
* 域名称:
* pageScope --> pageContext
* requestScope --> request
* sessionScope --> session
* applicationScope --> application(ServletContext)
* 举例:在request域中存储了name=张三
* 获取:${requestScope.name}
这里是 index.jsp
,由此可以修改 验证码案例中 错误页面的转发之后,login.jsp
的接受代码:
原先:
<div>
<%=request.getAttribute("cc_error") == null ?"":request.getAttribute("cc_error")%>
</div>
如今可以换为:${requestScope.cc_error}
二、${键名}
${键名}
:表示依次从最小的域中查找是否有该键对应的值,直到找到为止
从小到大:pageScope< requestScope< sessionScope< applicationScope
示例,从 login.jsp 往 index.jsp 转发
index.jsp
<body>
<%
session.setAttribute("name", "session");
request.setAttribute("name", "request");
%>
<h2>EL 由 域名城.键名 获取值</h2>
${sessionScope.name}
<br>
${requestScope.name}
<br>
${requestScope.login}
<hr>
<h2>EL 由 键名直接获取值</h2>
<%--当存在重名时,会按照域大小范围由小到大选取一个--%>
${name}
<br>
</body>
login.jsp
<body>
<%
request.setAttribute("login","登录成功");
request.getRequestDispatcher("/index.jsp").forward(request,response);
%>
</body>
三、获取对象
${域名称.键名.属性名}
该方法本质上会去调用对象的 getter 方法本质上是通过对象的属性来获取
setter 或 getter 方法,去掉 set 或 get,在将剩余部分,首字母变为小写。
比如 setName --> Name --> name,最终取得的是 name 属性
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
</head>
<body>
<%
User user = new User();
user.setName("张三");
user.setAge(18);
user.setBirthday(new Date());
request.setAttribute("user", user);
%>
<h3>EL 获取对象中的值</h3>
${requestScope.user.name}<br>
${requestScope.user.age}<br>
${requestScope.user.birthday}<br>
${requestScope.user.date}<br>
</body>
</html>
四、获取 List 集合
${域名称.键名[索引]}
如果键名唯一的话,还可以简写为:${键名[索引]}
五、获取 Map 集合的值
* ${域名称.键名.key名称}
* ${域名称.键名["key名称"]}