一直在烦我。
所以,我正在使用 JSP,在我实现的过滤器和扩展的 HttpServlet 中分别有这些方法(简单示例):
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
((HttpServletResponse) response).sendRedirect(((HttpServletRequest) request).getContextPath() + "/foo");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
response.sendRedirect(request.getContextPath() + "/foo");
}
在localhost:8080/app
,Filter 和 HttpServlet 都正确地将我重定向到localhost:8080/app/foo
.
但是在www.mysite.com/app
,它在 Apache 的代理下隐藏了一个tomcatserver:8080/app
如下,
RedirectPermanent /app /app/
ProxyPass /app/ http://tomcatserver:8080/app/
ProxyPassReverse /app/ http://tomcatserver:8080/app/
过滤器将我重定向到www.mysite.com/app/foo
,而 HttpServlet 要么:
- (来自同一域)显示 Tomcat 的服务器地址,将我重定向到
tomcatserver:8080/app/foo
或 - (来自域外)只是卡住了加载。
那么……是什么原因造成的?
PS:我知道从 HttpServlet 中删除request.getContextPath()
and"/"
部分可以解决问题,我不是在问这个问题。