請求內部轉發與重定向區別


 


1.請求內部轉發

     使用:req.getRequestDispatcher(" uri").forward(reqresp);
 
     1、多個 Servlet 共享一個request對象(重點)
    2、一次請求,當轉發結束的時候也就是業務處理完畢的時候request對象會被銷毀
    3、地址欄不改變
    注意在執行轉發完畢后會繼續執行代碼,但是沒有意義,所以一般在轉發后面加return
    4、request對象的作用域(重中之重)
            作用域:共享request對象的Servlet
            作用域中存取數據:
                        req.setAttribute(key,value)
                        req.getAttribute(key)

                        req.removeAttribute(key)

請求內部轉發實例演示

  1. @Override
  2. protectedvoid service(HttpServletRequest req,HttpServletResponse resp)
  3. throws ServletException,IOException{
  4. //設置響應編碼格式
  5. resp.setCharacterEncoding("utf-8");
  6. resp.setContentType("text/html;charset=utf-8");
  7. //設置請求字符編碼格式
  8. req.setCharacterEncoding("utf-8");
  9. //請求轉發(獲取用戶數據):
  10. System.out.println(req.getParameter("uname"));
  11. System.out.println(req.getParameter("pwd"));
  12. //開始請求轉發
  13. req.setAttribute("405","聽說支付寶要收費了,趕緊給我轉賬");
  14. req.getRequestDispatcher("tr.action").forward(req, resp);
  15. //開始重定向
  16. resp.sendRedirect("http://www.baidu.com");
  17. return;
  18. }
  1. @Override
  2. protectedvoid service(HttpServletRequest req,HttpServletResponse resp)
  3. throws ServletException,IOException{
  4. //獲取用戶數據
  5. System.out.println(req.getParameter("uname")+"-----tr.action");
  6. System.out.println(req.getParameter("pwd")+"-----tr.action");
  7. System.out.println(req.getAttribute("405"));
  8. resp.getWriter().write("哈哈");
  9. }
 
2.重定向
             使用:resp.sendRedirect("uri");
            特點:
                地址欄改變
                 兩次請求,兩個request對象
 
 
3.重定向/請求轉發時參數URI問題
3.1重定向
項目目錄                                             
 
             
main.jsp               
 
在main.jsp中進行重定向
response.sendRedirect("/login.jsp")-->代表localhost:8080/login.jsp
response.sendRedirect("login.jsp")-->代表localhost:8080/Admin/login.jsp
response.sendRedirect("checkOper")-->代表localhost:8080/Admin/checkOper
response.sendRedirect("/checkOper")-->代表localhost:8080/checkOper
response.sendRedirect("/Exercise_Jsp/login.jsp")-->代表localhost:8080/Exercise_Jsp/login.jsp
response.sendRedirect("/Exercise_Jsp/checkOper")-->代表localhost:8080/Exercise_Jsp/checkOper
 
3.2請求轉發
checkOper中轉到Oper下的selectAll.jsp
 
 

請求內部轉發和重定向圖解

總結:

請求轉發是一次請求,地址欄不改變,多個Sevrlet共享一個request
重定向是兩次請求,地址欄改變,兩個request對象
 
 
 
 
 
 
 
 
 
 
 


免責聲明!

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



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