EL

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个隐式对象

image

隐含对象名称描述
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 c o o k i e . 对 象 . n a m e 和 {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>

image

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表达式获取不同类型的数据

image

获取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} 
  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值