zoukankan      html  css  js  c++  java
  • EL表达式

    EL表达式

    1、作用

      在JSP中取得作用域、请求、标头与Cookie里的值,以及做一些简单的运算或判断

    2、环境

      直接编写
      可以使用page指示元素的isELIgnored属性(默认是false),来设置JSP网页是否使用EL。也可以在web.xml中设置<el-ignored>标签为true来决定不使用EL。

    <?xml version="1.1" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
             version="3.0">
        <display-name>Web Application</display-name>
    
        <jsp-config>
            <jsp-property-group>
                <url-pattern>*.jsp</url-pattern>
                <el-ignored>true</el-ignored>
            </jsp-property-group>
        </jsp-config>
    </web-app>
    View Code

      会这么做的原因可能在于,网页中已含有与EL类似的${}语法功能存在,例如使用了某个模板(Template)框架之类。

    3、语法

    ${param.a + param.b}

      EL是使用${与}来包括所要进行处理的表达式,可使用点运算符(.)指定要存取的属性,使用加号(+)运算符进行加法运算

    4、优点

      简洁、自动转换类型

    5、EL隐式对象

    (1)pageContext:对应于PageContext类型,通过点运算符之后接上xxx名称,表示调用getXxx()方法,比如:

    ${pageContext.request}

    (2)与作用域相关的有pageScope、requestScope、sessionScope与applicationScope,分别可以取得对应作用域中已设置的值。如果不指定作用范围,则默认以pageScope、requestScope、sessionScope与applicationScope的顺序来寻找,比如:

    ${user.name}  <%-- 表示user.getName() --%>

    (3)与请求参数相关的有param与paramValues

    ${param.user}                    相当于     <%=request.getParameter("user")%>
    ${paramValues. favorites[0]}          相当于     <%= request.getParameterValues("favorites")[0] %> 

    (4)与Header相关的有header、headerValues

    ${header["User-Agent"]}             相当于       <%=request.getHeader("User-Agent")%>

    (5)cookie隐式对象可以用来取得已设置的Cookie值。如果在Cookie中设置了username属性,则可以使用:

    ${cookie.username}

    (6)initParam初始参数隐式对象,可以用来取得web.xml中设置的ServletContext初始参数,也就是在<context-param>中设置的初始参数。

    ${initParam.initCount}            相当于      <%= servletContext.getInitParameter("initCount")%>

    6、demo

    index.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Hello</title>
    </head>
    <body>
        ${param.a} + ${param.b} = ${param.a + param.b}
    </body>
    </html>

    测试:127.0.0.1/index.jsp?a=3&b=5     响应结果:3 + 5 = 8
    测试:http://127.0.0.1/index.jsp?a=3&b=   响应结果:3 + = 3
    EL优雅地处理了null值的情况,对于null值直接以空字符串加以显示,而不是直接显示null值,在进行运算时,也不会因此发生错误而抛出异常。


    index.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Hello</title>
    </head>
    <body>
      请求方法:${pageContext.request.method}
      <%-- 请求方法:${request.method} 这种写法根本就是错误的,因为EL里只有requestScope隐式对象,根本就没有request隐式对象 --%>
      <%-- 请求方法:${requestScope.method} 这种写法也是错误的,因为在request作用域里没有setAttribute过method这个属性--%>
    </body>
    </html>

    测试:127.0.0.1/index.jsp    响应结果:请求方法:GET


    点运算符与[]运算符
      点运算符左边可以是JavaBean或Map对象
      []运算符左边可以是JavaBean、Map、数组或List对象

    index.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Hello</title>
    </head>
    <body>
    <%
        String[] names = {"Mike", "Tom", "Jim"};
        session.setAttribute("students", names);
    %>
      姓名:${sessionScope.students[0]}
    </body>
    </html>

     测试:127.0.0.1/index.jsp      响应结果:姓名:Mike


    index.jsp 

    <%@page contentType="text/html" pageEncoding="UTF-8" %>
    <%@page import="java.util.Map, java.util.HashMap" %>
    <%
    Map<String, String> user = new HashMap<String, String>();
    user.put("name", "Mike");
    user.put("age", "18");
    user.put("sex", "男");
    session.setAttribute("user", user);
    %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Hello</title>
    </head>
    <body>
      <p>${user.name}</p>
    <p>${user["name"]}</p>
    <p>${user[param.index]}</p>
    <p>${user[param[index]]}</p> <%-- 这一行没有输出,但这种方法没错,只是[]左边不支持使用param --%>
    </body>
    </html>

    测试:http://127.0.0.1/index.jsp?index=age

    响应:

    Mike

    Mike

    18


    index.jsp

    <%@page contentType="text/html" pageEncoding="UTF-8" %>
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="UTF-8">
        <title>Hello</title>
    </head>
    <body>
      <p>1:${1 == 2 ? true : false}</p>
        <p>2:${true and false}</p>
        <p>3:${true or false}</p>
        <p>4:${not true}</p>
        <p>5:${1 < 2}</p>
        <p>6:${2 > 3}</p>
        <p>7:${2 >= 3}</p>
        <p>8:${2 <= 3}</p>
        <p>9:${2 == 3}</p>
        <p>10:${2 != 3}</p>
    </body>
    </html>

    测试:http://127.0.0.1/index.jsp

    响应:

    1:false
    2:false
    3:true
    4:false
    5:true
    6:false
    7:false
    8:true
    9:false
    10:true

  • 相关阅读:
    ceil函数 floor函数 floor函数 round函数 取整函数
    Havel–Hakimi algorithm(判断度数序列是否可图)
    最小费用最大流
    数论 (大数,小费马定理,欧拉定理,威尔逊定理,快速数论变换(NNT)模版)
    Give Candies(费马小定理)
    Yet Another Crosses Problem
    并查集
    杭电多校第一场-M-Code
    2018ICPC赛后总结
    营业额统计
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/10085303.html
Copyright © 2011-2022 走看看