Skip to content

10.El表达式

JSP表达式语言(EL)使得访问存储在JavaBean中的数据变得非常简单。JSP EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSP EL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。

表达式语言(Expression Language,简称EL)

EL主要作用:

  • 获取数据:
    • EL表达式主要用于替换JSP页面中的脚本表达式,检索request、session等web域对象中的数据,访问javabean的属性、list集合、map集合、数组等。
  • 执行运算:
    • 利用EL表达式可以在JSP页面中执行一些基本的关系运算、逻辑运算和算术运算,以在JSP页面中完成一些简单的逻辑运算。$
  • 获取web开发常用对象
    • EL 表达式定义了一些隐式对象,利用这些隐式对象,web开发人员可以很轻松获得对web常用对象的引用,从而获得这些对象中的数据。
  • 调用Java方法
    • EL表达式允许用户开发自定义EL函数,以在JSP页面中通过EL表达式调用Java类的方法。

使用EL表语法:$

表达式可以是常量、变量,表达式中可以使用EL隐含对象、EL运算符号和EL函数。 示例:

html
${“hello”} //输出常量
${2+3} //输出计算结果
${2>3} //输出计算结果
${sessionScope.user.name}//输出隐含对象中的属性值
${empty username} //输出empty运算结果

10.1 EL运算符

操作符描述
.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
( )组织一个子表达式以改变优先级
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值

代码示例

html
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.neuedu.entity.User" %><%--
  Created by IntelliJ IDEA.
  User: root
  Date: 2020/12/14
  Time: 8:51
  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>
<h1>EL中的基础操作符</h1>
加减乘除
$ {1+2} : ${1+2}<br/>
$ {1-2} : ${1-2}<br/>
$ {1*2} : ${1*2}<br/>
$ {1/2} : ${1/2}<br/>
$ {1.0 div 2.0} : ${1.0 div 2.0}<br/>


$ {1%2} : ${1%2}<br/>
$ {1 mod 2} : ${1 mod 2}<br/>
$ {1 == 2} : ${1 == 2}<br/>
$ {1 eq 2} : ${1 eq 2}<br/>
$ {1 != 2} : ${1 != 2}<br/>
$ {1 != 2} : ${1 != 2}<br/>
$ {1 > 2} : ${1 > 2}<br/>


$ {true && false} : ${true && false}<br/>
$ {true or false} : ${true or false}<br/>
$ {!true } : ${! true }<br/>


<%
    request.setAttribute("name", "jshand");
%>
$ {name}: ${name} <br/>
$ {empty name}: ${empty  name} <br/>
$ {empty age}: ${empty  age} <br/>
<hr/>

<%
    request.setAttribute("arr", new String[]{"星期一", "星期二", "星期三"});
%>

<h3>数组的访问</h3>
$ {arr[0]} : ${arr[0]} <br/>
$ {arr[1]} : ${arr[1]} <br/>
$ {arr[2]} : ${arr[2]} <br/>
<hr/>

<%
    List list = new ArrayList();
    list.add("张飞");
    list.add("刘备");
    list.add("关羽");
    request.setAttribute("list", list);
%>
<h3>集合的访问</h3>
$ {list[0]} : ${list[0]} <br/>
$ {list[1]} : ${list[1]} <br/>
$ {list[2]} : ${list[2]} <br/>
<hr/>

<%

    Map userMap  = new HashMap();
    userMap.put("id",1);
    userMap.put("name","jshand");
    request.setAttribute("userMap", userMap);
%>

$ {userMap.id}:  ${userMap.id}<br/>
$ {userMap.name}:  ${userMap.name}<br/>
$ {userMap['name']}:  ${userMap['name']}<br/>



<hr/>

<%

    User user = new User(1,"admin","123456");
    request.setAttribute("user",user);
%>

<h3>JavaBean的访问</h3>
$ {user.userId}:  ${user.userId}<br/>
$ {user.userName}:  ${user.userName}<br/>
$ {user.password}:  ${user.password}<br/>
$ {user['userName']}:  ${user['userName']}<br/>


<h3>()改变运算符优先级</h3>




$ {(1+2)*3} : ${(1+2)*3}


</body>
</html>

上述代码中用到的实体类User

java
package com.neuedu.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

/**
 * 项目:      el_jstl
 * 类名:       User
 * 创建时间:  2020/12/14  9:35
 * 描述 :
 * 作者 :     张金山
 * QQ :     314649444
 * Site:      https://jshand.gitee.io
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    private Integer userId;
    private String userName;
    private String password;

    private Date birthday;
}

10.2 JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

隐含对象描述
pageScopepage 作用域
requestScoperequest 作用域
sessionScopesession 作用域
applicationScopeapplication 作用域
paramRequest 对象的参数,字符串
paramValuesRequest对象的参数,字符串集合
headerHTTP 信息头,字符串
headerValuesHTTP 信息头,字符串集合
initParam上下文初始化参数
cookieCookie值
pageContext当前页面的pageContext

代码示例

html
<%-- Created by IntelliJ IDEA.
  User: root
  Date: 2020/12/14
  Time: 10:01
  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>


<%--http://127.0.0.1:8080/web/el/el-obj.jsp?name=abc&age=18&fa=babll&fa=pingpang--%>
    <h3>参数</h3>
$ {param['name']} : ${param['name']} <br/>
$ {param['age']} : ${param['age']}<br/>
$ {paramValues['fa']} : ${paramValues['fa'][0]}<br/>
$ {paramValues['fa']} : ${paramValues['fa'][1]}<br/>

<%--
GET /web/el/el-obj.jsp?name=abc&age=18&fa=babll&fa=pingpang HTTP/1.1
Host: 127.0.0.1:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:77.0) Gecko/20100101 Firefox/77.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: JSESSIONID=3242BEA644E91F8CB779D30487629376; Hm_lvt_d1d4ec9999fa0a17baf1d11dd266ea36=1607826920,1607907397; Hm_lpvt_d1d4ec9999fa0a17baf1d11dd266ea36=1607911656
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0
--%>


<h3>header</h3>
$ {header['User-Agent']} : ${header['User-Agent']} <br/>
$ {headerValues['User-Agent'][0]} : ${headerValues['User-Agent'][0]} <br/>

<h3>cookie</h3>
$ {cookie['JSESSIONID']} : ${cookie['JSESSIONID']} <br/>
$ {cookie['JSESSIONID']['value']} : ${cookie['JSESSIONID']['value']} <br/>


<h3>initParam</h3>
$ {initParam['host']} : ${initParam['host']} <br/>



<h3>pageContext</h3>
<%
    pageContext.setAttribute("pageKey","2020年12月14日10:32:57");
%>
${pageContext.getAttribute('pageKey')} : ${pageContext.getAttribute('pageKey')} <br/>

<%--pageScope 	page 作用域
requestScope 	request 作用域
sessionScope 	session 作用域
applicationScope 	application 作用域--%>


<%

    session.setAttribute("reqKey","SessionValue");
    request.setAttribute("reqKey","reqValue");
%>
<h3>pageScope 、requestScope、sessionScope、applicationScope</h3>
$ {requestScope.reqKey}:  ${requestScope.reqKey} <br/>
$ {sessionScope.reqKey}:  ${sessionScope.reqKey} <br/>


获取上下文
$ {pageContext.request.contextPath} : ${pageContext.request.contextPath}<br/>


</body>
</html>

上述initParam参数需要在web.xml中进行如下配置

xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    
    <context-param>
        <param-name>host</param-name>
        <param-value>http://jshand.gitee.com/</param-value>
    </context-param>

</web-app>

Released under the MIT License.