From Gossip@caterpillar

JSP/Servlet: <jsp:include>、 <jsp:forward>、<jsp:param>、<jsp:params>

 

 


您可以使用JSP動作元素(action element)<jsp:include>來於動態時期include網頁,並可搭配<jsp:param>動作元素來指定參 數給被include的網頁,被include的網頁執行完後,response的權限會交回到要求include的網頁中,使用以下這個例子來說明:
  • incDemo.jsp
<%@page contentType="text/html; charset=Big5"%> 
<%@include file="header.inc"%>
<%
String name = request.getParameter("user");
out.println(name + " 被請求的網頁歡迎您!<br>");
%>

<jsp:include page="inc.jsp" flush="true">
<jsp:param name="user" value="<%= name %>" />
</jsp:include>

<%
out.println(name + " 被請求的網頁再度歡迎您!");
%>
<%@include file="foot.inc"%>

其中header.inc與foot.inc如下:
  • header.inc
<html> 
<head><title>include demo</title></head>
<body>

  • foot.inc
</body> 
</html>

inc.jsp內容如下:
  • inc.jsp
<%@page contentType="text/html; charset=big5"%> 
<%
out.println(request.getParameter("user") +
" 被include網頁歡迎您<br>");
%>

當以http://localhost:8080/myjsp/incDemo.jsp?user=justin請求網頁時,將會傳回以下的內容:
<html>
<head><title>include demo</title></head>
<body>
    justin 被請求的網頁歡迎您!<br>
    justin 被include網頁歡迎您<br>
    justin 被請求的網頁再度歡迎您!
</body>
</html>
 

可以使用動作元素<jsp:forward>來將訊息forward至另一個網頁,forward表示 response的權限將交給被forward的對象,而不再回到發出forward的網頁,同樣的,我們也可以搭配<jsp:param> 動作元素來於forward時指定參數給被forward的對象,例如:
    <jsp:forward page="fwd.jsp">
        <jsp:param name="user" value="justin"/>
    </jsp:forward>
 

pageContext隱含物件也具有forward()與include()方法,使用的時機是方便在Scriptlet中撰寫,例如之前的範例,可以改寫為以下:

  • incDemo.jsp
<%@page contentType="text/html; charset=big5"%> 
<%@include file="header.inc"%>
<%
String name = request.getParameter("user");
out.println(name + " 被請求的網頁歡迎您!<br>");

pageContext.include("inc.jsp?user=" + name);

out.println(name + " 被請求的網頁再度歡迎您!");
%>
<%@include file="foot.inc"%>

之前曾經介紹過屬性物件的作用範圍,其中request是在同一個客戶端請求期間的作用範圍,這個範圍可以包括為了完成一個客戶端請求所必須包括的數個頁 面,例如:
<%
    String name = request.getParameter("user");
    // 作一些處理

    request.setAttribute("user", name + "+ results");
    pageContext.forward("inc.jsp");
%>

上面這個JSP網頁接收到請求之後,作一些處理之後,將結果存入request屬性作用範圍中,然後將結果forward至inc.jsp,其內容如下:
  • inc.jsp
<%@page contentType="text/html; charset=Big5"%> 
<%@include file="header.inc"%>
<%
out.println(request.getAttribute("user") +
" 在這邊顯示結果<br>");
%>
<%@include file="foot.inc"%>

在這個頁面中,我們由request中取出了"user"屬性所對應的物件,由於是屬於同一個客戶所發出請求的處理範圍,您是可以取得這個物件的,其顯 示結果將如下:
<html>
<head><title>demo</title></head>
<body>
    justin+ results 在這邊顯示結果<br>
</body>
</html>