【问题标题】:Jetty redirect and context path码头重定向和上下文路径
【发布时间】:2014-07-31 23:31:22
【问题描述】:

我有一个在嵌入式码头服务器上运行的应用程序。我已经定义了上下文路径:

ServletContextHandler context =...
context.setContextPath("/dev");

我可以正确访问我的应用http://application.com:8080/dev

当我使用 HttpServletResponse 的 sendRedirect 函数时:

resp.sendRedirect("/login");

形成的 URL 未使用应用程序上下文。它正在返回http://application.com:8080/login insetad of http://application.com:8080/dev/login

如何配置这条路径?

【问题讨论】:

    标签: java servlets jetty


    【解决方案1】:

    当您调用sendRedirect() 时,其位置具有前导“/”,它始终相对于服务器根目录, 相对于应用程序上下文。要实现您想要的,您必须自己附加上下文路径,例如:

    response.sendRedirect(request.getContextPath() + "/login");
    

    为了让它在所有情况下都能工作,最好对其进行编码:

    response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + "/login"));
    

    【讨论】:

      【解决方案2】:

      试试

      resp.sendRedirect("login");
      

      详情: 如果位置是相对的 如果没有前导“/”,容器会将其解释为相对于 当前请求 URI。如果位置与前导相对 '/' 容器将其解释为相对于 servlet 容器根。 如果该位置与两个前导“/”相关,则容器会解释 它作为网络路径参考(参见RFC 3986: Uniform Resource Identifier (URI): Generic Syntax)。

      【讨论】:

        猜你喜欢
        • 2019-10-04
        • 2021-02-03
        • 2012-10-16
        • 1970-01-01
        • 2018-11-18
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 2011-01-02
        相关资源
        最近更新 更多