I. EL
- EL(Expression Language,表達式語言):主要用來代替 JSP 中腳本的功能,簡化對 Java 代碼的操作。
- 語法:
${表達式}
1. EL 獲取域中的值
a. 語法
i. 標準語法
${pageScope.鍵名}
:
從 page 域中獲取指定鍵名對應的值。
${requestScope.鍵名}
:
從 request 域中獲取指定鍵名對應的值。
${sessionScope.鍵名}
:
從 session 域中獲取指定鍵名對應的值。
${applicationScope.鍵名}
:
從 servletContext 域中獲取指定鍵名對應的值。
ii. 簡化語法
${鍵名}
:
默認從最小域開始找,找到後直接顯示,不在繼續尋找。
要求四個域鍵名唯一。
iii. 代碼示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>el表達式基本語法</h3>
<%
request.setAttribute("username", "Regino");
request.setAttribute("age", 21);
session.setAttribute("sex", "男");
application.setAttribute("address", "HK");
%>
<h5>標準語法</h5>
${pageScope.username}<br> <%--不會出現空指針異常問題--%>
${requestScope.age}<br>
${sessionScope.sex}<br>
${applicationScope.address}<br>
<h5>簡化語法</h5>
${username}<br>
${age}<br>
${sex}<br>
${address}<br>
</body>
</html>
b. 獲取 JSP 動態資源
- 獲取字符串:
${鍵名}
之前的內容已經介紹過了。
- 獲取對象(User):
${鍵名.屬性名}
屬性名必須和實體類中的 get 方法返回的變量名稱一致。
el 不會出現 null 和索引角標越界問題。
遍歷要用到 JSTL 標籤庫,詳情可見 。
- 獲取 List(Array)集合:
${鍵名[索引]}
- 獲取 Map 集合:
${鍵名.key}
${鍵名["key"]}
i. 獲取對象
package com.company.up.domain;
public class User {
private String name;
private String sex;
private Integer age;
public User() {
}
public User(String name, Integer age, String sex) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"name='" + name + '\'' +
", sex='" + sex + '\'' +
", age=" + age +
'}';
}
}
<%@ page import="com.company.up.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>獲取user對象</h3>
<%
User user = new User("Regino", 21, "男");
request.setAttribute("user", user);
%>
${user}<br><%--執行該對象的toString方法--%>
${user.name} | ${user.age} | ${user.sex}<br>
</body>
</html>
ii. 獲取 List 集合
<%@ page import="com.company.up.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>獲取list集合</h3>
<%
List<Object> list = new ArrayList<>();
list.add("胖虎");
list.add("小夫");
list.add("靜香");
User user = new User("Regino", 21, "男");
list.add(user);
request.setAttribute("list", list);
%>
${list}<br><%--執行該對象的toString方法--%>
${list[0]} | ${list[1]} | ${list[2]} | ${list[3].name} | ${list[10]}<br> <%--el表達式不會出現 集合(數組)角標越界異常--%>
</body>
</html>
iii. 獲取 Map 集合
<%@ page import="com.company.up.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.HashMap" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>獲取map集合</h3>
<%
Map<String, Object> map = new HashMap<>();
map.put("key1", "胖虎");
map.put("key2", "小夫");
map.put("key3", "靜香");
User user = new User("Regino", 21, "男");
map.put("key.4", user);
request.setAttribute("map", map);
%>
${map}<br><%--執行該對象的toString方法--%>
${map.key1} | ${map.key2} | ${map.key3} | ${map["key.4"].name}<br>
</body>
</html>
2. EL 執行運算
a. 語法
- 算數運算符:
語法: +
-
*
/
(div
) %
(mod
)
可以用單詞也可以用符號
- 比較運算符:
語法:>
<
>=
<=
==
(eq
) !=
(ne
)
- 邏輯運算符:
語法:&&
(and
) ||
(or
) !
(not
)
- 三元運算符:
語法:${條件表達式?爲真:爲假}
- 空運算符:
語法:${not empty 對象}
功能:
可以判斷字符串和對象是否爲空
可以判斷一個集合的長度是否爲 0
b. 代碼示例
<%@ page import="com.company.up.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<%
int a = 4;
int b = 3;
request.setAttribute("a", a);
request.setAttribute("b", b);
%>
<h5>算數運算符</h5>
${a / b} | ${a div b}<br>
${a % b} | ${a mod b}<br>
<h5>比較運算符</h5>
${a == b} | ${a eq b}<br>
${a !=b } | ${a ne b}<br>
<h5>三元運算符</h5>
${a == b ? "a相等於b" : "a不等於b"}<br>
<h5>非空判斷</h5>
<%
User user = new User();
request.setAttribute("user", user);
List list = new ArrayList();
list.add("aa");
request.setAttribute("list", list);
%>
user對象:${not empty user}<br> <%-- if(user !=null ){} --%>
list集合:${not empty list}<br> <%-- if(list !=null && list.size>0 ){}--%>
<h5>空值判斷</h5>
user對象:${empty user}<br> <%-- if(user ==null ){} --%>
list集合:${empty list}<br> <%-- if(list ==null || list.size==0 ){}--%>
</body>
</html>
3. EL 隱式對象
a. 常用隱式對象
- EL 表達式中有 11 個隱式對象。比較常用的有:
- pageContext
就是 JSP 9 個內置對象之一,可以獲得其他 8 個內置對象。
- cookie
可以獲取瀏覽器指定 Cookie 名稱的值。
b. 代碼示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>el 隱式對象</h3>
${pageContext.request.contextPath} 動態獲取:項目名稱(虛擬路徑)<br>
${cookie.JSESSIONID.value} 獲取指定cookie名稱的值...<br>
</body>
</html>
4. EL 版本支持
- JSP 默認支持 EL 表達式。
- Servlet 2.3 規範中,默認不支持 EL 表達式。
5. 忽略 EL 表達式
a. 語法
- 忽略當前 JSP 頁面中所有的 EL 表達式:
設置 JSP 中 page 指令中 isELIgnored="true"
屬性
- 忽略單個 EL 表達式:
\${表達式}
b. 代碼示例
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>el 隱式對象</h3>
${pageContext.request.contextPath} 動態獲取:項目名稱(虛擬路徑)<br>
\${cookie.JSESSIONID.value} 獲取指定cookie名稱的值...<br>
</body>
</html>
II. JSTL
- Jsp(Jsp Standard Tag Library,標準標籤庫):是由 Apache 組織提供的開源的 JSP 標籤庫,用於替換和簡化 JSP 頁面中 Java 代碼的編寫。
1. JSTL 標籤庫
- JSTL 標準標籤庫有 5 個子庫,但隨着發展,目前常使用的是它的核心庫(Core)。
標籤庫 |
標籤庫的 URI |
前綴 |
Core |
http://java.sun.com/jsp/jstl/core |
c |
國際化(幾乎不用) |
http://java.sun.com/jsp/jstl/fmt |
fmt |
SQL(過時) |
http://java.sun.com/jsp/jstl/sql |
sql |
XML(過時) |
http://java.sun.com/jsp/jstl/xml |
x |
Functions(幾乎不用) |
http://java.sun.com/jsp/jstl/functions |
fn |
2. Core 標籤使用步驟
a. 當前 web 項目引入 Jar 包
b. 當前 JSP 頁面 tablib 指令引入
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
3. 常用 Core 標籤
a. c:if 標籤
c:if
標籤相當於 Java 中的 if(){}
。
i. 語法
<c:if test="boolean值"></c:if>
。
- true:顯示標籤體內容;
- false:隱藏標籤體內容。
- 通常與 EL 表達式一起使用
- 注意:此標籤沒有 else 功能,如果想實現 else 效果,要讓條件取反。
ii. 代碼示例
<%@ page import="com.company.up.domain.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<%
User user = new User();
%>
<c:if test="${empty user}">
你好,請登錄...
</c:if>
<c:if test="${not empty user}">
你好,${user.name}
</c:if>
</body>
</html>
b. c:forEach 標籤
c:forEach
標籤相當於 Java 中的 for 循環
。
i. 普通 for 循環
for(int i=1; i<=5; i++){
i
}
<c:forEach begin="1" end="5" step="1" var="i">
${i}
</c:forEach>
begin="1"
:起始值(包含);
end="5"
:結束值(包含);
step="1"
:步長爲 1;
var="i"
:當前輸出臨時變量。
ii. 增強 for 循環
for(User user : list){
user
}
<c:forEach items="${list}" var="user" varStatus="vs">
${user}
</c:forEach>
items="list"
:集合;
var="user"
:當前輸出的臨時變量;
varStatus="vs"
:變量狀態,vs 表示 1 個對象,用於在增強 for 中取出索引,有 2 個屬性:
index
:當前索引,從 0 開始;
count
:計數器,從 1 開始。
iii. 代碼示例
<%@ page import="com.company.up.domain.User" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.List" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>普通for循環</h3>
<c:forEach begin="1" end="5" step="1" var="i"> <%--for循環將臨時變量存儲到了 pageContext域空間--%>
${i}<br>
</c:forEach>
<h3>增強for循環</h3>
<%
List<User> list = new ArrayList<>();
list.add(new User("Regino", 21, "男"));
list.add(new User("Reggie", 23, "女"));
list.add(new User("Reginald", 20, "中"));
request.setAttribute("list", list);
%>
<c:forEach items="${list}" var="user" varStatus="vs">
索引:${vs.index} | 計數器: ${vs.count} | ${user.name}<br>
</c:forEach>
</body>
</html>
c. c:choose 標籤
i. 語法
c:choose
標籤相當於 Java 中的 switch 語句
<c:choose>
:等價於 switch;
<c:when>
:等價於 case + break;
<c:otherwise>
:等價於 default。
ii. 代碼示例
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>demo.jsp</title>
</head>
<body>
<h3>choose標籤</h3>
<%
Integer face = 10;
request.setAttribute("face", face);
%>
<c:choose>
<c:when test="${face <= 7}">
普通
</c:when>
<c:when test="${face == 8 || face == 9}">
明星
</c:when>
<c:when test="${face == 10}">
傾城
</c:when>
<c:otherwise>
外星人
</c:otherwise>
</c:choose>
</body>
</html>
原文鏈接:https://qwert.blog.csdn.net/article/details/105698202