Jsp&Servlet 重定向、請求轉發與絕對路徑的問題
阿新 • • 發佈:2019-01-08
一、重定向:通知瀏覽器重新發送至xxx的請求。
1、發生場景:
(1)response.sendRedirect("xxx");
(2)JSP頁面的 src 屬性;
(3)JSP表單的 action 屬性;
2、引數問題:
重定向只是告訴瀏覽器傳送請求URL,沒有攜帶任何引數。
3、絕對路徑:
(1)例如:
例如:
內部的轉發,轉來轉去都是在某個project內部,所以不需要手動宣告專案名。
response.sendRedirect("/xxx");
其中的“/”表示“http://伺服器ip:埠/”,比如:http://localhost:8080/。【注意,用該方法訪問會報錯404,因為訪問結果的url是:http://localhost:8080/xxx,在這裡沒有宣告專案名。】
所以一般需要改成response.sendRedirect("/專案名/xxx")
(2)如果是jsp頁面需要重定向可以用“${pageContext.request.contextPath}”,
(3)如果是伺服器重定向用“request.getContextPath()”:<script type="text/javascript" src="${pageContext.request.contextPath}/jquery-3.1.1.js"></script>
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);
三、總結:主要記得
1、重定向的 / 表示:http://伺服器ip:埠/
2、請求轉發的 / 表示:http://伺服器ip:埠/專案名
怎麼記憶呢,很簡單,重定向是瀏覽器發來的,只知道發到某個伺服器,但是不知道發到伺服器的哪個project,所以需要自己用程式碼宣告; 而請求轉發是伺服器某個project