所有的在線參考和頭第一個JSP & Servlet的書我讀狀態RequestDispatcher的和重定向的特性(即resoponse.sendRedirect()),如:混淆的RequestDispatcher說瀏覽器地址欄並沒有改變
「請求分派器」 - 瀏覽器欄中的URL不會更改。
「重定向」 - 用戶在瀏覽器中看到新的URL。
但根據我的測試,對於RequestDispatcher,我看到URL的更改,所以我不明白它們的真正含義。
與下面的代碼,
我在
http://whatever.com/tmp3.jsp
這就是URL在瀏覽器中說。點擊按鈕來調用servlet的作爲回報它的數據轉發到服務器,然後服務器發送響應返回給瀏覽器,所以URL在瀏覽器現在說
http://whatever.com/register
所以..網址變了! (從.../tmp3.jsp到.../register)
任何人都可以向我解釋他們的意思是「瀏覽器中的URL不會改變」嗎?
實施例:
(tmp3.jsp)
<html>
<head>
</head>
<body>
${message}
<!-- click button to send request to servlet -->
<form method="POST" action="register">
<input type="submit" value="click!">
</form>
</body>
</html>
(servlet的)
package com.masatosan.tmp;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Tmp extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("message", "processed!");
String address = "/tmp3.jsp";
request.getRequestDispatcher(address).forward(request, response);
}//end doPost()
}//end class
(web.xml中片段) - 映射servlet和URL
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.masatosan.tmp.Tmp</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/register</url-pattern>
</servlet-mapping>
我會把JSP放在'/ WEB-INF'文件夾中,並且一直使用'/ register'。 – BalusC 2010-09-10 11:27:51
@BalusC:在/ WEB-INF下放置jsp文件的原因是什麼?我認爲/ WEB-INF包含類和庫,jsp文件轉到webapps/webContent/foo.jsp之類的東西? – 2010-09-10 11:32:17
隱藏JSP直接訪問。這樣你最終得到更好的URL。您已經在GET請求上向JSP文件發送請求。那麼,爲什麼不直接使用servlet作爲控制器呢?另請參閱[「JSP/Servlet的隱藏功能」](http://stackoverflow.com/questions/2523430/hidden-features-of-jsp-servlet/2525995#2525995)。更多有用的信息和鏈接可以在[Servlets標籤信息頁面](http://stackoverflow.com/tags/servlets/info)中找到。 – BalusC 2010-09-10 11:37:43