JSP的7個動作指令

JSP動作指令主要有如下7個:
	jsp:forward:執行頁面轉向,將請求的處理轉發到下一個頁面。
	jsp:param:用於傳遞參數,必須與其他支持參數的標籤一起使用。
	jsp:include:用於動態引入一個JSP頁面。
	jsp:plugin:用於下載JavaBean或Applet到客戶端執行。
	jsp:useBean:創建一個JavaBean的實例。
	jsp:setProperty:設置JavaBean實例的屬性值。
	jsp:getProperty:輸出JavaBean實例的屬性值。

forward指令
forward指令用於將頁面響應轉發給另外的頁面。既可以轉發給靜態的HTML頁面,也可以轉發到動態的JSP頁面,或者轉發到容器中的Servlet。
JSP的forward指令的格式如下。
對於JSP 1.0,使用如下語法:
<jsp:forward page="{relativeURL|<%=expression%>}"/> 
對於JSP 1.1以上,可使用如下語法:
<jsp:forward page="{relativeURL|<%=expression%>}">
{<jsp:param.../>} 
</jsp:forward>
第二種語法用於在轉發時增加額外的請求參數。增加的請求參數的值可以通過HttpServletRequest類的getParameter()方法獲取。
下面示例頁面使用了forward動作指令來轉發用戶請求。
程序清單:codes\02\2.2\jspPrinciple\jsp-forward.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>forward的原始頁</TITLE>
</HEAD>
<BODY>
<h3>forward的原始頁</h3>
<jsp:forward page="forward-result.jsp">
<jsp:param name="age" value="29"/>
</jsp:forward>
</BODY>
</HTML>
這個JSP頁面非常簡單,它包含了簡單的title信息,頁面中也包含了簡單的文本內容,頁面的粗體字代碼則將客戶端請求轉發到forward-result.jsp頁面,轉發請求時增加了一個請求參數:參數名爲age,參數值爲29。
在forward-result.jsp頁面中,使用request內置對象(request內置對象是HttpServletRequest的實例,關於request的詳細信息參看下一節)來獲取增加的請求參數值。
程序清單:codes\02\2.2\jspPrinciple\forward-result.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>forward結果頁</TITLE>
</HEAD>
<BODY>
<!-- 使用request內置對象獲取age參數的值 -->
<%=request.getParameter("age")%>
</BODY>
</HTML>
執行forward指令轉發請求時,客戶端的請求參數不會丟失。看下面表單提交頁面的例子,該頁面沒有任何動態的內容,只是一個靜態的表單頁,作用是將請求參數提交到jsp-forward.jsp頁。
程序清單:codes\02\2.2\jspPrinciple\form.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>提交</TITLE>
</HEAD>
<BODY>
<!-- 表單提交頁面 -->
<form id="login" method="post" action="jsp-forward.jsp">
<INPUT TYPE="text" NAME="username">
<INPUT TYPE="submit" value="login">
</FORM>
</BODY>
</HTML>
修改forward-result.jsp頁,增加輸出表單參數的代碼,修改後forward-result.jsp頁面的代碼如下:
程序清單:codes\02\2.2\jspPrinciple\forward-result.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>forward結果頁</TITLE>
</HEAD>
<BODY>
<!-- 使用request內置對象獲取age參數的值 -->
<%=request.getParameter("age")%>
<!-- 輸出username請求參數的值 -->
<%=request.getParameter("username")%>
</BODY>
</HTML>
forward-result.jsp頁面中不僅可以輸出forward指令增加的請求參數,還可以看到表單裏username表單域對應的請求參數,這表明執行forward時不會丟失請求參數。
include指令
include指令是一個動態include指令,也用於導入某個頁面,它不會導入被include頁面的編譯指令,僅僅將被導入頁面的body內容插入本頁面。
下面是include動作指令的語法格式:
<jsp:include page="{relativeURL│<%=expression%>}" flush="true"/> 
或者
<jsp:include page="{relativeURL│<%=expression%>}" flush="true"> 
<jsp:param name="parameterName" value="patameterValue"/> 
</jsp:include>
flush屬性用於指定輸出緩存是否轉移到被導入文件中。如果指定爲true,則包含在被導入文件中;如果指定爲false,則包含在原文件中。對於JSP 1.1舊版本,只能設置爲false。
對於第二種語法格式,則可在被導入頁面中加入額外的請求參數。
下面頁面使用了動態導入語法來導入指定JSP頁面。
程序清單:codes\02\2.2\jspPrinciple\jsp-include.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>jsp-include測試</TITLE>
</HEAD>
<BODY>
<!-- 使用動態include指令導入頁面 -->
<jsp:include page="scriptlet.jsp" />
</BODY>
</HTML>
上面頁面中粗體字代碼使用了動態導入語法來導入了scriptlet.jsp。表面上看,該頁面的執行效果與使用靜態include導入的頁面並沒有什麼不同。但查看jsp-include.jsp頁面生成Servlet的源代碼,可以看到如下片段:
//使用頁面輸出流,生成HTML標籤內容
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\ ">\r\n");
out.write("<HTML>\r\n");
out.write("<HEAD>\r\n");
out.write("<TITLE>jsp-include測試</TITLE>\r\n");
out.write("</HEAD>\r\n");
out.write("<BODY>\r\n");
//動態導入,直接引入scriptlet.jsp頁面
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, 
"scriptlet.jsp", out);
out.write("\r\n");
out.write("</BODY>\r\n");
out.write("</HTML>\r\n");
out.write("\r\n");
上面代碼片段中粗體字代碼顯示了動態導入的關鍵:動態導入只是使用一個include方法來插入目標頁面的內容,而不是將目標頁面完全融入本頁面中。
歸納起來,靜態導入和動態導入有如下兩點區別:
	靜態導入是將被導入頁面的代碼完全融入,兩個頁面融合成一個整體Servlet;而動態導入則在Servlet中使用include方法來引入被導入頁面的內容。
	靜態導入時被導入頁面的編譯指令會起作用;而動態導入時被導入頁面的編譯指令則失去作用,只是插入被導入頁面的body內容。
除此之外,執行include動態指令時,還可增加額外的請求參數,如下面JSP頁面所示。
程序清單:codes\02\2.2\jspPrinciple\jsp-include2.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>jsp-include測試</TITLE>
</HEAD>
<BODY>
<jsp:include page="forward-result.jsp" >
<jsp:param name="age" value="32"/>
</jsp:include>
</BODY>
</HTML>
在上面的JSP頁面中的粗體字代碼同樣使用jsp:include指令導入頁面,而且在jsp:include指令中還使用param指令傳入參數,該參數可以在forward-result.jsp頁面中使用request對象獲取。

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章