Response.sendRedirect是兩個不同的request,是在用戶端跳轉,瀏覽器顯示的是跳轉後的頁面的名字。因為它是從用戶端跳轉到第二個頁面的。
javascript:return big(this)" alt="流程圖" src="/data/attachment/portal/et2/201207/ET34910080648491.jpg">
使用forward時,由於只是發送一次request請求,request設定的屬性(setAttribute)依然能保留在下一個頁面。
使用sendRedirect時,由於發送兩次request請求,所以在下一個不能擷取request屬性。但可以通過重寫URL的方式
內容傳遞過去。
下面舉例說明:
tian.jsp
<%request.setAttribute("river","redwater");
request.setAttribute("country","daguaiwan");
%>
<jsp:forward page="fengshan.jsp" />
donglan.jsp
<%request.setAttribute("river","redwater");
request.setAttribute("country","daguaiwan");
%>
<a href=http://developer.51cto.com/art/200907/"fengshan.jsp">fengshan</a>
bama.jsp
<%request.setAttribute("river","redwater");
request.setAttribute("country","daguaiwan");
response.sendRedirect("fengshan.jsp");
%>
fengshan.jsp
<%=request.getAttribute("river")%><br/>
<%=request.getAttribute("country")%>
- http://localhost:8080/ForwardRedirect/tiane.jsp 跳轉後結果為:
- redwater
- daguaiwan
-
- http://localhost:8080/ForwardRedirect/donglan.jsp 跳轉後結果為:
- null
- null
-
- http://localhost:8080/ForwardRedirect/bama.jsp 跳轉後結果為:
- null
- null
結果分析: tiane.jsp是通過forward跳轉到fengshan.jsp的,這兩個頁面享用的是同一個request,故fengshan.jsp可以接收到tiane.jsp通過 request設定的屬性。而donglan.jsp是通過href發送了另外的request請求,bama.jsp是通過sendRedirect跳轉,用的也是另外的request請求,故fengshan.jsp不可以接收到這兩個頁面通過 request設定的屬性。 Jsp和Servlet之間的跳轉:從Jsp跳轉Servlet可以使用或者response.sendRedirect(URL)都可以,它們之間的區別上面已經說明了。
從Servlet跳轉Jsp: getRequestDispatcher的forward(request, response)方法,這裡也只是發送了一次請求,可以在下一個頁面接受request設定的屬性。 ² response.sendRedirect(URL),這裡發送了兩次請求,不可以在下一個頁面接受request設定的屬性。
例子如下: servlettiane.jsp
- <%request.setAttribute("river","redwater");
- request.setAttribute("country","daguaiwan");
- %>
- <jsp:forward page="/tiane" />
-
- servletbama.jsp
- <%request.setAttribute("river","redwater");
- request.setAttribute("country","daguaiwan");
- response.sendRedirect("/ForwardRedirect/tiane");
- %>
Tiane.java
- public class Tiane extends HttpServlet {
-
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- // response.sendRedirect("/ForwardRedirect/fengshan.jsp");
- this.getServletConfig().getServletContext()
- .getRequestDispatcher("/fengshan.jsp").forward(request, response);
- }
-
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- doGet(request, response);
- }
- }
再在web.xml中配置servlet:
- <servlet>
- <servlet-name>tiane</servlet-name>
- <servlet-class>com.dvnchina.test.Tiane</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>tiane</servlet-name>
- <url-pattern>/tiane</url-pattern>
- </servlet-mapping>