我有一个servlet。我正在以http://someDomain/MyServlet/URLPattern
命中这个servlet。
在这个servlet的doGet
方法中,我转发到JSP
页面存在于WEB-INF文件夹下。以下是代码,
request.getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
在index.jsp页面中,我使用POST
方法访问另一个URL(servlet)。
在目标servlet的doPost
方法中,使用referer
request.getHeader("referer"))
这会将值打印为
http://someDomain/MyServlet/URLPattern
我认为它会返回http://someDomain/../index.jsp
,因为这是
触发目标网址的实际点。
我想了解这种行为。如果有人可以获得授权来源的回答 在它解释行为的地方,它会有很大的帮助。
以上问题与forward
的行为有关。会是什么行为
对于sendRedirect
以及referer
会持有什么价值?
答案 0 :(得分:3)
前进完全发生在服务器端,浏览器并不知道并关心它。
转发就像服务器端逻辑中的内部方法调用一样。所以,你在URL http://someDomain/MyServlet/URLPattern
,并且使用多个服务器端组件(servlet,JSP)来回答浏览器发送的唯一GET请求到URL http://someDomain/MyServlet/URLPattern
。
浏览器唯一知道的是它向此URL发送了一个GET请求,并得到了回复。因此,下一个请求的引荐来源将是此URL。
为了比喻,让我们说你在亚马逊买书,我问你:你在哪里买这本书?您将在亚马逊"而不是#34;在亚马逊旧金山库房#5的#453处回答,因为那不关你的事:只有亚马逊知道这一点。你在亚马逊买了一本书,拿到了这本书。亚马逊在内部向你发送这本书的内容尚不清楚。
在这个故事中,您是浏览器,而亚马逊是服务器。
sendRedirect()
完全不同。您向服务器发送第一个请求,该服务器使用sendRedirect()来修改包含指向另一个URL的Location
标头的HTTP响应。然后,浏览器向另一个URL发送第二个请求。