【问题标题】:How to forward all kind of request from ROOT to other web app context with Tomcat如何使用 Tomcat 将所有类型的请求从 ROOT 转发到其他 Web 应用程序上下文
【发布时间】:2011-12-08 06:27:23
【问题描述】:

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

有可能吗,我需要创建一个重定向 servlet 吗?但是,我认为可以将 tomcat 配置为这样吗?

【问题讨论】:

  • Forward 只能在应用程序的上下文中实现,但是如果你想要 redirect 那么有很多方法可以做到这一点,例如:BalusC 已经展示你是一种重定向方式。
  • @anubhava 我明白了,是的,我在 UrlRewriteFiler (code.google.com/p/urlrewritefilter) 的帮助下完成了重定向
  • @anubhava 我有一个新问题,我需要确保即使重定向 url,将显示的浏览器 url 不是重定向 url 而是原始请求 URL,即像 @ 987654324@ 而不是localhost:8080/myRoot/index.html
  • 这就是我的意思,当从一个应用上下文切换到另一个应用上下文时,forward 是不可能的。如果是 redirect 那么浏览器中的 URL 肯定会更改为新的。甚至 UrlRewriteFiler 也会有相同的行为。
  • @anubhava 但是这个网站讲述了一些关于转发的信息:raibledesigns.com/rd/entry/enhancing_your_gwt_application_with 我的意思是,我说,通过讨论,可以通过某种形式的转发将 Web 应用程序托管在根目录中(如我在urlwriter.xml 规则)

标签: tomcat servlets


【解决方案1】:

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

@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

【讨论】:

    【解决方案2】:

    我所做的是使用UrlRewriteFilter

    将过滤器部署到ROOT并修改urlrewrite.xml如下:

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

    现在它可以工作了。

    【讨论】:

    • 这也是可以的 :) 只是你不需要自己写过滤器。
    • 如果要使用'forward'而不是'redirect',需要进一步配置:首先需要在context.xml中开启crossContext,然后将这里的to规则修改为:&lt;to type="forward" context="myRoot"&gt;/&lt;/to&gt;。这种用法现在存在问题,但它可能是解决方法,请参阅github.com/paultuckey/urlrewritefilter/issues/153
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多