如何使用正则表达式将所有请求路由到servlet *除了*静态文件“/(images|css|jsp|html)/.*”

时间:2012-12-21 15:51:14

标签: regex url-rewriting guice guice-servlet

使用google guice,我希望所有服务器请求(/ *)都流向我的servlet文件,除了静态内容。如果需要,我很擅长将静态内容放入/ static文件夹。我只需要向root用户提取servlet请求。

以下是有效的代码:

//Holds @GET @POST, etc
bind(MyTemplateResource1.class);
bind(MyTemplateResource2.class);

// this serves MyTemplateResource1..2... and any other servlet files
serve("/server/*").with(GuiceContainer.class); 

// this serves the static content
serveRegex("/(images|css|html)/.*").with(GuiceContainer.class); 

但是,如果我取出/ server我的静态内容也会被路由到MyTemplateResource。 e.g:

serve("/*").with(GuiceContainer.class); 

在将Servlet内容路由到一个或多个Resource文件时允许所有静态内容自由流动的最佳方法是什么,即使servlet url可以从根目录开始?

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题(我实际上是谷歌搜索正则表达式面具并找到了你的问题),基本上是这样的:

  1. 为参数创建地图
  2. 添加WebPageContentRegex的引用,并添加静态文件regexps
  3. 确保使用过滤器代替服务,并传递地图
  4. 在代码中,它可以这样工作:

        bind(HostController.class, LoginController.class, ConfirmInviteController.class, LogoutController.class, ResetPasswordController.class, ChangePasswordController.class);
    
        Map<String, String> initParams = new TreeMap<String, String>();
    
        initParams.put("com.sun.jersey.config.property.WebPageContentRegex", "/.*\\.(jpg|ico|png|gif|html|id|txt|css|js)");
    
        filter("/*").through(GuiceContainer.class, initParams);
    

    希望有所帮助