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支持下表列出的隐含对象:
隐含对象 | 描述 |
---|---|
pageScope | page 作用域 |
requestScope | request 作用域 |
sessionScope | session 作用域 |
applicationScope | application 作用域 |
param | Request 对象的参数,字符串 |
paramValues | Request对象的参数,字符串集合 |
header | HTTP 信息头,字符串 |
headerValues | HTTP 信息头,字符串集合 |
initParam | 上下文初始化参数 |
cookie | Cookie值 |
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>
