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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

servlet中请求转发(forword)与重定向(sendredirect)

發布時間:2023/12/13 综合教程 34 生活家
生活随笔 收集整理的這篇文章主要介紹了 servlet中请求转发(forword)与重定向(sendredirect) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請求轉發和重定向

request.setAttribute("test","hello");
request.getRequestDispatcher("/test.jsp").forword(request,response); 
response.sendRedirect("test.jsp");

顯示結果:

1、當用request.getRequestDispatcher("/test.jsp").forword(request,response); 請求轉發后,結果頁面輸出:hello
2、當用response.sendRedirect("test.jsp");重定向后,結果頁面輸出:null

第一種 request.getRequestDispatcher().forward(request,response):

1、屬于轉發,也是服務器跳轉,相當于方法調用,在執行當前文件的過程中轉向執行目標文件,兩個文件(當前文件和目標文件)屬于同一次請求,前后頁共用一個request,可以通過此來傳遞一些數據或者session信息,request.setAttribute()和request.getAttribute()。

2、在前后兩次執行后,地址欄不變,仍是當前文件的地址。

3、不能轉向到本web應用之外的頁面和網站,所以轉向的速度要快。

4、URL中所包含的“/”表示應用程序(項目)的路徑。

第二種 response.sendRedirect():

1、屬于重定向,也是客戶端跳轉,相當于客戶端向服務端發送請求之后,服務器返回一個響應,客戶端接收到響應之后又向服務端發送一次請求,一共是2次請求,前后頁不共用一個request,不能讀取轉向前通過request.setAttribute()設置的屬性值。

2、在前后兩次執行后,地址欄發生改變,是目標文件的地址。

3、可以轉向到本web應用之外的頁面和網站,所以轉向的速度相對要慢。

4、URL種所包含的"/"表示根目錄的路徑。

特殊的應用:對數據進行修改、刪除、添加操作的時候,應該用response.sendRedirect()。如果是采用了request.getRequestDispatcher().forward(request,response),那么操作前后的地址欄都不會發生改變,仍然是修改的控制器,如果此時再對當前頁面刷新的話,就會重新發送一次請求對數據進行修改,這也就是有的人在刷新一次頁面就增加一條數據的原因。

如何采用第二種方式傳遞數據:

1、可以選擇session,但要在第二個文件中刪除;

2、可以在請求的url中帶上參數,如"add.htm?id=122"

典型的應用場景:
1.forward:訪問Servlet處理業務邏輯,然后forward到jsp顯示處理結果,瀏覽器里URL不變
2.redirect:提交表單,處理成功后redirect到另一個jsp,防止表單重復提交,瀏覽器里URL變了

轉發和重定向的路徑問題

1)使用相對路徑在重定向和轉發中沒有區別
2)重定向和請求轉發使用絕對路徑時,根/路徑代表了不同含義
重定向response.sendRedirect("xxx")是服務器向客戶端發送一個請求頭信息,由客戶端再請求一次服務器。/指的Tomcat的根目錄,寫絕對路徑應該寫成"/當前Web程序根名稱/資源名" 。如"/WebModule/login.jsp","/bbs/servlet/LoginServlet"
轉發是在服務器內部進行的,寫絕對路徑/開頭指的是當前的Web應用程序。絕對路徑寫法就是"/login.jsp"或"/servlet/LoginServlet"。

總結:以上要注意是區分是從服務器外的請求,還在是內部轉發,從服務器外的請求,從Tomcat根寫起(就是要包括當前Web的根);是服務器內部的轉發,很簡單了,因為在當前服務器內,/寫起指的就是當前Web的根目錄。

需要用request.getContextPath() 獲取項目名

//request.getRequestDispatcher("/homePage.jsp").forward(request, response);
  response.sendRedirect(request.getContextPath()+"/homePage.jsp");           //request.getContextPath()獲取項目根路徑/Task01

總結

以上是生活随笔為你收集整理的servlet中请求转发(forword)与重定向(sendredirect)的全部內容,希望文章能夠幫你解決所遇到的問題。

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