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

原文地址:https://www.cnblogs.com/Mike_Chang/p/10085303.html