前言:由於通常情況下jstl和el表達式配合使用,因此將jstl和EL表達式放在一起講解
一.jstl和EL定義
jstl即JavaServer Pages Standard Tag Library,JSP標準標籤庫。
表達式語言(EL)是 JSP 2.0 引入的一種計算和輸出 Java 對象的簡單語言。
二.爲什麼使用jstl和EL表達式
其實不使用jstl和el表達式也可以實現相應的功能,但是如果不使用的話就需要寫大量java程序到jsp中,這使得jsp異常的複雜,令人抓狂。因此使用jstl和el表達式可以使得jsp代碼變得簡潔美觀,使得代碼維護起來更加容易。
三.如何使用EL表達式?
1.配置el表達式
(1)導入standard.jar。
(2)在需要使用 EL 語音的頁面加上<%@ page isELIgnored="false" %>。
注意 <%@ page isELIgnored="true" %> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認的啓用 EL 語言。
注:目前大多使用的高版本Tomcat都是支持el表達式的,沒必要去修改web.xml
2.el表達式的內置對象(重要)
pageScope、requestScope、sessionScope、applicationScope
假設在獲取值是沒有指定內置對象,那麼默認從 pageScope 到 applicationScope依次擴大範圍查找屬性名。舉例:
${requestScope.username}
在上邊的一行代碼中我制定了作用於requestScope,則此時他會直接去request數據域中查找username的值,但是當我不去指定時,此時程序會先去 page中找,找不到的話再去request中找。
3.el表達式的‘[ ]’和' . '運算符
(1)‘ . ’運算符最爲常用,他等作用是獲取相應的值如上邊的案例是獲取request數據域中的username值.
(2)‘[]’運算式當需要當要存取的屬性名稱中包含一些特殊字符時,必須使用‘[]’而不能使用‘.’
如:
${requestScope.user?name}(錯誤)
${requestScope["user?name"]}(正確)
(3)如果要動態取值時,就可以用“[ ]“來做,而“.“無法做到動態取值
4.pageContext的作用
pageContextJSP 頁的上下文。它可以用於訪問 JSP 隱式對象,如請求、響應、會話、輸出、servletContext 等
舉例:得到jsp所在項目名稱
${pageContext.request.contextPath}
注:這在請求路徑中使用絕對路徑時經常用到
5.EL表達式的操作符
四.如何使用jstl
1.jstl的配置
(1)導入standard.jar和jstl.jar。
(2)在JSP頁面上引入 JSTL 的引用,即:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2.常用標籤解析(核心標籤)
(1)<c:out>:用於在JSP中顯示數據,和<%= ... >功能相似
基本語法:<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>
(2)<c:set>:用於保存數據
基本語法:<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>"/>
(3)<c:remove>:標籤用於移除一個變量
基本語法:<c:remove var="<string>" scope="<string>"/>
(4)<c:catch> 標籤:主要用來處理產生錯誤的異常狀況,並且將錯誤信息儲存起來。
基本語法:<c:catch var="<string>">... </c:catch>
(5)<c:if>標籤:判斷表達式的值,如果表達式的值爲 true 則執行其主體內容
基本語法:<c:if test="<boolean>" var="<string>" scope="<string>">...</c:if>
(6)<c:choose>、<c:when>、<c:otherwise>:這三個標籤一般是配合使用,類似if{...}else if{...}else{....}
語法格式:
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
(7)<c:import>標籤:檢索一個絕對或相對 URL,然後將其內容暴露給頁面,和<jsp:include>功能相似。
語法格式:
<c:import
url="<string>"
var="<string>"
scope="<string>"
varReader="<string>"
context="<string>"
charEncoding="<string>"/>
(8) <c:forEach>:基礎迭代標籤,接受多種集合類型。它封裝了Java中的for,while,do-while循環。
基本語法:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
(9)<c:url>: 使用可選的查詢參數來創造一個URL,當某個URL地址依據不同條件修改時,就能體現出<c:url>標籤的真正作用了
(10)<c:param>:用來給包含或重定向的頁面傳遞參數
(11)<c:redirect>:重定向至一個新的URL.
語法:<c:redirect url="<string>" context="<string>"/>
五.緒
jstl也提供了格式化標籤、SQL標籤、xml標籤、jstl函數,但這些標籤並不常用,這裏不一一贅述,當用到時自行查找即可。
格式化標籤:(<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>)
SQL標籤:(<%@ taglib prefix="sql” uri="http://java.sun.com/jsp/jstl/sql" %>)
jstl函數(<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>)
六.實例代碼 (根據體重判斷你是不是胖子)
<%--
Created by IntelliJ IDEA.
User: lenovo
Date: 2018/7/26
Time: 10:28
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<table>
<c:forEach items="${requestScope.uwList}" var="uw">
<c:set var="weight" value="${uw.weight}"/>
<c:choose>
<c:when test="${weight<=100}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>瘦子</td></tr>
</c:when>
<c:when test="${weight>100&&weight<=150}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>正常</td></tr>
</c:when>
<c:when test="${weight>150&&weight<=200}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>胖子</td></tr>
</c:when>
<c:when test="${weight>200}">
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>大胖子</td></tr>
</c:when>
<c:otherwise>
<tr><td>${uw.username}</td><td>${uw.weight}</td><td>體重不合理</td></tr>
</c:otherwise>
</c:choose>
</c:forEach>
</table>
</body>
</html>