一. JSP標籤
1. 簡介
(1) 雖然我們希望JSP頁面僅用作數據顯示模塊,不要嵌套任何Java代碼引入任何業務邏輯,但
在實際開發中不引入一點業務邏輯是不可能的,但引入業務邏輯會導致頁面出現難看java代碼,如何解決?
(2) Sun公司允許用戶開發自定義標籤封裝頁面的Java代碼,以便JSP頁面不出現一行Java代碼。當然Sun公司在
JSP頁面中也內置了一些標籤(這些標籤叫做JSP標籤/動作),開發人員使用這些標籤可以完成頁面的一些常用業務
邏輯。
(3) JSP標籤也稱之爲JSP Action(JSP動作)元素,它用於在JSP頁面中提供業務邏輯功能。
2. JSP標籤的作用
(1) JSP標籤的作用:用於替換JSP腳本。
(2) 腳本可以完成以下內容:
① 流程判斷(if ,for循環);
② 跳轉頁面(轉發,重定向);
3. JSP標籤的分類
(1) 內置標籤(動作標籤):不需要在JSP頁面導入標籤。
(2) JSTL標籤(外置標籤):需要在JSP頁面中導入標籤。
(3) 自定義標籤:開發者自行定義,需要在JSP頁面導入標籤。
二. JSP動作標籤
1. <jsp:include>標籤
(1) <jsp:include>標籤是包含標籤,用於把另外一個資源的輸出內容插入進當前JSP頁面的輸出內容之中,
這種在JSP頁面執行時的引入方式稱之爲動態引入。
(2) 語法:<jsp:include page="relativeURL | <%=expression%>" flush="true|false" />
① page屬性用於指定被引入資源的相對路徑,它也可以通過執行一個表達式來獲得。
② flush屬性指定在插入其他資源的輸出內容時,是否先將當前JSP頁面的已輸出的內容刷新到客戶端,默認爲
false。
(3) <jsp:include>動作標籤與include指令的區別
① 語法不同:
靜態包含語法:<%@inclue file="被包含的頁面"%>使用file屬性指定被引入資源;動態包含語法:<jsp:include page="被包含的頁面">使用page屬性指定被引入資源;
② 參數傳遞不同
靜態包含不能向被包含頁面傳遞參數,因爲文件的寫法是不能帶參數的;
動態包含可以向被包含頁面傳遞參數;
③ 原理不同
靜態包含:先合併再翻譯;include指令是靜態引入,涉及到的2個JSP頁面會被翻譯成一個servlet,其內容是在
源文件級別進行合併;
動態包含:先翻譯再合併;<jsp:include>標籤涉及到的2個JSP頁面會被翻譯成2個servlet,這2個servlet的內容
在執行時進行合併。
(4) 注意事項:
① 不管是<jsp:include>標籤,還是include指令,它們都會把兩個JSP頁面內容合併輸出,所以這兩個頁面不要
出現重複的HTML全局架構標籤,否則輸出給客戶端的內容將會是一個格式混亂的HTML文檔。
② <jsp:include>原理:包含與被包含的頁面先各自翻譯成java源文件,然後在運行時合併在一起。(先翻譯再
合併),是動態包含;而指令是先合併再翻譯。
2. <jsp:forward>標籤
(1) <jsp:forward>標籤是轉發標籤,用於把請求轉發給另外一個資源。
(2) 語法:<jsp:forward page="relativeURL | <%=expression%>" />。
page屬性用於指定請求轉發到的資源的相對路徑,它也可以通過執行一個表達式來獲得。
3. <jsp:param>標籤
(1) <jsp:param>標籤是參數標籤,當使用<jsp:include>和<jsp:forward>標籤引入或將請求轉發給其它資源
時,可以使用<jsp:param>標籤向這個資源傳遞參數。
(2)語法:
①語法一:
<jsp:include page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
②語法二:
<jsp:forward page="relativeURL | <%=expression%>">
<jsp:param name="parameterName" value="parameterValue|<%= expression %>" />
</jsp:include>
(3) 注意事項:
<jsp:param>標籤的name屬性用於指定參數名,value屬性用於指定參數值。在<jsp:include>和
<jsp:forward>標籤中可以使用多個<jsp:param>標籤來傳遞多個參數。
4.實例
(1) action.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>動作標籤</title>
</head>
<body>
<%--轉發 --%>
<%
//request.getRequestDispatcher("/09.action2.jsp?name=eric").forward(request,response);
%>
<%-- 參數 --%>
<jsp:forward page="/09.action2.jsp">
<jsp:param value="jacky" name="name"/>
<jsp:param value="123456" name="password"/>
</jsp:forward>
</body>
</html>
(2) action1.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>動作標籤</title>
</head>
<body>
<%--包含 --%>
<jsp:include page="/common/header.jsp">
<jsp:param value="lucy" name="name"/>
</jsp:include>
<%-- <%@include file="common/header.jsp" %> --%>
主頁的內容
</body>
</html>
(3) action2.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>動作標籤</title>
</head>
<body>
<%=request.getParameter("name")%><br/>
<%=request.getParameter("password")%>
</body>
</html>
(4) 運行結果