1、JSTL簡介
css
JSTL的全稱:JSP Standard Tag Libary,JSP的標準標籤庫html
JSTL的做用:java
提供給Java web開發人員一個標準通用的標籤函數庫。web
和EL來取來傳統直接在頁面上嵌入Java程序的作法,以提供程序可讀性、維護性和方便性。數組
JSTL的版本:服務器
JSTTL的主要版本是1.0、1.1和1.2。session
1.0版本EL表達式尚未歸入官方規範。app
1.0和1.2版本EL表達式已經歸入官方規範。jsp
2、<c:out>標籤ide
輸出常量和域範圍中的變量(value屬性,使用EL表達式)。
輸出默認值(default屬性)。
默認HTML標籤不轉義(escapeXML)。
屬性名 | 是否支持EL | 屬性類型 | 屬性描述 |
value | √ | Object | 指定要輸出的內容 |
escapeXML | √ | Boolean | 指定是否將>、<等特殊字符進行HTML編碼轉換後再進行輸出,默認值是true。 |
default | √ | Object | 指定若是value屬性的值爲null時所輸出的默認值 |
示例:輸出常量
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:out value="Hello"></c:out> </body> </html>
示例:輸出域中的變量
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 輸出域中的變量 --> <% request.setAttribute("name", "你好,世界"); %> <c:out value="${name}"></c:out> </body> </html>
示例:輸出默認值
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 輸出默認值 --> <c:out value="${haha}" default="你好 Java"></c:out> </body> </html>
示例:輸出HTML標籤
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:out value="<a href='#'>超連接</a>"></c:out> </body> </html>
默認狀況下,輸出的是字符串,因此要加上escapeXml="false"屬性。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:out value="<a href='#'>超連接</a>" escapeXml="false"></c:out> </body> </html>
3、<c:set>標籤
向4個域中存入值(var value scope屬性)。
設置web域中java.util.Map類型的屬性對象或Javabean類型的屬性對象的屬性(target prperty value屬性)。
屬性名 | 是否支持EL | 屬性類型 | 屬性描述 |
value | √ | Object | 用於指定屬性值 |
var | × | String | 用於指定要設置的web域屬性的名稱 |
scope | × | String | 用於指定屬性所在的web域 |
target | √ | Object | 用於指定要設置屬性的對象,這個對象必須是Javabean對象或java.utl.Map對象 |
property | √ | String | 用於指定當前要爲對象設置的屬性名稱 |
示例:向4個web域對象存入值
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:set var="i" value="哈哈" scope="request"></c:set> <c:out value="${i}"></c:out> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 傳統方式 --> <% request.setAttribute("name", "呵呵"); %> <c:out value="${name}"></c:out> <!-- jstl方式 --> <c:set var="i" value="哈哈" scope="request"></c:set> <c:out value="${i}"></c:out> </body> </html>
示例:修改Javabean對象存入值
<%@page import="cn.vo.User"%> <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <% request.setAttribute("user", new User("你好","世界")); %> <c:set target="${user }" property="username" value="哈哈"></c:set> ${user.username } </body> </html>
4、<c:remove>標籤
<c:remove>標籤用於刪除各類web域中的值。
其語法格式以下:
<c:remove var="varName" [scope={page|request|session|application}]></c:remove>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 刪除屬性以前 --> <c:set var="i" value="哈哈" scope="page"></c:set> ${i} <!-- 刪除屬性以後 --> <c:remove var="i" scope="page"/> ${i} </body> </html>
5、<c:catch>標籤
<c:catch>標籤用於捕獲嵌套在標籤體中的內容拋出的異常,其語法格式以下:
<c:catch [var ='varName']> </c:catch>
var屬性用於標識<c:catch>標籤捕獲的異常對象,它將保存在page這個web域中。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:catch var="e"> <% int i = 10 / 0; %> </c:catch> ${e.message } </body> </html>
6、<c:if>標籤
<c:if test="">標籤能夠構造簡單的"if-then"結構的條件表達式。
屬性名 | 是否支持EL | 屬性類型 | 屬性描述 |
test | √ | boolean | 決定是否處理標籤體中的內容的條件表達式 |
var | × | String | 用於指定將test屬性的以後定結果保存到某個web域中的某個屬性的名稱 |
scope | × | String | 指定將test屬性的執行結果保存到那個web域中 |
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:set var="i" value="10" scope="page"></c:set> <c:if test="${i == 10 }"> 正確 </c:if> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:set var="i" value="10" scope="page"></c:set> <!-- var 表示判斷的結果 --> <c:if test="${i == 10 }" var="x" scope="page"> 正確 </c:if> ${x } </body> </html>
6、<c:choose>標籤
<c:choose>標籤用於指定多個條件選擇的組合邊界,它必須和<c:when>和<c:otherwise>標籤一塊兒使用。使用<c:choose>標籤、<c:when>和<c:otherwise>這三個標籤,能夠構造相似「if-else」的複雜條件判斷結構
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:set var="i" value="10" scope="page"></c:set> <c:choose> <c:when test="${i ==10 }"> i的值是10 </c:when> <c:otherwise> i的值不等於10 </c:otherwise> </c:choose> </body> </html>
7、<c:foreach>標籤
<c:foreach>標籤用於對一個集合對象中的元素進行循環迭代操做,或者按照指定的次數重複迭代標籤體中的內容。
屬性名 | 是否支持EL | 屬性類型 | 屬性描述 |
var | × | String | 指定將當前迭代到的元素保存到page這個web域中的屬性名稱 |
varstatus | × | String | 記住用於保存迭代信息的對象 |
items | √ | 任何支持的類型 | 將要迭代的集合對象 |
begin | √ | int | 若是指定items屬性,就從集合中的第begin個元素開始進行迭代,begin的索引值從0開始編碼;若是沒有指定items屬性,就從begin指定的值開始迭代,直到end值結束迭代 |
end | √ | int | 參看begin屬性的描述 |
step | √ | int | 指定迭代的步長 |
示例:遍歷數組
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- for(String s:str[]){ } --> <% String[] str = {"哈哈","呵呵"}; request.setAttribute("str", str); %> <c:forEach var="s" items="${str}" > ${s} </c:forEach> </body> </html>
示例:遍歷List集合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- for(String s:str[]){ } --> <% List<String> list = new ArrayList<String>(); list.add("哈哈"); list.add("呵呵"); list.add("嘻嘻"); request.setAttribute("list",list); %> <c:forEach var="i" items="${list}" > ${i} </c:forEach> </body> </html>
示例:遍歷Map集合
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- for(String s:str[]){ } --> <% Map<String,String> map = new HashMap<String,String>(); map.put("a", "aa"); map.put("b", "bb"); request.setAttribute("map",map); %> <c:forEach var="entry" items="${map}" > ${entry.key } ${entry.value} </c:forEach> </body> </html>
示例:從1到10遍歷
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:forEach var="i" begin="1" end="10" step="1"> ${i} </c:forEach> </body> </html>
示例:計算從1加到100的和
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:set var="sum" value="0" scope="page"></c:set> <c:forEach var="i" begin="1" end="100" step="1"> <c:set var="sum" value="${sum+i}" scope="page"></c:set> </c:forEach> ${sum } </body> </html>
varStatus屬性
記錄迭代相關的信息
屬性 | 類型 | 意義 |
index | number | 如今指到成員的索引 |
count | number | 總共指到成員的總數 |
first | boolean | 如今指到的成員是否爲第一個成員 |
last | boolean | 如今指到的成員是否爲最後一個成員 |
示例:遍歷10到100的偶數,每到第三個數,顯示爲紅色
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:forEach var="i" begin="10" end="100" step="2" varStatus="status"> <c:choose> <c:when test="${ status.count %3 ==0 }"> <font color="red">${i }</font> </c:when> <c:otherwise> ${i } </c:otherwise> </c:choose> </c:forEach> </body> </html>
8、<c:param>標籤
在jsp頁面進行URL的相關操做時,常常須要在URL地址後面附加一些參數。<c:param>標籤能夠嵌套在<c:import>和<c:url>以及<c:redirect>標籤內,爲這些標籤所使用的URL地址附加參數。
<c:param>標籤在爲一個URL地址附加參數的時候,會自動對參數值進行URL編碼。
<c:param name="" value=""></c:param>
9、<c:import>標籤
名稱 | 說明 | EL | 類型 | 必須 | 默認值 |
url | 一文件被包含的地址 | √ | String | 是 | 無 |
context | 虛擬路徑 | √ | String | 否 | 無 |
var | 存儲被包含文件的內容(以String類型存入) | × | String | 否 | 無 |
scope | var變量的jsp範圍 | × | String | 否 | page |
charEncoding | 被包含文件以內容的編碼格式 | √ | String | 否 | 無 |
varReader | 存儲被包含文件的內容(以Reader類型存入) | × | String | 否 | 無 |
haha.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'haha.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 哈哈 </body> </html>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 起到包含的效果 --> <c:import url="/haha.jsp"></c:import> </body> </html>
將頁面包含在變量之中
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 起到包含的效果 --> <c:import url="/haha.jsp" var="i" scope="page"></c:import> <!-- 將頁面保存在變量i之中 --> ${i } </body> </html>
傳遞參數
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'haha.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> ${param.haha} 哈哈 </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <!-- 起到包含的效果 --> <c:import url="/haha.jsp" var="i" scope="page"> <c:param name="haha" value="haha"></c:param> </c:import> <!-- 將頁面保存在變量i之中 --> ${i } </body> </html>
10、<c:url>標籤
<c:url>標籤用於在jsp頁面中構造一個URL地址,其主要目的在於實現URL重寫。URL重寫就是將會話標識號以參數形式附加到URL地址的後面。
其實,就是進行session的追蹤。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JSTL標籤庫</title> </head> <body> <c:url var="i" value="/haha.jsp"></c:url> <a href="${i }">haha.jsp</a> </body> </html>
11、<c:redirect>標籤
用於實現請求重定向。
屬性名 | 是否支持EL | 屬性類型 | 屬性描述 |
url | √ | String | 指定要轉發或重定向到的目標資源的URL地址 |
context | √ | String | 當要使用相對路徑重定向到哦同一個服務器下的其餘web應用程序中的資源的時候,context屬性指定其餘web應用程序的名稱 |