1. 程式人生 > >Jsp&Servlet 重定向、請求轉發與絕對路徑的問題

Jsp&Servlet 重定向、請求轉發與絕對路徑的問題

一、重定向:通知瀏覽器重新發送至xxx的請求。

1、發生場景:

(1)response.sendRedirect("xxx");

(2)JSP頁面的 src 屬性;

(3)JSP表單的 action 屬性;

2、引數問題:

重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引數。

3、絕對路徑:

(1)例如:

response.sendRedirect("/xxx");

其中的“/”表示“http://伺服器ip:埠/”,比如:http://localhost:8080/。【注意,用該方法訪問會報錯404,因為訪問結果的url是:http://localhost:8080/xxx,在這裡沒有宣告專案名。】

所以一般需要改成response.sendRedirect("/專案名/xxx")

(2)如果是jsp頁面需要重定向可以用“${pageContext.request.contextPath}”,

<script type="text/javascript" src="${pageContext.request.contextPath}/jquery-3.1.1.js"></script>

(3)如果是伺服器重定向用“request.getContextPath()”:

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

 

二、請求轉發:伺服器ProjectA將請求轉發給伺服器ProjectA其他的應用程式。

1、發生場景:

(1)request.getRequestDispatcher("xxx.jsp").forward(request, response);

2、引數問題:

伺服器內部的轉發,可以將Request域的引數轉發到下一個服務端程式。

3、絕對路徑:

例如:

request.getRequestDispatcher("/xxx.jsp").forward(request, response);

其中的“/”表示“http://伺服器ip:埠/專案名/”,按照該方式訪問的url就是:

http://localhost:8080/Project1/xxx.jsp。

如果是伺服器內部跳轉使用如下方式:

request.getRequestDispatcher("/專案名/xxx.jsp").forward(request, response);

訪問的url就變成:http://localhost:8080/Project1/Project1/xxx.jsp【同樣404報錯】

 

三、總結:主要記得

1、重定向的 / 表示:http://伺服器ip:埠/

2、請求轉發的 / 表示:http://伺服器ip:埠/專案名

怎麼記憶呢,很簡單,重定向是瀏覽器發來的,只知道發到某個伺服器,但是不知道發到伺服器的哪個project,所以需要自己用程式碼宣告; 而請求轉發是伺服器某個project內部的轉發,轉來轉去都是在某個project內部,所以不需要手動宣告專案名。