javascript
EL_JSTL
1.導言
- 表達式語言 EL(Expression Language)是 JSP 2.0 的重要特性。 EL 設計成可以輕松地編寫免腳本的 JSP 頁面,也就是說,頁面不使用任何 JSP 聲明、表達式或者 scriptlets 。
- JSTL(JavaServer Pages Standard Tag Library,JSP 標準標簽庫)主要提供給 Java Web 開發人員一個標準通用的標簽函數庫,標簽庫同時支持 EL 用于獲取數據,Web開發人員能夠用此標簽庫取代直接在頁面中嵌入 Java 程序的做法,以提高程序的可讀性和易維護性。
2. EL 簡介
EL表達式以'${'開頭,并以'}'結束。
語法格式為:${expression} 。
EL表達式中的常量包括布爾常量、整型常量、字符串常量和NULL常量。
(1)EL中的標識符
EL 的標識符可以由任意的大小寫字母、數字和下劃線組成。但 EL 的標識符:① 不能以數字開頭;② 不能是EL 中的保留字;③ 不能是隱式對象;④ 不能包含單引號、雙引號、減號和正斜杠等特殊字符。
(2)變量與保留關鍵字
EL 表達式中的變量須從 JSP 四大作用域范圍中依序進行查找。( page、request、session 和 application )
以下是 EL 中的保留關鍵字,不能用作標識符。
and、or、not、eq、ne、lt、gt、le、ge、true、false、null、instanceof、empty、div、mod 。
(3) [ ] 和 . 運算符
通過 EL 提供的“[ ]”和“.”運算符可以訪問數據。
①“.”運算符:EL 表達式可使用點操作符來訪問對象的屬性。例如 object.propertyname。②“[]”運算符:與點操作符類似,也用于訪問對象的屬性,屬性名須用雙引號括起來。③“[]”運算符可以訪問Map對象的key關鍵字的值,例如{object.propertyname} 。 ②“[ ]”運算符:與點操作符類似,也用于訪問對象的屬性,屬性名須用雙引號括起來。 ③“[ ]”運算符可以訪問 Map 對象的 key 關鍵字的值,例如object.propertyname。②“[]”運算符:與點操作符類似,也用于訪問對象的屬性,屬性名須用雙引號括起來。③“[]”運算符可以訪問Map對象的key關鍵字的值,例如{map[ “key”]}。
2.1 EL 的運算符和優先級
2.2 EL 隱式對象
EL為了能夠獲得Web 應用程序中的相關數據,EL 提供了11個隱式對象,類似于JSP的內置對象。
在EL的隱式對象中,除 PageContext 是JavaBean對象,對應于javax.servlet.jsp.PageContext類型外,其他的隱式對象都對應于java.util.Map類型。
這些隱式對象可分為頁面上下文對象、訪問作用域范圍的隱式對象和訪問環境信息的隱式對象 3 種。如表 5-5 所示。
2.2.1 PageContext對象
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>PageContext隱式對象的使用</title> </head> <body> PageContext隱式對象的使用<br><hr> 獲取請求URI:${pageContext.request.requestURI }<br> 獲取請求URL:${pageContext.request.requestURL }<br> 獲取響應的內容類型:${pageContext.response.contentType }<br> 獲取服務器信息:${pageContext.servletContext.serverInfo }<br> 獲取Servlet注冊名:${pageContext.servletConfig.servletName }<br> 獲取session創建時間:${pageContext.session.creationTime }<br> 獲取session會話最長空閑時間:${pageContext.session.maxInactiveInterval }<br> 獲取session會話的id:${pageContext.session.id } </body> </html>2.2.2 作用域范圍隱式對象(pageScope—requestScope—sessionScope—applicationScope)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>作用域范圍隱式對象的使用</title> </head> <body> <% pageContext.setAttribute("cityName", "Soochow"); %> <% request.setAttribute("university", "華東師范大學"); %> <% session.setAttribute("bookName", "《Android應用開發實踐教程》"); %> <% application.setAttribute("cityName", "New York"); %> <p>pageScope隱式對象中key為"cityName"的值:${pageScope.cityName }</p> <p>requestScope隱式對象中key為"university"的值:${requestScope.university }</p> <p>session隱式對象中key為"bookName"的值:${sessionScope.bookName }</p> <p>applicationScope隱式對象中key為"cityName"的值:${applicationScope.cityName }</p> <p>表達式\${cityName}的值:${pageScope.cityName}</p> </body> </html>2.2.3 param和paramValues對象
訪問param.jsp,提交到param_result.jsp
param.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>param和paramValues隱式對象的使用</title> </head> <body> <h2>個人信息</h2> <form action="${pageContext.request.contextPath}/page/ch5/param_result.jsp"> <p>姓名:<input type="text" name="user" /></p> <p>愛好:<input type="checkbox" name="hobby" value="swim">游泳 <input type="checkbox" name="hobby" value="pingpang">乒乓球 <input type="checkbox" name="hobby" value="music">音樂 <input type="checkbox" name="hobby" value="Go">圍棋</p> <p><input type="submit" value="提交"></p> </form> </body> </html>param_result.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>個人信息</title> </head> <body> <p>姓名:${param.user}</p> <p>愛好:${paramValues.hobby[0]} ${paramValues.hobby[1]} ${paramValues.hobby[2]}</p> </body> </html>2.2.4 Cookie對象
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cookie隱式對象的使用</title> </head> <body><h3>Cookie隱式對象的使用</h3><p>獲取名為JSESSIONID的Cookie對象:${cookie.JSESSIONID }</p><p>獲取名為JSESSIONID的Cookie對象的名稱:${cookie.JSESSIONID.name }</p><p>獲取名為JSESSIONID的Cookie對象的值:${cookie.JSESSIONID.value }</p><hr><%Cookie cookie2 = new Cookie("username", "admin");response.addCookie(cookie2);%><p>獲取名為username的Cookie對象:${cookie.username }</p><p>獲取名為username的Cookie對象的名稱:${cookie.username.name }</p><p>獲取名為username的Cookie對象的值:${cookie.username.value }</p> <hr><%Cookie[] cookies = request.getCookies();if (cookies != null)for (Cookie c : cookies) {out.println(c);out.println(c.getName());out.println(c.getValue());out.println("<br>");}%></body> </html>設置Cookie請看:https://www.bithachi.cn/posts/f768f9d3.html
2.2.5 header對象
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>header隱式對象的使用</title> </head> <body> <h3>header隱式對象的使用</h3> <p>獲取請求頭Host的值:${header.host }</p> <p>獲取請求頭的connection屬性(是否需要持久連接):${header.connection }</p> </body> </html>2.2…6 initParam對象
web.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_4_0.xsd"version="4.0"><context-param><param-name>driverClassName</param-name><param-value>com.mysql.jdbc.Driver</param-value></context-param> </web-app> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>initParam隱式對象的使用</title> </head> <body> <h3>initParam隱式對象的使用</h3> <p>driverClassName的值:${initParam.driverClassName }</p> </body> </html>2.3. 定義和使用 EL 函數
EL 自定義函數就是提供一種語法允許在 EL 中調用某個Java類的靜態方法。
EL自定義函數的開發與應用包括以下3個步驟:
(1)編寫一個Java類,并在該類中編寫公用的靜態方法,用于實現自定義EL函數的具體功能。
(2)編寫標簽庫描述文件(擴展名為*.tld),對函數進行聲明,保存到Web應用的WEB-INF文件夾下。
(3)在JSP頁面中引用標簽庫,并調用定義的EL函數,實現相應的功能。
3. JSTL 簡介
JSP 標準標簽庫(JSTL)是一個 JSP 標簽集合,它封裝了 JSP 應用的通用核心功能。
JSTL 支持通用的、結構化的任務,比如迭代,條件判斷,XML 文檔操作,國際化標簽,SQL 標簽。
除了這些,它還提供了一個框架來使用集成JSTL的自定義標簽。
根據JSTL標簽所提供的功能,可以將其分為5個類別。
-
核心標簽
-
格式化標簽
-
SQL標簽
-
XML標簽
-
JSTL函數
3.1 核心標簽庫
JSTL 核心標簽庫包含 Web 應用中最常使用的標簽,是 JSTL 中比較重要的標簽庫。核心標簽庫的標簽按功能可分為4類:表達式標簽、條件標簽、迭代標簽、URL相關標簽。
如表 5-6 所示。引用核心標簽庫的語法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
更多用法:https://www.runoob.com/jsp/jsp-jstl.html
3.2 <c:out>輸出標簽、<c:set>變量設置標簽、<c:remove>變量移除標簽
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello,JSTL</title> </head> <body><c:set var="mystr" value="Hello,我們開始學習JSTL!"></c:set><c:out value="${mystr}"></c:out> </body> </html> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:remove> 標簽</title> </head> <body> <c:set var="user" value="一劍沖天" scope="session" /> session中的user:<c:out value="${user}" /> <br><hr> <c:remove var="user" scope="session" /> 從session中移除user再訪問:<c:out value="${user}" /> </body> </html>3.3 <c:catch> 捕獲異常標簽
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:catch> 標簽</title> </head> <body><c:catch var="exception1"><%=169/0%></c:catch><c:out value="${exception1}" /><br><c:out value="${exception1.message}" /> </body> </html>3.4 <c:if>、 <c:choose>、 <c:when>、 <c:otherwise>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:choose> 標簽</title> </head> <body><c:set var="user1" value="一劍沖天" scope="session" /><c:if test="${not empty sessionScope.user1}">您好,${sessionScope.user1}</c:if><c:set var="user" value="admin222" scope="session" /><c:set var="actor1" value="admin1" scope="session" /><c:set var="actor2" value="admin2" scope="session" /><c:choose><c:when test="${sessionScope.user eq sessionScope.actor1}">歡迎您,一級管理員!</c:when><c:when test="${sessionScope.user eq sessionScope.actor2}">歡迎您,二級管理員!</c:when><c:otherwise>對不起,您只是游客,無權訪問該資源!</c:otherwise></c:choose> </body> </html>3.5 <c:forEach>迭代標簽
<c:forEach>迭代標簽標簽有如下屬性:
| items | 要被循環的信息 | 否 | 無 |
| begin | 開始的元素(0=第一個元素,1=第二個元素) | 否 | 0 |
| end | 最后一個元素(0=第一個元素,1=第二個元素) | 否 | Last element |
| step | 每一次迭代的步長 | 否 | 1 |
| var | 代表當前條目的變量名稱 | 否 | 無 |
| varStatus | 代表循環狀態的變量名稱 | 否 | 無 |
3.6 <c:import>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:import> 標簽</title> </head> <body><c:import url="navigation.jsp" /> </body> </html> <%--navigation.jsp--%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>電影天堂</title> </head> <body> <font color="blue"><b>最新影片 | 經典影片 | 國內電影 | 歐美電影 | 歐美電視 | 最新綜藝</b></font> </body> </html>3.7 <c:url>、 <c:set>、 <c:remove>
<%-- url_test.jsp --%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:url> 標簽</title> </head> <body><c:url var="path" value="navigation.jsp" scope="page" /><a href="${pageScope.path}">電影天堂首頁</a> </body> </html> <%-- redirect_test.jsp --%><%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>使用 <c:redirect> 標簽</title> </head> <body><c:redirect url="main.jsp"><c:param name="user" value="詩仙李白" /></c:redirect> </body> </html> <%-- main.jsp --%> <%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>重定向頁面并傳遞參數</title> </head> <body> <p>原來你是${param.user}</p> </body> </html>總結
- 上一篇: 工厂与抽象工厂
- 下一篇: Spring入门图解(体系结构-IOC-