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);
三、總結:主要記得 1、重定向的 / 表示:http://伺服器ip:埠/ 2、請求轉發的 / 表示:http://伺服器ip:埠/專案名 怎麼記憶呢,很簡單,重定向是瀏覽器發來的,只知道發到某個伺服器,但是不知道發到伺服器的哪個project,所以需要自己用程式碼宣告; 而請求轉發是伺服器某個project
內部的轉發,轉來轉去都是在某個project內部,所以不需要手動宣告專案名。