getRequestDispatcher 和sendRedirect區別及路徑問題


getRequestDispatcher是服務器內部跳轉,地址欄信息不變,只能跳轉到web應用內的網頁。 
sendRedirect是頁面重定向,地址欄信息改變,可以跳轉到任意網頁。 
這兩條網上都查得到,但看着比較亂,現提供我測試的結果(僅供參考): 
1.getRequestDispatcher分成兩種,可以用request調用,也可以用getServletContext()調用 
   不同的是request.getRequestDispatcher(url)的url可以是相對路徑也可以是絕對路徑。 
   而this.getServletContext().getRequestDispatcher(url)的url只能是絕對路徑。 
 
注:request.getRequestDispatcher(url)之所以可以使用相對路勁,是因為在getRequestDispatcher(url)方法中封裝了ServletContext.getRealPath()以獲得相應的項目根路徑,再通過字符串相加,從而可以獲得一個完整的路徑
 
 
Java代碼   收藏代碼
  1. SecondServlet  
  2.    request.setAttribute("lover", "tom");  
  3.    request.getSession().setAttribute("lovered", "joe");  
  4.   
  5.    request.getRequestDispatcher("/third?name=jay").forward(request, response);  
  6.    或  
  7.    request.getRequestDispatcher("third?name=jay").forward(request, response);  
  8.    或  
  9.    this.getServletContext().getRequestDispatcher("/third?name=jay").forward(request, response);  
  10.    

 
Java代碼   收藏代碼
  1. ThirdServlet  
  2.    PrintWriter out = response.getWriter();  
  3.    String name = request.getParameter("name");  
  4.    out.println(request.getContextPath()+"<hr/>");  
  5.    out.println("name="+name+"<hr/>");  
  6.    out.println("lover="+request.getAttribute("lover")+"<hr/>");  
  7.    out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>");  
  8.    

   結果顯示,地址欄信息仍為http://localhost:8080/Test/second,這三種方式都可以傳值到第二個Servlet。 

2.sendRedirect只能用response調用,可以用相對路徑(直接用),也可以用相對路徑(需加應用路徑) 
Java代碼   收藏代碼
  1. SecondServlet  
  2.    request.setAttribute("lover", "tom");  
  3.    request.getSession().setAttribute("lovered", "joe");  
  4.   
  5.    response.sendRedirect("third?name=jay");  
  6.    或  
  7.    response.sendRedirect(request.getContextPath()+"/third?name=jay");  
  8.    

 
Java代碼   收藏代碼
  1. ThirdServlet  
  2.    PrintWriter out = response.getWriter();  
  3.    String name = request.getParameter("name");  
  4.    out.println(request.getContextPath()+"<hr/>");  
  5.    out.println("name="+name+"<hr/>");  
  6.    out.println("lover="+request.getAttribute("lover")+"<hr/>");  
  7.    out.println("lovered="+request.getSession().getAttribute("lovered")+"<hr/>");  
  8.    

   結果顯示,地址欄信息變為http://localhost:8080/Test/third?name=jay,只有request.getAttribute("lover")獲取不到值,session范圍及url路徑后的傳值在第二個Servlet都可以獲取到值。 

Java代碼   收藏代碼
  1. response.sendRedirect("http://www.baidu.com"); 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM