jsp——EL表达式

目录

1. 什么是EL表达式,有什么作用。

2. EL表达式搜索域数据的顺序 

3 EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性

        1.关系运算

        2.逻辑运算

        3.算术运算

        i. empty 运算

  ii. 三元运算

iii. "."运算 和 [] 中括号运算

5. EL表达式的11 个隐含对象

5.1 EL获取四个特定域中的属性

5.2pageContext 对象的使用

5.3 EL表达式其他隐含对象的使用


1. 什么是EL表达式,有什么作用。

        EL表达式全称:Expression Language ,是表达式语言。

        EL表达式的作用:EL表达式主要是代替jsp页面中的表达式脚本在jsp页面中进行数据的输出。因为EL表达式在输出数据的时候,要比jsp的表达式简洁很多。

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/12/13
  Time: 20:03
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        request.setAttribute("key","值");
    %>
    表达式脚本输出key的值是:<%=request.getAttribute("key")%><br/>
    EL表达式输出key的值是:${key}<br/>

    表达式脚本输出key的值是:<%=request.getAttribute("key1")%><br/>
    EL表达式输出key的值是:${key1}<br/>
</body>
</html>

EL 表达式的格式是:${表达式}

EL表达式在输出 null 值的时候,输出的是空串。jsp表达式脚本输出null的时候,输出的是null字符串。

输出结果:

2. EL表达式搜索域数据的顺序 

         EL 表达式主要是在jsp页面中输出数据。

        主要是输出域对象中的数据。

<%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/12/13
  Time: 20:15
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        pageContext.setAttribute("key","pageContext");
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");
    %>
    ${key}
</body>
</html>

当四个域中都有相同的key的数据的时候,EL表达式会按照四个域的从小到大的顺序去进行搜索,找到就输出。跟代码的顺序没有关系。

从小到大顺序:pageContext——>  request  ——> session ——> application

3 EL表达式输出Bean的普通属性,数组属性,List集合属性,map集合属性

<%@ page import="com.atguigu.pojo.Person" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page import="java.util.HashMap" %><%--
  Created by IntelliJ IDEA.
  User: Administrator
  Date: 2021/12/13
  Time: 20:33
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%
        Person person = new Person();
        person.setName("海绵宝宝");
        person.setPhones(new String[]{"18881234567","18887654321" ,"18881234561"});

        List<String> cities = new ArrayList<String>();
        cities.add("北京");
        cities.add("上海");
        cities.add("深圳");
        person.setCities(cities);

        Map<String,Object> map = new HashMap<String,Object>();
        map.put("key1","value1");
        map.put("key2","value2");
        map.put("key3","value3");
        person.setMap(map);

        pageContext.setAttribute("p",person);

    %>

    输出person:${p}<br/>
    输出person的name属性:${p.name}<br/>
    输出person的phones数组属性:${p.phones[2]}<br/>
    输出person的cities的list集合属性:${p.cities}<br/>
    输出person的cities的list集合中元素:${p.cities[2]}<br/>
    输出person的map集合:${p.map}<br/>
    输出person的map集合中元素:${p.map.key1}<br/>



</body>
</html>

输出结果:

        1.关系运算

        2.逻辑运算

        3.算术运算

        i. empty 运算

                empty运算可以判断一个数据是否为空,如果为空则输出true ,不为空输出false。

                以下几种情况为空:

                        1.值为null的时候,为空;

                        2.值为空串的时候,为空;

                        3.置位Object类型数组,长度为零的的时候;

                        4.list集合,元素个数为零;

                        5.map集合,元素个数为零;

        

<body>
    <%
        //1.值为null的时候,为空;
            request.setAttribute("key1",null);
        //2.值为空串的时候,为空;
            request.setAttribute("key2","");
        //3.置位Object类型数组,长度为零的的时候;
            request.setAttribute("key3",new Object[]{});
        //4.list集合,元素个数为零;
        List<String> list = new ArrayList<String>();
        list.add("1");
            request.setAttribute("key4",list);
        //5.map集合,元素个数为零;
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("100","100");
            request.setAttribute("key5",map);
    %>

    ${empty key1}<br/>
    ${empty key2}<br/>
    ${empty key3}<br/>
    ${empty key4}<br/>
    ${empty key5}<br/>
</body>

     输出结果:

  ii. 三元运算

                表达式 1 ? 表达式2: 表达式3

                如果表达式1 为true,则返回表达式2的值;值为false,则返回表达式3的值。

${ 12 == 12 ? "你真可爱true":"你很漂亮false"}

iii. "."运算 和 [] 中括号运算

. 点运算,可以输出Bean对象中某个属性的值。

[] 中括号运算,可以输出有序集合中某个元素的值。

并且 [] 中括号运算,还可以输出map集合中key 里含有特殊字符的key的值。

<body>
    <%
        Map<String,Object> map = new HashMap<String,Object>();
        map.put("aaa","aaaValue");
        map.put("bbb","bbbValue");
        map.put("ccc","cccValue");
        map.put("a.a.a","aaaValue");
        map.put("b+b+b","bbbValue");

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

    ${ map }<br/>
    ${ map.aaa }<br/>
    ${ map['a.a.a'] }<br/>
    ${ map["b+b+b"] }<br/>
</body>

输出结果:

5. EL表达式的11 个隐含对象

EL表达式中11 个隐含对象,是EL表达式中自己定义的,可以直接使用。

               

        变量             类型                                作用
pageContext      PageContextImplements获取jsp中的九大内置对象
pageScope        Map<String,Object>获取pageContext 域中的数据
requestScopeMap<String,Object>获取Request 域中的数据
sessionScope        Map<String,Object>获取session 域中的数据
applicationScope        Map<String,Object>获取ServletContext 域中的数据
paramMap<String,String>获取请求参数的值
paramValues        Map<String,String[ ] >获取请求参数的值,获取多个值的时候使用
header        Map<String,String>他可以获取请求头的信息
headerValues        Map<String,String[ ] >获取请求头的信息,可以获取多个值的情况
cookie        Map<String,Cookie >获取当前请求的Cookie 信息
initParamMap<String,String>

获取在web.xml 中配置的<context-param>上下文参数

5.1 EL获取四个特定域中的属性

        pageScope                ====                pageContext 域

        requestScope           ====                 Request 域

        sessionScope           ====                  Session域

        applicationScope      ====                  ServletContext 域                

<body>
    <%
        pageContext.setAttribute("key1","pageContext1");
        pageContext.setAttribute("key2","pageContext2");
        request.setAttribute("key1","request1");
        request.setAttribute("key2","request2");
        session.setAttribute("key1","session1");
        session.setAttribute("key2","session2");
        application.setAttribute("key1","application1");
        application.setAttribute("key2","application2");
    %>

    ${pageScope.key1}<br/>
    ${requestScope.key1}<br/>
    ${sessionScope.key2}<br/>
    ${applicationScope.key1}<br/>
    ${pageContext.getAttribute("key1")}<br/>

</body>

    输出结果:

  

5.2pageContext 对象的使用

        1.        协议;

        2.        服务器ip;

        3.        服务器端口;

        4.        获取工程路径;

        5.        获取请求方法;

        6.        获取客户端ip地址;

        7.        获取会话的id编号;

<body>
    ${pageContext}
<%-- request.getScheme()可以获取请求的协议
     request.getServerName() 获取请求的服务器ip或域名
     request.getServerPort() 获取请求的服务器端口号
    request.getContextPath() 获取当前工程路径
    request.getMethod()      获取请求的方式(get或post)
    request.getRemoteHost()  获取客户端的ip地址
    session.getId()           获取会话的唯一标识
     --%>
    <%=session.getId()%> <br/>

        1. 协议;${pageContext.request.scheme}   <br/>
        2. 服务器ip;${pageContext.request.serverName} <br/>
        3. 服务器端口;${pageContext.request.serverPort} <br/>
        4. 获取工程路径;${pageContext.request.contextPath} <br/>
        5. 获取请求方法;${pageContext.request.method} <br/>
        6. 获取客户端ip地址;${pageContext.request.remoteHost} <br/>
        7. 获取会话的id编号;${pageContext.session.id} <br/>
</body>

输出结果:

org.apache.jasper.runtime.PageContextImpl@57e2440f AD9830CA246B7763FBE5A452DF6E487D
1. 协议;http
2. 服务器ip;192.168.5.41
3. 服务器端口;8080
4. 获取工程路径;/09_EL_JSTL
5. 获取请求方法;GET
6. 获取客户端ip地址;192.168.5.41
7. 获取会话的id编号;AD9830CA246B7763FBE5A452DF6E487D

5.3 EL表达式其他隐含对象的使用

param 和 paramValues

<body>
    输出请求参数username的值:${param.username} <br/>
    输出请求参数password的值:${param.password} <br/>
    输出请求参数hobby的值:${param.hobby} <br/>
    输出请求参数username的值:${paramValues.username[0]}<br/>
    输出请求参数hobby的值:${paramValues.hobby[1]}<br/>
   

</body>

输出结果:

 

header 和 headerValues

    输出请求头【user-Agent】的值:${header['user-Agent']}<br/>
    输出请求头【connection】的值:${header.connection}<br/>
    输出请求头【user-Agent】的值:${headerValues['user-Agent'][0]}<br/>

输出结果:

 

cookie 

    ${cookie}<br/>
    获取cookie的名称:${cookie.JSESSIONID.name}<br/>
    获取cookie的值 :${cookie.JSESSIONID.value}<br/>

输出结果:

initParam

    ${initParam}<br/>
    输出Context-param的值:${initParam.username}<br/>
    输出Context-param的值:${initParam.url}<br/>

 输出结果:

{url=jdbc:mayql://localhost/test, username=root}
输出Context-param的值:root
输出Context-param的值:jdbc:mayql://localhost/test

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值