JavaWeb_EL详解
EL详解
- 1.EL 隐含对象
1)与范围有关的隐含对象:
与范围有关的 EL 隐含对象包含以下四个:pageScope、 requestScope、 sessionScope 和 applicationScope,它们基本上就和 JSP 的 pageContext、request、session 和 application 一样。不过必须注意的是,这四个隐含对象只能用来取得范围属性值,即 JSP 中的 getAttribute(String name),却不能取得其他相关信息。
①applicationScope:范围和 JSP Scope 中的 application 相同,它的属性范围是从服务器一开始执行服务,到服务器关闭为止。
②sessionScope:范围和 JSP Scope 中的 session 相同,它的属性范围就是用户持续在服务器连接的时间。
③requestScope:范围和 JSP 的 Request 相同,requestScope 的范围是指从一个 JSP 网页请求到另一个 JSP 网页
请求之间,随后此属性就会失效。
④pageScope:范围和 JSP 的 Page 相同,也就是单单一页 JSP Page 的范围(Scope)。
2)与输入有关的隐含对象:
这里 param 的功能和 request.getParameter(String name) 相同,而 paramValues 和 request.getParameterValues(String name)相同。假若要取得多重选择的复选框的值时,必须使用 paramValues 。例如:使用 paramValues 来取得“兴趣”的值: ${param.username} ……… ${paramValues.habit[0]} ${paramValues.habit[1]}。
①param
②paramValues
3)其他隐含对象:
①cookie:所谓的 cookie 是一个小小的文本文件,它是以 key、value 的方式将 Session Tracking 的内容记录在这个文本文件内,这个文本文件通常存在于浏览器的暂存区内。JSTL 并没有提供设定 cookie 的动作,因为这个动作通常都是后端开发者必须去做的事情,而不是交给前端的开发者。假若我们在 cookie 中设定一个名称为 userCountry 的值,那么可以使用 c o o k i e . u s e r C o u n t r y 来 取 得 它 。 ② h e a d e r : e a d e r 储 存 用 户 浏 览 器 和 服 务 端 用 来 沟 通 的 数 据 , 当 用 户 要 求 服 务 端 的 网 页 时 , 会 送 出 一 个 记 载 要 求 信 息 的 标 头 文 件 , 例 如 : 用 户 浏 览 器 的 版 本 、 用 户 计 算 机 所 设 定 的 区 域 等 其 他 相 关 数 据 。 假 若 要 取 得 用 户 浏 览 器 的 版 本 , 即 {cookie.userCountry}来取得它。 ②header:eader 储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即 cookie.userCountry来取得它。 ②header:eader储存用户浏览器和服务端用来沟通的数据,当用户要求服务端的网页时,会送出一个记载要求信息的标头文件,例如:用户浏览器的版本、用户计算机所设定的区域等其他相关数据。假若要取得用户浏览器的版本,即{header[“User-Agent”]}。注意:因为 User-Agent 中包含“-”这个特殊字符,所以必须使用“[]”,而不能写成 $(header.User-Agent)。
③headerValues:另外在鲜少机会下,有可能同一标头名称拥有不同的值,此时必须改为使用 headerValues 来取得这些值。
④initParam:就像其他属性一样,我们可以自行设定 web 站台的环境参数(Context),当我们想取得这些参数时,可以使用 initParam 隐含对象去取得它。
⑤pageContext:
其中 ${pageContext.request.contextPath} 和 ${pageContext.request.remoteAddr } 较为常用。 - 2.EL算术运算符、关系运算符和逻辑运算符
1)和其他语言中的运算符基本类似,不再详细描述。
- 3.其他运算符
1)Empty 运算符:
①Empty 运算符主要用来判断值是否为 null 或空的,例如:$ { empty param.name }。
②接下来说明 Empty 运算符的规则:
{empty A}
● 假若 A 为 null 时,回传 true
● 否则,假若 A 为空 String 时,回传 true
● 否则,假若 A 为空 Array 时,回传 true
● 否则,假若 A 为空 Map 时,回传 true
● 否则,假若 A 为空 Collection 时,回传 true
● 否则,回传 false
2)条件运算符:
$ { A ? B : C} 意思是说,当 A 为 true 时,执行 B;而 A 为 false 时,则执行 C 。
3)括号运算符:
括号运算符主要用来改变执行优先权,例如:${ A * (B+C) } 。 - 4.示例代码
web.xml
<context-param>
<param-name>initName</param-name>
<param-value>ATGUIGU</param-value>
</context-param>
el2.jsp
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.atguigu.javaweb.Customer"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- 7. EL 的运算符 -->
${param.score > 60 ? "及格" : "不及格" }
<br>
<%
List<String> names = new ArrayList<String>();
names.add("abc");
request.setAttribute("names", names);
%>
<!-- empty 可以作用于一个集合, 若该集合不存在或集合中没有元素, 其结果都为 true -->
names is empty: ${empty requestScope.names }
<br>
<!-- 6. 其他隐含对象: pageContext 等(cookie, header, initParam 只需了解.) -->
pageContext: pageContext 即为 PageContext 类型, 但只能读取属性就可以一直的 . 下去。
<br>
contextPath: ${pageContext.request.contextPath }
<br>
sessionId: ${pageContext.session.id }
<br>
sessionAttributeNames: ${pageContext.session.attributeNames }
<br>
initParam: ${initParam.initName }
<br>
Accept-Language: ${header["Accept-Language"] }
<br>
JSESSIONID: ${cookie.JSESSIONID.name } -- ${cookie.JSESSIONID.value }
<br>
<!-- 5. 与输入有关的隐含对象: param, paramValues -->
score: ${param.score }
<%--
<%= request.getParameter("score") %>
--%>
<br>
names: ${paramValues.name[0].class.name }
<%--
<%=
request.getParameterValues("name")[0].getClass().getName()
%>
--%>
<br>
<!-- 4. 隐含对象之与范围相关的: pageScope, requestScope, sessionScope, applicationScope -->
time: ${applicationScope.time.time }
<%--
<%= application.getAttribute("time") %>
--%>
<br>
</body>
</html>