tomcat前进阀

时间:2012-12-30 17:09:34

标签: java tomcat-valve

我需要在Tomcat服务器上重定向或转发以下服务器端:网址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。是否有可能像这样进行服务器端重定向。请注意,我需要一个阀门,而不是过滤器。

2 个答案:

答案 0 :(得分:0)

发布前你是否碰到了search for this? Google提出了一个blog post,它讨论了Tomcat的这个主题,并包含了这样一个Valve的实现,以及一个JBoss implementation的实现。所以我会说,“是的,这绝对是可能的。”如果其中一个不符合您的需求,您当然至少可以使用他们的源代码来指导您正确的方向,然后如果您遇到麻烦则返回更具体的问题。

更新:您使用该术语的方式不存在“服务器端重定向”。重定向意味着将3xx系列响应代码发送回用户代理,以告知它所请求的资源。话虽这么说,我自己没有做任何Valve开发,但是从description of Valve.invoke()开始,我猜你是否只是把阀门放在Tomcat配置中,你就可以修改请求URI了。进入并让它正常处理。

答案 1 :(得分:0)

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

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

相关问题