目录
一、EL表达式
1.快速入门 :
1.1 基本介绍
1°EL 表达式全称:Expression Language,是表达式语言
2° EL 表达式的主要作用是代替JSP页面的表达式脚本 <% =request.getAttribute("...") %>
3°EL 表达式基本语法: ${key},形式上比传统的JSP表达式脚本更简洁。
1.2 入门案例
以intro.jsp为例,代码如下 :
<%-- User : Cyan_RA9 Version : 21.0 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL expression</title> </head> <body> <% request.setAttribute("color", "pink"); %> <%-- PS : 若attribute为null,取出数据时,JSP方式返回"null",而EL表达式返回"". --%> <h1>传统JSP取出数据———</h1> color : <%= request.getAttribute("color") %> <br/> author : <%= request.getAttribute("author") %> <br><hr> <%--可使用三元运算符优化--%> <h1>采用EL表达式取出数据———</h1> color : ${color} <br/> author : ${author} </body> </html>
运行结果 :
编辑
2.常用输出形式 :
2.1 创建JavaBean类
Movie类代码如下 :
package el; import java.util.List; import java.util.Map; /** * @author : Cyan_RA9 * @version : 21.0 * @what : 标准JavaBean类 */ public class Movie { private String name; private int length; private List<String> platforms; private Map<String, String> comments; public Movie() { } public Movie(String name, int length, List<String> platforms, Map<String, String> comments) { this.name = name; this.length = length; this.platforms = platforms; this.comments = comments; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public List<String> getPlatforms() { return platforms; } public void setPlatforms(List<String> platforms) { this.platforms = platforms; } public Map<String, String> getComments() { return comments; } public void setComments(Map<String, String> comments) { this.comments = comments; } @Override public String toString() { return "Movie{" + "name='" + name + '\'' + ", length=" + length + ", platforms=" + platforms + ", comments=" + comments + '}'; } }
2.2 创建JSP文件
output.jsp文件代码如下 :
<%@ page import="el.Movie" %> <%@ page import="java.util.ArrayList" %> <%@ page import="java.util.HashMap" %><%-- User : Cyan_RA9 Version : 21.0 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL output</title> </head> <body> <h1>输出Movie对象的信息</h1> <% Movie movie = new Movie(); movie.setName("Matrix"); movie.setLength(150); ArrayList<String> platforms = new ArrayList<>(); platforms.add("Bilibili"); platforms.add("YouTube"); platforms.add("Youku"); movie.setPlatforms(platforms); HashMap<String, String> comments = new HashMap<>(); comments.put("Cyan", "It's a so nice film!"); comments.put("Rain", "I like it!"); comments.put("Ice", "Pretty good!"); movie.setComments(comments); //将movie对象放入request域对象中 request.setAttribute("movie", movie); %> <%-- 取出数据 --%> Movie.name = ${movie.name} <br/> Movie.length = ${movie.length} <br/> Movie.platforms = ${movie.platforms} <br/> Movie.platforms[2] = ${movie.platforms[2]} <br/> Movie.platforms[2] = ${movie.platforms.get(2)} <br/> Movie.comments = ${movie.comments} <br/> Movie.comments_Cyan = ${movie.comments.get("Cyan")} <br/> Movie.comments_Rain = ${movie.comments["Rain"]} <br/> </body> </html>
运行结果 :
编辑
3.empty运算符 :
3.1 介绍
1°empty 运算可以判断一个数据是否为空,如果为空,返回true,否则返回false
2° 以下几种情况为空——
● value = null● value = ""
● value = new Object[] {} (长度为0的Object数组)
● 元素个数为0 的List集合
● 元素个数为0 的Map集合
3.2 实例
empty.jsp代码如下 :
<%@ page import="java.util.ArrayList" %> <%@ page import="java.util.HashMap" %><%-- User : Cyan_RA9 Version : 21.0 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>empty expression</title> </head> <body> <% request.setAttribute("key1", null); request.setAttribute("key2", ""); request.setAttribute("key3", new Object[]{}); request.setAttribute("key4", new ArrayList<>()); request.setAttribute("key5", new HashMap<>()); %> <%-- 判断是否为空 --%> key1是否为空: ${empty key1} <br/> key2是否为空: ${empty key2} <br/> key3是否为空: ${empty key3} <br/> key4是否为空: ${empty key4} <br/> key5是否为空: ${empty key5} </body> </html>
运行结果 :
编辑
4.EL对象 :
4.1 EL11个内置对象
如下表格所示 :
变量 | 类型 | 说明 |
pageContext | PageContextImpl | 获取JSP中的九大内置对象 |
pageScope | Map<String, Object> | 获取pageContext域中的数据 |
requestScope | Map<String, Object> | 获取request域中的数据 |
sessionScope | Map<String, Object> | 获取Session域中的数据 |
applicationScope | Map<String, Object> | 获取ServletContext域中的对象 |
param | Map<String, String> | 获取请求参数的值 |
paramValues | Map<String, String[]> | 获取多个值 |
header | Map<String, String> | 获取请求头的信息 |
headerValues | Map<String, String[]> | 获取请求头的多个信息 |
cookie | Map<String, Cookie> | 获取当前请求的Cookie信息 |
initParam | Map<String, String> | 获取在web.xml中配置的<context-param>上下文参数 |
4.2 域对象演示
elScope.jsp代码如下 :
<%-- User : Cyan_RA9 Version : 21.0 --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>EL scope</title> </head> <body> <% pageContext.setAttribute("color", "cyan"); request.setAttribute("color", "pink"); session.setAttribute("color", "cornflower_blue"); application.setAttribute("color", "lightyellow"); %> pageContext域_color = ${pageScope.color} <br/> request域_color = ${requestScope.color} <br/> session域_color = ${sessionScope.color} <br/> ServletContext域_color = ${applicationScope.color} </body> </html>
运行结果 :
编辑
4.3获取HTTP信息
http.jsp代码如下 :
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>pageContext demo</title> </head> <body> <h1>pageContext对象获取HTTP信息</h1> <hr/> <% //简化形式(将request域对象放入pageContext域中)——— JSP pageContext.setAttribute("req", request); %> 协议: ${ pageContext.request.scheme }<br> 协议: ${ req.scheme }<br> 服务器 ip:${ req.serverName }<br> 服务器端口:${ req.serverPort }<br> 工程路径:${ req.contextPath }<br> 请求方法:${ req.method }<br> 客户端 ip 地址:${ req.remoteHost }<br> 会话 id :${ pageContext.session.id }<br> </body> </html>
运行结果 :
编辑
二、JSTL标签库
1.基本介绍 :
1° JSTL标签库是指 JSP Standard Tag Library,即JSP标准标签库。
2° EL 表达式是为了替换JSP中的表达式脚本<%=%>,JSTL则是为了替换JSP中的代码脚本<%%>。
3° JSTL 由五个标签库组成——
功能范围 | URI | 前缀 |
核心标签库 | http://java.sun.com/jsp/jstl/core | c |
格式化 | http://java.sun.com/jsp/jstl/fmt | fmt |
函数 | http://java.sun.com/jsp/jstl/functions | fn |
数据库(不使用) | http://java.sun.com/jsp/jstl/sql | sql |
XML(不使用) | http://java.sun.com/jsp/jstl/xml | x |
4°使用JSTL需要导入jar包(impl 和 spec),PS : Tomcat10版本对jar包的依赖有变化(jakarta)。导入jar包后要重新启动Tomcat。下载jar包的网址如下 :
Apache Taglibs - Apache Standard Taglib: JSP[tm] Standard Tag Library (JSTL) implementations
5°taglib引入标签,要放在行首。
2.core核心库常用标签 :
2.1 <c:set></c:set>
(1) <c:set></c:set> 标签可以向域中保存数据,等价于——域对象.setAttribute(key,value);
(2) scope 属性设置保存到哪个域
page 表示 PageContext 域(默认值)
request 表示 Request 域
session 表示 Session 域
application 表示 ServletContext 域
(3) var 属性用于设置 key(键)
(4) value 属性用于设置 value(值)
2.2 <c:if></c:if>
(1) <c:if></c:if>标签用来做 if 判断。
(2) 其中的test 属性表示判断的条件(用 EL 表达式输出)
2.3 <c:choose> <c:when> <c:otherwise>
(1) 使用格式如下——
<c:choose>
<c:when test="${ requestScope.score >= 90 }">
<h1>牛逼~</h1>
</c:when>
<c:when test="${ requestScope.score >= 80 }">
<h1>还不错~</h1>
</c:when>
<c:otherwise>
<h1>飞舞!</h1>
</c:otherwise>
</c:choose>
(2) 如果使用EL表达式取数据时,没有指定域范围,默认是从小到大找。
2.4 <c : forEach>/c:forEach>
(1) <c:forEach></c:forEach>标签用来遍历输出,主要有以下四种遍历形式——
● 普通遍历输出 i 到 j (前闭后闭)
● 遍历数组
● 遍历 Map
● 遍历 List
(2) 相关属性——
1> 普通遍历 :
begin 属性设置开始的索引
end 属性设置结束的索引
step 属性表示遍历的步长值
var 属性表示循环的变量(也是当前正在遍历到的数据)2> 遍历数组 :
items 遍历的集合
var 遍历到的数据 (类似于增强for;输出时会自动锁定所在域)
eg :
<%
request.setAttribute("books", new String[]{"哈利波特", "指环王"});
%><c:forEach items="${requestScope.books}" var="book">
bookName = ${book} <br/>
</c:forEach>
3> 遍历Map集合 :
eg :
<%
Map<String, String> students = new HashMap<>();map.put("Cyan", "425");
map.put("Rain", "400");
map.put("Ice", "430");
request.setAttribute("students", students);
%><c:forEach items="${requestScope.students}" var="student">
Student's Info = ${student.key} --- ${student.value} <br/>
</c:forEach>
4> 遍历List集合 :
Δ遍历List集合与遍历Map集合时的步骤类似,都像Java 中的增强for循环结构。
varStatus 属性表示当前遍历到的数据的状态,可以得到 step,begin,end 等属性值PS :需要对应的JavaBean类提供相应的getXxx方法。
System.out.println("END----------------------------------------------------------------------------------------------------------------------");