0

我需要在 Tomcat 服务器上进行以下服务器端重定向或转发: URL http://portal.customer_name需要重命名/重定向为http://portal.customer_name/customer_name。所以简而言之,一个没有上下文路径的 url 将被重定向到具有上下文路径的相同 url。我设法通过过滤器做到这一点,使用 request.getRequestDispatcher().forward(request, response); 但是这似乎不适用于阀门。

到目前为止,我得到了以下信息:

public void invoke(Request request, Response response) throws IOException, ServletException {
    String context = getForwardpath(request);
    request.getRequestDispatcher(context).forward(request, response);
    this.getNext().invoke(request, response);
}

private String getForwardpath(Request rq){
    String context = rq.getServletContext().getContextPath();
    /.../
    return context;
}

我部署了一些似乎接收原始 url 但不接收重定向的 servlet。是否可以像这样进行服务器端重定向。请注意,我需要的是阀门,而不是过滤器。

4

2 回答 2

0

发帖前有没有搜到这个?谷歌提出了一篇博客文章,讨论了这个主题 wrt Tomcat,并包括这样一个 Valve 的实现,以及一个的JBoss 实现。所以我会说,“是的,这绝对是可能的。” 如果其中一个不适合您的需求,您当然至少可以使用他们的源代码来引导您朝着正确的方向前进,然后在遇到麻烦时再提出一个更具体的问题。

更新:您使用该术语的方式不存在“服务器端重定向”之类的东西。重定向意味着将 3xx 系列响应代码发送回用户代理,告诉它有关它请求的资源的一些信息。话虽这么说,我自己没有做过任何 Valve 开发,但从Valve.invoke() 的描述来看,我猜如果你只是将 Valve 放在 Tomcat 配置中足够高,你可以只修改请求 URI在途中,让它正常处理。

于 2012-12-30T17:26:56.520 回答
0

如果将请求更改为同一实例上的不同上下文,则需要 ./conf/context.xml (tomcat) 中的 crossContext="true"。

https://tomcat.apache.org/tomcat-7.0-doc/config/context.html

于 2016-08-12T07:47:45.447 回答