日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别

發布時間:2025/3/20 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java Web開發中,采用MVC模式的時候,在控制器完成模型的調用之后會選擇界面對用戶響應,用常有2種方式
1,通過response對象的sendRedirect方法重定向:

response.sendRedirect("login.jsp");

2,通過RequestDispatcher對象的forward方法:

<!--請求轉發--> RequestDispatcher rd = request.getRequestDispatcher("login.jsp"); rd.forward(request,response);

3,使用jsp動作指令的方法:與第2中方式相同

<jsp:forward page="login.jsp"></jsp:forward>

現在來說一下二者的區別:
1),過程不同:response.sendRedirect(“login.jsp”)方式相當于瀏覽器接收到了響應之后又向服務器發送了一次請求,所以相當于兩次請求。request.getRequestDispatcher(“login.jsp”)方式相當于方法調用,在執行當前文件的過程中轉向執行目標文件,兩個文件(當前文件和目標文件)屬于同一次請求。

2)地址欄不同:response.sendRedirect(“login.jsp”)方式下用戶在瀏覽器地址欄中看到的是目標文件的地址,即地址欄會變,request.getRequestDispatcher()方式下用戶在瀏覽器地址欄中看到的是當前文件的地址,即地址欄不變

3)數據共享角度:request.getRequestDispatcher()是請求轉發,前后頁面共享一個request ;
response.sendRedirect()是重新定向,前后頁面不是一個request。
sendRedirect兩次提交,forword一次提交

如果需要把請求轉移到另外一個Web 工程中的某個地址,可以按下面的做法:

1. 獲得另外一個Web App的ServletConext對象(currentServletContext.getContext(uripath)). 2. 調用ServletContext.getRequestDispatcher(String url)方法。 eg: ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);

4),參數傳遞方面:
response.sendRedirect(url)跳轉到指定的URL地址,產生一個新的request,所以要傳遞參數只有在url后加參數,如: url?id=1.
request.getRequestDispatcher(url).forward(request,response)是直接將請求轉發到指定URL,所以該請求 能夠直接獲得上一個請求的數據,數據可以用request.setAttribute()方法封裝在request里面。也就是說采用請求轉發,request對象始終存在,不會重新創建。而
sendRedirect()會新建request對象,所以上一個request中的數據會丟失。

5),功能上:response.sendRedirect()方法能夠定向到當前應用程序的其他資源,而且還能夠重定向到同一個站點上的其他應用程序的資源,甚至是使用絕對URL重定向到其他站點的資源:

response.sendRedirect(“http://www.baidu.com”)

request.getRequestDispatcher(“login.jsp”)方法只能在同一個web應用程序內的資源之間轉發請求

response.sendRedirect(“login.jsp”);和request.getRequestDispatcher(“login.jsp”);的請求過程如下:

redirect會首先發一個response給瀏覽器, 然后瀏覽器收到這個response后再發一個requeset給服務器, 然后 服務器發新的response給瀏覽器. 這時頁面收到的request是一個新從瀏覽器發來的.

forward 發生在服務器內部, 在瀏覽器完全不知情的情況下發給了瀏覽器另外一個頁面的response. 這時頁面 收到的request不是從瀏覽器直接發來了,可能己經用request.setAttribute在request里放了數據.在轉到的頁
面可直接用request.getAttribute獲得數據。

總結

以上是生活随笔為你收集整理的JSP中页面跳转response.sendRedirect()和request.getRequestDispatcher()的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。