欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EL

程序员文章站 2022-05-09 19:06:45
...

EL

什么是EL

Expression Language 是JSP表达式语言

  • 语法:
    ${EL表达式}

  • 与JSP表达式区别:

    • JSP表达式语法:<%=变量%> 输出的脚本中变量

    • EL输出的是作用域中的变量

    <body>
        <%
          int m=5;
          //把变量放到作用域
          pageContext.setAttribute("m", 10);
        %>
    
        JSP表达式输出:<%=m%> <br/>
        EL输出:${m} 
    </body>
  • EL表达式的作用:
    1. 获取作用域中的数据
    2. 用于计算,如:算术运算,逻辑运算,关系运算

获取数据

在四个域中从小到大自动查找: ${变量名}

如:输出某个域中变量msg,写法 :
${msg},相当于JSP中的pageContext.findAttribute("msg")

指定域获取数据

作用域 Java代码 EL的写法
页面域 <%=pageContext.getAttribute(“变量名”)%> ${pageScope.变量名}
请求域 <%=request.getAttribute(“变量名”)%> ${requestScope.变量名}
会话域 <%=session.getAttribute(“变量名”)%> ${sessionScope.变量名}
上下文域 <%=application.getAttribute(“变量名”)%> ${applicationScope.变量名}
自动查找 <%=pageContext.findAttribute(“变量名”)%> ${变量名}

- 演示:保存4个同名的变量,分别输出每个域中的变量值。

<%
pageContext.setAttribute("msg", "我是页面域");
request.setAttribute("msg", "我是请求域");
session.setAttribute("msg", "我是会话域");
application.setAttribute("msg", "我是上下文域");
%>

JSP表达式输出:<%=m%> <br/>
EL输出:${m} <br/>
指定域:${pageScope.msg} <br/>
指定域:${requestScope.msg} <br/>
指定域:${sessionScope.msg} <br/>
指定域:${applicationScope.msg} <br/>
自动查找:${msg} <br/>

EL中11个隐式对象

EL

隐含对象名称 描述
pageContext 代表页面上下文对象,可以调用一个get开头方法,调用的时候省略get
pageScope 代表页面域的Map对象
requestScope 代表请求域的Map对象
sessionScope 代表会话域的Map对象
applicationScope 代表上下文域Map对象
param 得到表单提交的参数,功能与request.getParameter(“名字”)EL写法 : ${param.名字}
paramValues 得到表单提交的**一组同名参数**(是一个数组),功能与request.**getParameterValues(“名字”)**EL写法:${paramValues.名字}
header 得到请求头的信息,与request.getHeader(“请求头”)功能相同
headerValues 得到一组同名的请求头的信息,与request.getHeaders(“请求头”)
cookie 得到浏览器发送过来的Cookie对象,得到cookie的名字 cookie..name{cookie.对象.value}
initParam 类似于config.getInitParameter(名字)${initParam.名字}

pageContext调用get方法

调用方法省略get

当前工程路径:
<br/>
<%=request.getContextPath() %><br/>
${pageContext.request.contextPath}<hr/>

请求资源路径:<br/>
<%=request.getRequestURL() %><br/>
${pageContext.request.requestURL }
<hr/>

当前会话的ID:<br/>
<%=session.getId() %><br/>
${pageContext.session.id} <br>

EL

param和paramValues使用

<!--
 请求的地址:
 http://localhost:8080/day41-el/demo2.jsp?user=Tom&hobby=swimming&hobby=reading
  -->

得到参数:${param.user}<br/>
得到多个参数值(一个数组):${paramValues.hobby[0]}、${paramValues.hobby[1]}

header的使用

得到主机:${header.host}<br/>
得到浏览器类型: ${header.User-Agent} <br/>
<!-- 如果键的名字中包含一些特殊的字符,使用["键名"] -->
应该改成:${header["user-agent"]} <hr/>

得到Cookie中的值:

  • 先通过EL得到指定cookie的对象,再通过name和value得到具体的名字和值
<%
    Cookie cookie = new Cookie("man", "Jack");
    //写到浏览器端
    response.addCookie(cookie);
%>

通过EL取出Cookie的值:
${cookie.man.name}  =  ${cookie.man.value}

EL表达式中[""].的区别

得到EL表达式的两种写法:[""].
- 示例:从请求域中取出变量mn和m-n要怎么写?

<%
request.setAttribute("mn",100);
request.setAttribute("m-n", 200);
%>

${requestScope.mn} <br/>
${requestScope["m-n"]} <br/>
  • 什么时候使用[“”]方式

    如果键的名字中包含特殊字符,使用中括号加引号的方式,既可以使用双引号,也可以使用单引号。


EL表达式获取不同类型的数据

EL

获取JavaBean的属性值

 <%
     User user = new User(100, "猪八戒", true);
     pageContext.setAttribute("user", user);
 %>
 姓名:${user.name} 、  性别:${user.male?"男":"女"}

  <hr/>  
 ```
 #### 获取数组中的元素值
 ```
<%
    int arr[] = {100,200,56,34,20};
    pageContext.setAttribute("arr", arr);
%>
${arr[0]}、${arr[1]}、${arr[2]}

获取Map中的值

<%
    Map<String, String> names = new HashMap<String,String>();
    names.put("no1", "苍老师");
    names.put("no-2", "宋老师");
    names.put("no3", "陈老师");
    pageContext.setAttribute("names", names);
%>
${names.no1}、${names['no-2']}、${names.no3}

输出List中的元素

<%
    List<String> list = new ArrayList<String>();
    list.add("潘金莲");
    list.add("鲁智深");
    list.add("林冲");
    pageContext.setAttribute("list", list);
%>
${list[0]}、${list[1]}、${list[2]}、${list[3]}
  • 面试题:如果一个会话域中保存了一个user对象,请问以下哪种取值可以取出user对象的username属性值。

    1. ${user.username}
    2. ${sessionScope.user.username}
    3. ${username}
    4. <%=((User)pageContext.findAttribute(“user”)).getUsername() %>

    5. <%=((User)session.getAttribute(“user”)).getUsername() %>


EL中使用表达式

算术表达式 :

算术运算符 说明 范例 结果
+ ${1+1} 2
- ${2-1}
* ${1*1} 1
/或div ${5 div 2} 2.5
%或mod 取余 ${5 mod 2} 1
<h2>算术运算</h2>
加   ${1+1}${2-1}${1*1}${5 / 2}         
取余  ${5 % 2}     

比较表达式

关系运算符 说明 范例 结果
==或 eq 等于(equal) ${1 eq 1} true
!= 或 ne 不等于(not equal) ${1 != 1} false
< 或 lt 小于(Less than) ${1 lt 2} true
<=或 le 小于等于(Less than or equal) ${1 <= 1} true
> 或 gt 大于(Greater than) ${1 > 2} false
>=或 ge 大于等于(Greater than or equal) ${1 >=1} true
<h2>比较运算</h2>
${1 eq 1}    
${1 != 1}    
${1 lt 2}    
${1 <= 1}    
${1 > 2}     
${1 >=1}     

逻辑表达式 :

逻辑运算符 说明 范例 结果
&& 或 and 交集(与) ${true and false} false
|| 或 or 并集(或) ${true || false } true
! 或 not ${not true} false
<h2>逻辑运算</h2>
${true and false}  
${true || false }  
${not true}        

三元运算:

${表达式?真值:假值}

<h2>三元运算</h2>
${param.age>18?"你已经成年":"未成年,请绕行" }

判空表达式:

  • 语法:${empty 表达式}

  • 作用:

    1. 判断一个变量是否为null,如果是返回true

    2. 判断字符串是否是空串,如果是返回true。

    3. 判断一个集合中是否包含有元素,如果没有元素,返回true
<h2>empty运算符</h2>
1. 判断一个变量是否为null,如果是返回true
<br/>
${empty user}<br/>

2. 判断字符串是否是空串,如果是返回true。<br/>
<%
    String str = "";
    pageContext.setAttribute("str", str);
%>
${empty str}
<br/>

3. 判断一个集合中是否包含有元素,如果没有元素,返回true<br/>
<%
List<String> list =new ArrayList<String>();

EL表达式的启用和禁用

  • 页面禁用

    <%@page isELIgnored=”true” %>

    • true表示禁止,默认是false,可以使用。

EL的转义

如果只是禁用某一个,使用\进行转义。
如:\${1+2}

<!-- 转义后失效原样输出 -->
加: \${1+1} 
减: ${2-1} 
相关标签: EL表达式