Jetty重定向和上下文路径

时间:2014-07-31 23:31:23

标签: java servlets jetty

我在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插入内容

我如何协调这条道路?

2 个答案:

答案 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)。

相关问题