EL

3、  EL

 

1.  EL 简介

* 什么是 EL?
1. EL(Expression Language,即:表达式语言),是一种简单的语言,提供了在 JSP 中简化 JSP 表达式的方法
2. 目的是为了尽可能减小 JSP 页面中的 Java 代码,使得 JSP 页面的处理程序编写起来更加简洁,便于开发和维护
3. 全部 EL 表达式的格式都是以 “${}” 表示
4. 注意:<%@ page isELIgnored="true" %> 表示是否禁用 EL 语言,TRUE 表示禁止,FALSE 表示不由止。JSP2.0 中是默认的启用 EL 语言的
5. 全局禁用 EL 表达式,在 web.xml 中进行以下配置:
<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
    <el-ignored>true</el-ignored>
  </jsp-property-group>
</jsp-config>

* EL 表达式提供 “.“ 和 “[ ]“ 两种运算符来存取数据
1. 注意:当要存取的属性名称中包含一些特殊字符,如 . 或 - 等非字母或数字的符号,就必定要使用 “[ ]“ ,如:
${user.My-Name} 应当改成 ${user["My-Name"]}
2. 若是要动态取值时,就能够用 “[ ]“ 来作,而 “.“ 没法作到动态取值,如:
${requestScope.list[i]} 中的 i 是一个变量

* EL 表达式获取变量数据的方式
1. JSP 四大做用域对象在 EL 表达式中属性(范围)名称:
1)pageContext:pageScope
2)request:requestScope
3)session:sessionScope
4)application:applicationScope
2. 当 EL 表达式中的变量没有给定做用域范围时,则默认在 page 范围查找,而后依次在 request、session、application 范围查找
a.假如途中找到了变量,就直接回传,再也不继续找下去,可是假如所有的范围都没有找到时,就回传 ""
b.咱们会发现 EL 在查找未给定范围的变量的查询顺序是根据做用域从小到大进行查找

* EL 表达式中的逻辑运算
  1. ${逻辑表达式}:&&,||,!
  2. ${算数表达式}:+,-,*,/
  3. ${关系表达式}:>,<,==,>=,<=,!=,%
  4. ${A?B:C}:三目运算
5. ${empty 变量名}:EL 表达式的空值判断,判断指定变量是否存有数据
  6. 注意:"+" 表示加法运算,不表明字符链接,在 EL 表达式中使用 "+" 进行字符链接会报错

 

2.  EL 表达式中的 11 个隐式对象

* 1. 对于什么是隐式对象,在介绍 JSP 的九大内置对象中也说到过,隐式对象就是开发者能够直接使用它们而不用显式声明

1)pageContext 对象:JSP 页面的上下文。它能够用于访问 JSP 隐式对象,如请求、响应、会话、输出、servletContext 等
a.如:${pageContext.response} 返回页面的响应对象

2)pageScope 对象:将当前 JSP 页面范围的变量名称映射到其值
a.如:使用 ${pageScope.objectName} 访问当前 JSP 页面范围的对象
b.如:使用 ${pageScope.objectName.attributeName} 访问当前 JSP 页面范围的对象的属性值

3)requestScope 对象:将请求范围的变量名称映射到其值
a.如:使用 ${requestScope.objectName} 访问一个 JSP 请求范围的对象
b.如:使用 ${requestScope.objectName.attributeName} 访问一个 JSP 请求范围的对象的属性值

4)sessionScope 对象:将会话范围的变量名称映射到其值
a.如:${sessionScope.objectName}
b.如:${sessionScope.objectName.attributeName}

5)applicationScope 对象:将应用程序范围的变量名称映射到其值

6)param 对象:将请求参数名称映射到单个字符串
a.底层经过调用 ServletRequest.getParameter(String name) 方法得到
b.表达式 ${param.name} 至关于 request.getParameter(name);

7)paramValues 对象:将请求参数名称映射到一个 String 类型的数组
a.底层经过调用 ServletRequest.getParamterValues(String name) 方法得到
b.表达式 ${paramvalues.name} 至关于 request.getParamterValues(name);

8)header 对象:将请求头名称映射到单个字符串
a.底层经过调用 ServletRequest.getHeader(String name) 方法得到
b.表达式 ${header.name} 至关于 request.getHeader(name);

9)headerValues 对象:将请求头名称映射到一个枚举集合
a.底层经过调用 ServletRequest.getHeaders(String name) 方法得到
b.表达式 ${headerValues.name} 至关于 request.getHeaders(name);

10)cookie 对象:将 cookie 名称映射到单个 cookie 对象
a.向服务器发出的客户端请求能够得到一个或多个 cookie
b.表达式 ${cookie.name.value} 返回带有特定名称的第一个 cookie 值
c.若是请求包含多个同名的 cookie,则应该使用 ${headerValues.name} 表达式

11)initParam 对象:将上下文初始化参数名称映射到单个值
a.底层经过调用 ServletContext.getInitparameter(String name) 方法得到
b.表达式 ${initParam.name} 至关于 request.getInitparameter(name);

 

3.  EL 表达式实例

<%@ page language="java" import="java.util.*,com.ncdx.pojo.*" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8" isELIgnored="true" %>

<!-- 使用传统方式获取做用域对象的数据 
           缺点1:要导入包
           缺点2:须要强转
           缺点3:获取数据的代码过于麻烦 -->
<b><%=request.getParameter("uname")%></b><br/>
<b><%=request.getAttribute("str")%></b><br/>
<b><%=((User)request.getAttribute("user")).getAddr().getTown()%></b><br/>
<b><%=((ArrayList)request.getAttribute("list")).get(2)%></b><br/>
<b><%=((ArrayList<User>)request.getAttribute("list2")).get(0).getAddr().getPre()%></b><br/>
<b><%=((HashMap<String, String>)request.getAttribute("map")).get("a")%></b><br/>
<b><%=((HashMap<String, User>)request.getAttribute("map2")).get("b").getAddr().getCity()%></b><br/>
 

<hr/>
<!-- 使用 EL 表达式获取做用域对象的数据 -->
<b>${param.uname}</b><br/>
<b>${requestScope.str}</b><br/>
<b>${requestScope.user.addr.town}</b><br/>
<b>${requestScope.list[2]}</b><br/>
<b>${requestScope.list2[0].addr.pre}</b><br/>
<b>${requestScope.map.a}</b><br/>
<b>${requestScope.map2.b.addr.city}</b><br/>


<hr/>
<!-- EL 的做用域查找顺序 -->
<%
     pageContext.setAttribute("hello", "hello pageContext");
     request.setAttribute("hello", "hello request");
     session.setAttribute("hello", "hello session");
     application.setAttribute("hello", "hello application");
%>
${hello} ${pageScope.hello} ---> ${requestScope.hello} --> ${sessionScope.hello} --> ${applicationScope.hello} <hr/> <!-- EL 获取请求头数据 和 Cookie 数据 --> ${header} <br/> ${headerValues["accept-language"][0]} } <br/> ${cookie} <br/> ${cookie.JSESSIONID} <br/> ${cookie.JSESSIONID.name} <br/> ${cookie.JSESSIONID.value}
相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息