4

我正在构建一个 Dropwizard 应用程序来替换旧版网络服务器,由于很多链接指向该服务器,我必须向后兼容并支持旧版服务器曾经服务的各种资源。

问题是我从与服务本身相同的目录/路径中提供了一堆静态 JS 文件。显然,您不能从单个目录同时提供两种类型(服务和静态)。所以如果我添加静态包(现在位于资源目​​录中),如下所示:

bootstrap.addBundle(new AssetsBundle("/javascript", "/media")); 

如果我对其进行评论,动态服务(从 /media/ 提供)开始返回 404,动态服务工作正常。

正如我所说,我无法更改任何静态或动态链接......有什么建议吗?

更新:

已解决,这是一个受@airborn 回答启发的工作示例,这个问题也将我指向这个模块,它声称可以一般地解决这个问题。

此示例将对所有传入请求应用过滤器,并允许您重定向到您想要的任何位置(类似于 apache 上的 .htaccess 功能)。

将以下行放在您的主要 dropwizard 类的 run 函数中(扩展的类 ** Service<AppConfiguration>**

environment.addFilter(new UrlRewriteFilter(),"/*");

把这个类放在上面类可以访问的地方

@WebFilter
public class UrlRewriteFilter implements Filter {

    @Override
    public void init(FilterConfig config) throws ServletException {
        //
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        String requestURI = request.getRequestURI();
        // Place Redirection logic here (else continues the filter chain).
        if (redirectConditionTrue)
            String newURI = ""//New URl to do to;
            req.getRequestDispatcher(newURI).forward(req, res);
        } else {
            chain.doFilter(req, res);
        }
    }

    @Override
    public void destroy() {
        //
    }
}
4

1 回答 1

4

Environment在您的班级中使用Service,您应该能够向 Jetty 添加过滤器。在这个代理过滤器中,您应该能够检测到那些 js 文件并将它们重定向到新位置。

于 2013-11-20T17:06:05.370 回答