我在embeded jetty服务器上运行了一个应用程序。我已经定义了上下文路径:
ServletContextHandler context =...
context.setContextPath("/dev");
我可以正确访问我的应用http://application.com:8080/dev
当我使用HttpServletResponse的sendRedirect函数时:
resp.sendRedirect("/login");
形成的URL未使用应用程序上下文。它正在返回http://application.com:8080/login
http://application.com:8080/dev/login
插入内容
我如何协调这条道路?
答案 0 :(得分:6)
当您使用具有前导“/”的位置调用sendRedirect()
时,它始终相对于服务器根,不到应用程序上下文。为了达到你想要的效果,你必须自己附加上下文路径,例如:
response.sendRedirect(request.getContextPath() + "/login");
为了使它适用于所有环境,最好对其进行编码:
response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/login"));
答案 1 :(得分:1)
尝试
resp.sendRedirect("login");
详细说明: 如果位置是相对的 没有领先的' /'容器将其解释为相对于 当前请求URI。如果该位置与前导相对 ' /'容器将其解释为相对于servlet容器根目录。 如果该位置是相对于两个领先的' /'容器解释 它作为网络路径参考(参见RFC 3986: Uniform Resource Identifier (URI): Generic Syntax)。