Filter 从与service-Dropwizard相同的目录提供静态内容

Filter 从与service-Dropwizard相同的目录提供静态内容,filter,jersey,servlet-filters,dropwizard,static-content,Filter,Jersey,Servlet Filters,Dropwizard,Static Content,我正在构建一个Dropwizard应用程序来替换旧版Web服务器,由于有很多指向此服务器的链接,我必须向后兼容并支持旧版服务器用于服务的各种资源 问题是,我有一堆静态JS文件,它们来自与服务本身相同的目录/路径。显然,不能从一个目录同时提供这两种类型(服务和静态)。因此,如果我添加静态捆绑包(现在位于resources目录中),如下所示: bootstrap.addBundle(new AssetsBundle("/javascript", "/media")); 动态服务(从/media/

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

问题是,我有一堆静态JS文件,它们来自与服务本身相同的目录/路径。显然,不能从一个目录同时提供这两种类型(服务和静态)。因此,如果我添加静态捆绑包(现在位于resources目录中),如下所示:

bootstrap.addBundle(new AssetsBundle("/javascript", "/media")); 
动态服务(从/media/提供)开始返回404 如果我对此进行评论,动态服务可以正常工作

正如我所说,我不能改变任何链接,静态或动态。。。 有什么建议吗

更新: 解决了,这是一个受@airborn的答案启发的工作示例,这也为我指明了方向,它声称可以从总体上解决这个问题

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

在主dropwizard类(扩展**
Service
**

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() {
        //
    }
}

在您的
服务
类中使用
环境
,您应该能够向Jetty添加一个筛选器。在这个代理筛选器中,您应该能够检测到这些js文件并将它们重定向到新位置。

我以前看到过带有筛选器的示例,但没有使用带有Environment.addFilter的dropwizard的示例,所以没有看到这些示例正在编写的部分-谢谢!为问题附加一个更完整的示例…对于阅读本文的任何人,请注意示例UrlRewriteFilter类无论如何都不使用Url重写器-它只是一个标准的Servlet过滤器。