如何用Tomcat将所有类型的请求从ROOT转发到其他web应用程序上下文



我需要从ROOT转发所有类型的请求,即http://localhost:8080/到http://localhost:8080/myRoot

我是否需要创建一个重定向servlet?但是,我认为tomcat可以被配置成这样的行为吗?

一个简单的方法是创建一个像这样的过滤器

@WebFilter("/*")
public class RedirectFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        String uri = request.getRequestURI();
        String query = request.getQueryString();
        if (query != null) {
            uri = uri + "?" + query;
        }
        response.setStatus(301);
        response.setHeader("Location", "/myRoot" + uri);
        // Can also use response.sendRedirect(), but this does 302 by default.
    }
    // ...
}

放到Tomcat/webapps/ROOT/WEB-INF/classes/com/example/RedirectFilter.class

如果您仍然使用Tomcat 6.0或更早的版本,那么删除@WebFilter注释并相应地创建web.xml

我使用的是UrlRewriteFilter

将过滤器部署到ROOT中,并像这样修改urlrewrite.xml:

<rule>
    <from>^/$</from>
    <to type="redirect">%{context-path}/myRoot</to>
</rule>

现在它工作了。