EL表达式

EL表达式认识

EL表达式主要用于替换JSP页面中的脚本表达式<%= 变量或表达式 %>,以从各种类型的web域 中检索java对象、获取数据。
可以访问某个web域 中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组

语法结构

EL表达式总是用大括号括起,而且前面有一个美元符($)

 ${expression}

原理:会调用pageContext.findAttribute方法,用标识符为关键字,分别从page、request、session、application四个域中查找相应的对象,找到则返回相应对象,找不到则返回空字符串。

变量

EL 存取变量数据的方法很简单,例如:${username}。它的意思是取出某一范围中名称为username的变量。

因为我们并没有指定哪一个范围的username,所以它的默认值会先从Page 范围找,假如找不到,再依序到Request、Session、Application范围。假如途中找到username,就直接回传,不再继续找下去,但是假如全部的范围都没有找到时,就回传null,当然EL表达式还会做出优化,页面上显示空白,而不是打印输出NULL。

形式说明
${pageScope.username}取出Page范围的username变量
${requestScope.username}取出Request范围的username变量
${sessionScope.username}取出Session范围的username变量
${applicationScope.username}取出Application范围的username变量

其中,pageScope、requestScope、sessionScope和applicationScope都是EL 的隐含对象

之前的写法:

String username =(String) session.getAttribute("username");

EL写法:

${sessionScope.username} // 取出Session范围的username 变量

EL隐含对象

JSP有9个隐含对象,而EL也有自己的隐含对象。EL隐含对象总共有11 个
在这里插入图片描述

1.与范围有关的隐含对象
与范围有关的EL 隐含对象包含以下四个:
pageScope、requestScope、sessionScope 和applicationScope;
它们基本上就和JSP的pageContext、request、session和application一样;
在EL中,这四个隐含对象只能用来取得范围属性值,即getAttribute(String name),却不能取得其他相关信息。

例如:我们要取得session中储存一个属性username的值,可以利用下列方法:session.getAttribute("username")取得username的值,在EL中则使用下列方法${sessionScope.username}

2.与输入有关的隐含对象
与输入有关的隐含对象有两个:param和paramValues,它们是EL中比较特别的隐含对象。

例如我们要取得用户的请求参数时,可以利用下列方法:

 request.getParameter(String name)
 request.getParameterValues(String name)

在EL中则可以使用param和paramValues两者来取得数据。

${param.name}
${paramValues.name}

3.其他隐含对象

cookie
JSTL并没有提供设定cookie的动作,要取得cookie中有一个设定名称为userCountry的值,使用${cookie.userCountry}

header和headerValues
header 储存用户浏览器和服务端用来沟通的数据
例:要取得用户浏览器的版本,可以使用${header["User-Agent"]}

initParam
initParam取得设定web站点的环境参数(Context)

String userid = (String)application.getInitParameter("userid");等价于${initParam.userid}

pageContext
pageContext取得其他有关用户要求或页面的详细信息

${pageContext.request.queryString}         取得请求的参数字符串
${pageContext.request.requestURL}          取得请求的URL,但不包括请求之参数字符串
${pageContext.request.contextPath}         服务的web application 的名称
${pageContext.request.method}              取得HTTP 的方法(GET、POST)
${pageContext.request.protocol}            取得使用的协议(HTTP/1.1、HTTP/1.0)
${pageContext.request.remoteUser}          取得用户名称
${pageContext.request.remoteAddr }         取得用户的IP 地址
${pageContext.session.new}                 判断session 是否为新的
${pageContext.session.id}                  取得session 的ID
${pageContext.servletContext.serverInfo}   取得主机端的服务信息
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
  <head>
    <title>el隐式对象</title>
  </head>

  <body>
   <br/>---------------1、pageContext对象:获取JSP页面中的pageContext对象------------------------<br/>
        ${pageContext}
    <br/>---------------2、pageScope对象:从page域(pageScope)中查找数据------------------------<br/>
    <%
        pageContext.setAttribute("name","孤傲苍狼");  //map
    %>
        ${pageScope.name}
       <br/>---------------3、requestScope对象:从request域(requestScope)中获取数据------------------------<br/>
       <%
           request.setAttribute("name","白虎神皇");  //map
       %>
           ${requestScope.name}
       <br/>---------------4、sessionScope对象:从session域(sessionScope)中获取数据------------------------<br/>
       <%
           session.setAttribute("user","xdp");  //map
       %>
           ${sessionScope.user}
       <br/>---------------5、applicationScope对象:从application域(applicationScope)中获取数据------------------------<br/>
       <%
           application.setAttribute("user","gacl");  //map
       %>
           ${applicationScope.user}
       <br/>--------------6、param对象:获得用于保存请求参数map,并从map中获取数据------------------------<br/>
       <!-- http://localhost:8080/JavaWeb_EL_Study_20140826/ELDemo03.jsp?name=aaa  -->
           ${param.name}
       <!-- 此表达式会经常用在数据回显上 -->
       <form action="${pageContext.request.contextPath}/servlet/RegisterServlet" method="post">
           <input type="text" name="username" value="${param.username}">
           <input type="submit" value="注册">
       </form>
       <br/>--------------7、paramValues对象:paramValues获得请求参数 //map{"",String[]}------------------------<br/>
       <!-- http://localhost:8080/JavaWeb_EL_Study_20140826/ELDemo03.jsp?like=aaa&like=bbb -->
           ${paramValues.like[0]}
           ${paramValues.like[1]}
       <br/>--------------8、header对象:header获得请求头------------------------<br/>
           ${header.Accept}<br/>
           <%--${header.Accept-Encoding} 这样写会报错
                测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
           --%>
           ${header["Accept-Encoding"]}
       <br/>--------------9、headerValues对象:headerValues获得请求头的值------------------------<br/>
           <%--headerValues表示一个保存了所有http请求头字段的Map对象,它对于某个请求参数,返回的是一个string[]数组
           例如:headerValues.Accept返回的是一个string[]数组 ,headerValues.Accept[0]取出数组中的第一个值
           --%>
           ${headerValues.Accept[0]}<br/>
           <%--${headerValues.Accept-Encoding} 这样写会报错
                测试headerValues时,如果头里面有“-” ,例Accept-Encoding,则要headerValues[“Accept-Encoding”]
                headerValues["Accept-Encoding"]返回的是一个string[]数组,headerValues["Accept-Encoding"][0]取出数组中的第一个值
           --%>
           ${headerValues["Accept-Encoding"][0]}
       <br/>--------------10、cookie对象:cookie对象获取客户机提交的cookie------------------------<br/>
       <!-- 从cookie隐式对象中根据名称获取到的是cookie对象,要想获取值,还需要.value -->
           ${cookie.JSESSIONID.value}  //保存所有cookie的map
       <br/>--------------11、initParam对象:initParam对象获取在web.xml文件中配置的初始化参数------------------------<br/>
       <%--
        <!-- web.xml文件中配置初始化参数 -->
      <context-param>
          <param-name>xxx</param-name>
          <param-value>yyyy</param-value>
      </context-param>
      <context-param>
          <param-name>root</param-name>
          <param-value>/JavaWeb_EL_Study_20140826</param-value>
      </context-param>
        --%>
       <%--获取servletContext中用于保存初始化参数的map --%>
           ${initParam.xxx}<br/>
           ${initParam.root}
  </body>
</html>

EL运算符

1.算术运算符有五个:+、-、*或$、/或div、%或mod

2.关系运算符有六个:==或eq、!=或ne、<或lt、>或gt、<=或le、>=或ge

3.逻辑运算符有三个:&&或and、||或or、!或not

4.其它运算符有三个:Empty运算符、条件运算符、()运算符
例:${empty param.name}、${A?B:C}、${A*(B+C)}

EL关系运算符:
在这里插入图片描述

EL逻辑运算符:
在这里插入图片描述

1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
 2 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
 3 <%@page import="me.gacl.domain.User"%>
 4 <!DOCTYPE HTML>
 5 <html>
 6   <head>
 7     <title>el表达式运算符</title>
 8   </head>
 9   
10   <body>
11   <h3>el表达式进行四则运算:</h3>
12         加法运算:${365+24}<br/>
13         减法运算:${365-24}<br/>
14         乘法运算:${365*24}<br/>
15         除法运算:${365/24}<br/>
16         
17     <h3>el表达式进行关系运算:</h3>
18     <%--${user == null}和 ${user eq null}两种写法等价--%>
19         ${user == null}<br/>
20         ${user eq null}<br/>
21         
22         <h3>el表达式使用empty运算符检查对象是否为null()</h3>
23     <% 
24         
25         List<String> list = new ArrayList<String>();
26         list.add("gacl");
27         list.add("xdp");
28         request.setAttribute("list",list);
29     %>
30     <%--使用empty运算符检查对象是否为null() --%>
31     <c:if test="${!empty(list)}">
32         <c:forEach var="str" items="${list}">
33             ${str}<br/>
34         </c:forEach>
35     </c:if>
36     <br/>
37     <%
38         List<String> emptyList = null;
39     %>
40     <%--使用empty运算符检查对象是否为null() --%>
41     <c:if test="${empty(emptyList)}">
42         对不起,没有您想看的数据
43     </c:if>
44 
45     <br/>
46     
47     <h3>EL表达式中使用二元表达式</h3>
48     <% 
49         session.setAttribute("user",new User("孤傲苍狼"));
50     %>
51     ${user==null? "对不起,您没有登陆 " : user.username}
52 
53     <br/>
54     
55     <h3>EL表达式数据回显</h3>
56     <% 
57         User user = new User();
58         user.setGender("male");
59         //数据回显
60         request.setAttribute("user",user);
61     %>
62        <input type="radio" name="gender" value="male" ${user.gender=='male'?'checked':''}>63        <input type="radio" name="gender" value="female" ${user.gender=='female'?'checked':''}>64    <br/>65   </body>
66 </html>

Empty 运算符

Empty 运算符主要用来判断值是否为空(NULL,空字符串,空集合)。

条件运算符

${ A ? B : C}

案例

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@page import="me.gacl.domain.Person"%>
<%@page import="me.gacl.domain.Address"%>
<!DOCTYPE HTML>
<html>
  <head>
    <title>el表达式获取数据</title>
  </head>

  <body>
    <%
        request.setAttribute("name","孤傲苍狼");
    %>
        <%--${name}等同于pageContext.findAttribute("name") --%>
        使用EL表达式获取数据:${name}
    <hr>
    <!-- 在jsp页面中,使用el表达式可以获取bean的属性 -->
    <%
        Person p = new Person();
        p.setAge(12);
        request.setAttribute("person",p);
    %>
        使用el表达式可以获取bean的属性:${person.age}
    <hr>
    <!-- 在jsp页面中,使用el表达式可以获取bean中的。。。。。。。。。的属性 -->
    <%
        Person person = new Person();
        Address address = new Address();
        person.setAddress(address);

        request.setAttribute("person",person);
    %>
       ${person.address.name}
     <hr>
    <!-- 在jsp页面中,使用el表达式获取list集合中指定位置的数据 -->
    <%
        Person p1 = new Person();
        p1.setName("孤傲苍狼");

        Person p2 = new Person();
        p2.setName("白虎神皇");

        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);

        request.setAttribute("list",list);
    %>

    <!-- 取list指定位置的数据 -->
    ${list[1].name}

    <!-- 迭代List集合 -->
    <c:forEach var="person" items="${list}">
        ${person.name}
    </c:forEach>
    <hr>
    <!-- 在jsp页面中,使用el表达式获取map集合的数据 -->
    <%
        Map<String,String> map = new LinkedHashMap<String,String>();
        map.put("a","aaaaxxx");
        map.put("b","bbbb");
        map.put("c","cccc");
        map.put("1","aaaa1111");
        request.setAttribute("map",map);
    %>

    <!-- 根据关键字取map集合的数据 -->
      ${map.c}
      ${map["1"]}
      <hr>
      <!-- 迭代Map集合 -->
      <c:forEach var="me" items="${map}">
          ${me.key}=${me.value}<br/>
      </c:forEach>
    <hr>
  </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值