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" %>


    Title


    <%
        request.setAttribute("key","值");
    %>
    表达式脚本输出key的值是:<%=request.getAttribute("key")%>
EL表达式输出key的值是:${key}
表达式脚本输出key的值是:<%=request.getAttribute("key1")%>
EL表达式输出key的值是:${key1}

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

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

输出结果:

jsp——EL表达式_第1张图片

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" %>


    Title


    <%
        pageContext.setAttribute("key","pageContext");
        request.setAttribute("key","request");
        session.setAttribute("key","session");
        application.setAttribute("key","application");
    %>
    ${key}


当四个域中都有相同的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" %>


    Title


    <%
        Person person = new Person();
        person.setName("海绵宝宝");
        person.setPhones(new String[]{"18881234567","18887654321" ,"18881234561"});

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

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

        pageContext.setAttribute("p",person);

    %>

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

输出结果:

jsp——EL表达式_第2张图片

        1.关系运算

jsp——EL表达式_第3张图片

        2.逻辑运算

        3.算术运算

        i. empty 运算

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

                以下几种情况为空:

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

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

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

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

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

        


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

    ${empty key1}
${empty key2}
${empty key3}
${empty key4}
${empty key5}

     输出结果:

jsp——EL表达式_第4张图片

  ii. 三元运算

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

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

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

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

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

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

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


    <%
        Map map = new HashMap();
        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 }
${ map.aaa }
${ map['a.a.a'] }
${ map["b+b+b"] }

输出结果:

jsp——EL表达式_第5张图片

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

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

               

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

获取在web.xml 中配置的上下文参数

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

        pageScope                ====                pageContext 域

        requestScope           ====                 Request 域

        sessionScope           ====                  Session域

        applicationScope      ====                  ServletContext 域                


    <%
        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}
${requestScope.key1}
${sessionScope.key2}
${applicationScope.key1}
${pageContext.getAttribute("key1")}

    输出结果:

  jsp——EL表达式_第6张图片

5.2pageContext 对象的使用

        1.        协议;

        2.        服务器ip;

        3.        服务器端口;

        4.        获取工程路径;

        5.        获取请求方法;

        6.        获取客户端ip地址;

        7.        获取会话的id编号;


    ${pageContext}
<%-- request.getScheme()可以获取请求的协议
     request.getServerName() 获取请求的服务器ip或域名
     request.getServerPort() 获取请求的服务器端口号
    request.getContextPath() 获取当前工程路径
    request.getMethod()      获取请求的方式(get或post)
    request.getRemoteHost()  获取客户端的ip地址
    session.getId()           获取会话的唯一标识
     --%>
    <%=session.getId()%> 
1. 协议;${pageContext.request.scheme}
2. 服务器ip;${pageContext.request.serverName}
3. 服务器端口;${pageContext.request.serverPort}
4. 获取工程路径;${pageContext.request.contextPath}
5. 获取请求方法;${pageContext.request.method}
6. 获取客户端ip地址;${pageContext.request.remoteHost}
7. 获取会话的id编号;${pageContext.session.id}

输出结果:

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


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

输出结果:

jsp——EL表达式_第7张图片

 

header 和 headerValues

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

输出结果:

 

cookie 

    ${cookie}
获取cookie的名称:${cookie.JSESSIONID.name}
获取cookie的值 :${cookie.JSESSIONID.value}

输出结果:

jsp——EL表达式_第8张图片

initParam

    ${initParam}
输出Context-param的值:${initParam.username}
输出Context-param的值:${initParam.url}

 输出结果:

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

你可能感兴趣的:(JavaWeb,java,tomcat)