【问题标题】:why the url in the browser doesn't change when the request is forwarded to another page?为什么当请求被转发到另一个页面时浏览器中的 url 没有改变?
【发布时间】:2012-03-20 10:57:59
【问题描述】:
这是一个小的jsp页面:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page errorPage="errorpage.jsp" %>
<html tags>
<%-- about to be bad ! --%>
<% int x = 10/0; %>
</html tags>
上面的页面从名为FooServlet的servlet接收请求。(它的工作只是调用上面的jsp页面)。一旦 servlet 启动,我就会看到带有消息的默认错误页面。但是浏览器中的url和servlet的一样。为什么会这样?比如错误页面的url还是http://localhost:8080/WebTesters/FooServlet。
【问题讨论】:
标签:
java
jsp
jakarta-ee
servlets
【解决方案1】:
因为这是请求转发工作方式规范的一部分。转发通过服务器将请求路由到备用资源,服务器充当客户端和备用资源之间的代理。
这与重定向不同,其中备用资源的 URL 作为标头字段发送给客户端,客户端负责进行后续调用以检索备用资源。
【解决方案2】:
因为这是请求转发而不是请求重定向。新请求只能在请求重定向中进行。
【解决方案3】:
在 sendRedirection 中,请求 url 将被更改,例如:www.sun.com(for java) 为我们提供 www.oracle.com.但在转发或包含机制中,url 不显示请求的资源。
原因是当转发/包含发生时,请求的资源位于 Web 容器内。
【解决方案4】:
如果 Request Dispatcher 请求不返回到浏览器,它直接从当前 servlet(page) 转发到 page(servlet)。所以浏览器 url 不会改变。
而在发送重定向的情况下,第一个请求是从当前页面(servlet)返回到浏览器,然后转发到指定的(页面)。所以 url 变了。