所有的在线参考和头第一个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