https://blog.csdn.net/weixin_42259823/article/details/85945149
安装使用
1. 通过命令行创建maven项目
2. 安装jstl包
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
3. 使用
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${2+3}
</body>
</html>
输出5即可
在JSP页面中,经常利用JSP表达式<%=变量或者表达式%>来输出声明的变量以及页面传递的参数,当变量很多的时候,书写这样的表达式会显得累赘,EL标签很好地解决了这个问题,它简化了表达式。
EL标签语法
${参数名}
例如:${param.name}获得参数name的值,等同于<%=request.getParameter(name’)%>。从形式和用法上看,这种EL表达式简化了JSP原有的表达式,也是目前开发中经常使用的方式。
EL标签功能
总体而言,EL标签提供了更为简洁、方便的形式来访问变量,不但可以简化JSP页面代码,而且使得开发者的逻辑更加清晰。
EL标签具有以下功能:
- 可以访问JSP中不同域的对象。
- 可以访问Java Bean中的属性。
- 可以访问集合元素
- 支持简单的运算符操作
访问JSP中不同域的对象
在Web中有4个作用域分别是page、request、.session和application。EL标签可以对这4个作用域的参数进行访问。
安装maven包
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-servlet-api</artifactId>
<version>9.0.74</version>
</dependency>
<!--老版本,pageContext使用-->
<!-- <dependency>-->
<!-- <groupId>javax.servlet.jsp</groupId>-->
<!-- <artifactId>jsp-api</artifactId>-->
<!-- <version>2.2</version>-->
<!-- <scope>provided</scope>-->
<!-- </dependency>-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
<scope>provided</scope>
</dependency>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<%
pageContext.setAttribute("name", "smith");
request.setAttribute("age", 20);
session.setAttribute("address", "china");
application.setAttribute("sex", "male");
%>
<h1>演示访问</h1>
<h3>范围.参数名称</h3>
<p>姓名:${pageScope.name}</p>
<p>年龄:${requestScope.age}</p>
<p>地址:${sessionScope.address}</p>
<p>性别:${applicationScope.sex}</p>
<h3>直接写参数名称</h3>
<p>姓名:${name}</p>
<p>年龄:${age}</p>
<p>地址:${address}</p>
<p>性别:${sex}</p>
<body>
</body>
</html>
在上述代码中,有两种方法取得参数值,第一种代码是用EL隐含变量获取参数值,第二种直接写明参数名,由此可知EL标签会依序从Page、Request、Session、Application范围查找,若找到name参数名,就直接回传参数值,不再继续查找,若没有参数,则返回null。
访问java bean中的属性
在Java Bean中,经常是用Java Bean做内部变量(数据成员)。在JSP表达式中访问这些JavaBean中的变量比较麻烦,但是应用EL标签却极其简单、方便。
User.java
package com.wujialiang;
import java.io.Serializable;
public class User implements Serializable {
private String address;
private Integer age;
private String name;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
index.jsp
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<%
User user = new User();
user.setAddress("中国");
user.setAge(20);
user.setName("张三");
request.setAttribute("user",user);
%>
<p>用户信息:${user}</p>
<p>年龄:${user.age}</p>
<p>地址:${user.address}</p>
<p>姓名:${user.name}</p>
<body>
</body>
</html>
EL标签的操作符
本节主要介绍EL标签的操作符,它可以帮助解决各种所需的功能。操作符大致可以分为算术运算符、逻辑运算符、关系运算符以及其他运算符。
- 算术运算符:算术运算符有5个,即+ - * /、求模(或div、%、mod)。
- 逻辑运算符:逻辑运算符有3个,即“&&”或“and”、"||"或“or”、“!”或“not”。
- 关系运算符:关系运算符有6个,即“=”或“eq”、“!=”或“ne”、“<”或“It”、“>”或“gt”、“<=”或“le”、“>=”或“ge”。
- 其他运算符:Empty运算符、条件运算符、“()”运算符、“[]”运算符。
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>EL运算符</title>
</head>
<body>
<%
User user = new User();
user.setAddress("中国");
user.setAge(20);
user.setName("张三");
request.setAttribute("user", user);
request.setAttribute("str", null);
String[] arr = new String[]{
"第一个",
"第二个"
};
request.setAttribute("arr", arr);
%>
<h1>算数运算符</h1>
<div>
<p>加3+3=${3+3}</p>
<p>减3-2=${3-2}</p>
<p>乘3*3=${3*3}</p>
<p>除3/6=${3/6}</p>
<p>取模10%3=${10%3}</p>
</div>
<h1>逻辑运算</h1>
<div>
<p>逻辑与${2<15 && 15<20}</p>
<p>逻辑与${2<15 and 15<20}</p>
<p>逻辑或${2<15 || 15<20}</p>
<p>逻辑或${2<15 or 15<20}</p>
<p>逻辑非${!(2<15)}</p>
<p>逻辑非${not(2<15)}</p>
</div>
<h1>关系运算符</h1>
<div>
<p>符号左右两端是否相等:2-=15:${2==15}或${2 eq 15}</p>
<p>符号左右两端是否不相等:2!=15:${2!=15}或${2 ne 15}</p>
<p>符号左边是否小于右边:2<15:${2<15}或${2 lt 15}</p>
<p>符号左边是否大于右边:2>15:${2>15}或${2 gt 15}</p>
<p>符号左边是否小于或者等于右边:2<=15:${2<=15}或${2 le 15}</p>
<p>符号左边是否大于或者等于右边: 2>=15:${2>=15}或${2 ge 15}</p>
</div>
<h1>其他运算符</h1>
<div>
<p>str是否为空:${empty str}</p>
<p>user对象是否为空:${empty user}</p>
<p>2小于15输出yes否则输出no:${2<15?'yes':'no'}</p>
<p> 输出user对象的address属性:${user.address}</p>
<p>输出arr数组的第一个值:${ arr[0] }</p>
</div>
</body>
</html>
“.”与“[]”运算符的区别在于“[]”访问数组或者集合、“”访问Java Bean属性或者Map Entry。变量必须利用“[]”运算符,“.”则不行。
EL标签隐含变量
本节将介绍EL标签的隐含变量,这些隐含变量与JSP中的隐含对象很相似。
隐含变量pageScope、requestScope、sessionScope、applicationScope
隐含变量pageScope、requestScope、sessionScope、applicationScope分别对应于JSP隐含变量page、request、.session、application,利用JSP中对应的作用域发送请求的参数变量,可以用相应的EL标签变量获取参数值。
隐含变量param、paramValues
隐含变量param、param Values包含请求参数集合变量,param是取得某一个参数,param Values是取得参数集合中的变量值,它们相当于JSP中的request…getParameter(String name)和request.getParameter Values(String name).
index.jsp
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>EL运算符</title>
</head>
<body>
<form action="test.jsp" method="post">
<input type="text" name="salepleVal" value="1">
<input type="text" name="salepleVal" value="17">
<input type="text" name="salepleVal" value="16">
<input type="text" name="simpleSingleVal" value="single">
<input type="submit" value="submit">
</form>
</body>
</html>
text.jsp
<%@ page import="java.util.*" contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>请求参数值:${param.simpleSingleVal}</p>
<p>请求参数值:${param.salepleVal}</p>
</body>
</html>
其他变量
header、headerValues变量
header、headerValues这两个变量用于获取请求HTTP表头信息,header表示取得HTTP表头
信息,headerValues表示取得表头数组信息,它们分别对应于request.getHeader()和request.getHeaders()
cookie变量
cookie变量用于取得所有请求的cookie参数,参数中的每个对象对应javax.servlet.http.Cookie.
例如,要获取cookie中名称为username的值,可以直接使用${cookie.username}来获取。
initParam变量
initParam用于取得应用程序的初始化参数,相当于application.getInitParameter(方法,但通常很少使用。
例如,一般页面获取初始化的方法String url=application.getInitParameter((“url”)可以用${initParam.url}来代替。
pageContext变量
pageContext变量用于取得其他相关用户的请求或页面的详细信息,其等同于JSP中的PageContext对象。下面列出几个常用的方法:
方法 | 解释 |
---|---|
${pageContext.request.queryString} | 取得请求的参数名 |
$pageContext.request.requestURL} | 取得请求的URL |
${pageContext.request.contextPath} | 取得服务应用的名称 |
${pageContext.request.method} | 取得HTTP的提交方法 |
${pageContext.request.protocol} | 取得使用的协议(HTTP/1.1、HTTP/1.0) |
${pageContext.request.remoteUser} | 获取登录用户名称 |
${pageContext.request.remoteAddr} | 获取登录用户P地址 |
${pageContext.session.new} | 判断session是否为新的会员 |
${pageContext.session.id} | 取得session的ID号 |
$pageContext.servletContext.serverInfo} | 取得主机端的服务信息 |
index.jsp
<%@ page contentType="text/html;charset=UTF-8" import="java.util.*,com.wujialiang.User" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
<title>EL运算符</title>
</head>
<body>
<p>会话id:${pageContext.session.id}</p>
<p>Accept-Encoding报头:${header["Accept-Encoding"]}</p>
<p>connection报头:${header["connection"]}</p>
</body>
</html>
禁用EL标签
整个web页面禁用
EL标签是在JSP2.0之后才有的新特性,因此需要指定JSP版本并设置为较低版本(Servlet2.3或者更早),那么JSP页面将不再支持EL标签。可以通过修改web.xml文件实现。修改后的web.xml配置为:
<?xml version="1.0"encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
单个页面禁用,现在默认就是true
<%@ page isELIgnored="true" %>
通常情况下,在一个应用中要么全部允许使用EL标签,要么都不允许,因此很少出现部分页面使用而另一部分不用的情形。但EL标签允许在一个页面中部分支持标签、部分不支持,若要实现此功能,只需在不需要解析的EL表达式的“$”符号前加入一个反斜杠即可,如“\$”。