forward、sendRedirect及Jsp和Servlet之間的跳轉

<jsp:forward> 使用同一個 request ,是在服務器端跳轉,瀏覽器顯示的是第一個頁面的名字,由於客戶端(瀏覽器)不知道它在服務器端跳轉了。
Response.sendRedirect 是兩個不一樣的 request ,是在客戶端跳轉,瀏覽器顯示的是跳轉後的頁面的名字。由於它是從客戶端跳轉到第二個頁面的。
 
 
 
使用 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= "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")%>
redwater
daguaiwan
 
null
null
 
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 能夠使用 <jsp:forward page=」URL」 /> 或者 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 >
具體的結果我就不分析了,和第一個例子差很少的。代碼見附件。
相關文章
相關標籤/搜索