3

我有一个小服务程序。我将这个 servlet 作为http://someDomain/MyServlet/URLPattern. 在doGet这个 servlet 的方法中,我将转发到 WEB-INF 文件夹下的 JSP 页面。下面是代码,

request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);

在 index.jsp 页面中,我正在使用POST方法访问另一个 URL(servlet)。

doPost目标 servlet 的方法中,正在referer使用request.getHeader("referer"))

这会将值打印为

http://someDomain/MyServlet/URLPattern

我认为它会返回http://someDomain/../index.jsp,因为这是触发目标 URL 的实际点。

我想了解这种行为。如果有人可以通过授权来源获得解释行为的答案,那将有很大帮助。

以上问题与forward. 行为是sendRedirect什么,价值是什么referer

4

1 回答 1

3

转发完全发生在服务器端,浏览器不知道也不关心它。

转发就像服务器端逻辑中的内部方法调用。因此,您在 URL 处http://someDomain/MyServlet/URLPattern,并且使用多个服务器端组件(一个 servlet、一个 JSP)来回答浏览器向 URL 发送的唯一 GET 请求http://someDomain/MyServlet/URLPattern

浏览器唯一知道的是它向这个 URL 发送了一个 GET 请求,并得到了响应。所以下一个请求的引用者将是这个 URL。

打个比方,假设你在亚马逊买了一本书,我问你:那本书是在哪里买的?你会回答“在亚马逊”,而不是“在亚马逊旧金山 5 号仓库的 453 号房间,因为那不关你的事:只有亚马逊知道。你在亚马逊买了一本书,得到了这本书. 亚马逊内部做了什么给你寄这本书是未知的。

在这个故事中,你是浏览器,亚马逊是服务器。

sendRedirect()完全不同。您向服务器发送第一个请求,服务器使用 sendRedirect() 向您发送包含Location指向另一个 URL 的标头的 HTTP 响应。然后浏览器向这个其他 URL 发送第二个请求。

于 2013-08-20T09:04:41.793 回答