Jsp與Servlet 重定向與轉發探究(二)

      Servlet中的請求轉發與重定向探究

a. 探究過程
b. 經驗總結


1.採用與 Jsp與Servlet 重定向與轉發探究(一) 一樣的servlet Demo,想做測試的請前往此處copy。index.jsp、servlet(ServletRequest.java 與 ServletResponse.java)與web.xml此三文件。


圖1. 修改ServletRequest.java中的代碼:

request.getRequestDispatcher("end.jsp").forward(request, response);

你會看到結果
這裏寫圖片描述

無影響!


圖2 繼續修改:

request.getRequestDispatcher(request.getContextPath()+"/end.jsp").forward(request, response);

你會看到結果:
這裏寫圖片描述

message處顯示的是: /servletForR/servletForR/end.jsp(servletForR爲我項目名)

此處報錯。


圖3 繼續修改代碼:

request.getRequestDispatcher(request.getContextPath()+"end.jsp").forward(request, response);

結果:
這裏寫圖片描述

message處顯示的是: /servletForR/servletForR.jsp


圖4 我們測試response重定向對應的servlet(ServletResponse.java):

response.sendRedirect(request.getContextPath()+"end.jsp");

少了個’/’。結果是:
這裏寫圖片描述

message處顯示的是: /servletForend.jsp

這不就是少了個‘/’所以拼接錯誤嘛!


圖5 ServletResponse.java繼續修改:

response.sendRedirect("/end.jsp");

結果是:
這裏寫圖片描述

message處顯示的是: /end.jsp

有沒有發覺!!! 和request請求轉發的區別!!!

好,我們繼續。


圖6 代碼修改:

response.sendRedirect("end.jsp");

結果是:
這裏寫圖片描述

有沒有感到很奇怪!!!

好吧,我總結下:

如果URL都是“x.jsp”。轉發和重定向指向的都是根目錄下的文件,會在根目錄下索引。

而如果有”/x.jsp”。則有很大的區別。
首先從圖2 5圖中的message 你可以看出。response的默認目錄是整個項目的上一級目錄。request默認的目錄是項目的根目錄。

3 4我們知道getContextPath()是項目名的路徑是沒有’/’結尾

因此如果以後是在根目錄,則可以選擇都不加‘/’直接“x.jsp即可”。

如果不是在根目錄,在某一文件中。建議:
重定向用 :request.getContextPath()+"/jsp_name";
請求轉發用 : /filename/jsp_name.

例:
重定向:
response.sendRedirect(request.getContextPath()+”/end.jsp”);

請求轉發:


request.getRequestDispatcher("/ns/end.jsp").forward(request, response);
(ns爲webroot下的子文件夾)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章