与Jersey、Guice配置一起提供静态文件

与Jersey、Guice配置一起提供静态文件,jersey,jetty,guice,guice-servlet,Jersey,Jetty,Guice,Guice Servlet,我有以下配置作为Guice模块(而不是web.xml) 公共类RestModule扩展了JerseyServletModule{ @凌驾 受保护的void configureServlets(){ 安装(新模块(“myDB”); 过滤器(“/*”)到(PersistFilter.class); 绑定(CustomerList.class); 绑定(OrdersList.class); 绑定(MessageBodyReader.class).to(JacksonJsonProvider.class

我有以下配置作为Guice模块(而不是web.xml)

公共类RestModule扩展了JerseyServletModule{
@凌驾
受保护的void configureServlets(){
安装(新模块(“myDB”);
过滤器(“/*”)到(PersistFilter.class);
绑定(CustomerList.class);
绑定(OrdersList.class);
绑定(MessageBodyReader.class).to(JacksonJsonProvider.class);
绑定(MessageBodyWriter.class).to(JacksonJsonProvider.class);
ImmutableMap设置=ImmutableMap.of(
JSONConfiguration.FEATURE_POJO_映射,“true”
);
使用(GuiceContainer.class,settings)提供(“/*”);
}
}
为REST端点提供服务已经非常有效了

当用户请求时,我想从/webapp/index.html提供一个静态html文件

其余的服务在或

我不使用web.xml。Web服务器是jetty

请参见: 并将适当的参数添加到
设置
对象中。比如:

ImmutableMap设置=ImmutableMap.of(
JSONConfiguration.FEATURE_POJO_映射,“true”
“com.sun.jersey.config.property.WebPageContentRegex”、“/.*html”);
请参见: 并将适当的参数添加到
设置
对象中。比如:

ImmutableMap设置=ImmutableMap.of(
JSONConfiguration.FEATURE_POJO_映射,“true”
“com.sun.jersey.config.property.WebPageContentRegex”、“/.*html”);

正如我在评论中所说,我几乎一整天都在为这个问题挣扎。康迪特链接到正确的答案,但为了完整性,这里是对我有用的。我正在使用Tomcat、jersey(和jersey guice)1.17.1和guice 3.0

虽然我使用的是Tomcat,但困难的部分(提供静态资源)应该没有那么大的不同

public class JerseyConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new JerseyServletModule() {
            @Override
            protected void configureServlets() {

                // Bind  REST resources
                bind(HomeController.class);
                bind(AboutController.class);

                Map<String, String> params = new HashMap<String, String>();
                params.put("com.sun.jersey.config.property.WebPageContentRegex",
                    "/(images|css)/.*");
                filter("/*").through(GuiceContainer.class, params);
            }
        });
    }
}
我将此设置设置为正则表达式:

"/(images|css)/.*"
…因为我的静态资源位于src/main/webapp/images和src/main/webapp/css(我使用的是maven项目结构)。例如:

http://localhost:8080/myapp/images/logo.png
(这仅适用于jersey 1.7.x-如果您使用jersey 2.x,则应使用键“jersey.config.servlet.filter.staticContentRegex”或理想情况下使用Java常量ServletProperties.filter\u STATIC\u CONTENT\u REGEX)

最后,最后一行:

filter("/*").through(GuiceContainer.class, params);
您应该使用:filter(“/*”)通过,而不是使用(“/*”)与


如果您提出了一个不同的解决方案,我想看看它是什么。

正如我在评论中所说的,我几乎整天都在为这个问题苦苦挣扎。condit链接到了正确的答案,但为了完整性,下面是对我有效的方法。我使用的是Tomcat、jersey(和jersey guice)1.17.1和guice 3.0

虽然我使用的是Tomcat,但困难的部分(提供静态资源)应该没有那么大的不同

public class JerseyConfig extends GuiceServletContextListener {
    @Override
    protected Injector getInjector() {
        return Guice.createInjector(new JerseyServletModule() {
            @Override
            protected void configureServlets() {

                // Bind  REST resources
                bind(HomeController.class);
                bind(AboutController.class);

                Map<String, String> params = new HashMap<String, String>();
                params.put("com.sun.jersey.config.property.WebPageContentRegex",
                    "/(images|css)/.*");
                filter("/*").through(GuiceContainer.class, params);
            }
        });
    }
}
我将此设置设置为正则表达式:

"/(images|css)/.*"
…因为我的静态资源位于src/main/webapp/images和src/main/webapp/css(我使用的是maven项目结构)。例如:

http://localhost:8080/myapp/images/logo.png
(这仅适用于jersey 1.7.x-如果您使用jersey 2.x,则应使用键“jersey.config.servlet.filter.staticContentRegex”或理想情况下使用Java常量ServletProperties.filter\u STATIC\u CONTENT\u REGEX)

最后,最后一行:

filter("/*").through(GuiceContainer.class, params);
您应该使用:filter(“/*”)。through而不是service(“/*)。with


如果您提出了不同的解决方案,我想看看它是什么。

我知道中也有类似的答案,但我真的想避免使用/services/prefixed和reas,您找到解决方案了吗?我已经为此挣扎了好几个小时了。我尝试过各种方法,从在guice社区发布带有各种正则表达式的ServerEGX,到这个解决方案(),再到使用tuckey UrlRewriteFilter,每次都失败了。最后,多亏了你的提问,我找到了康迪特的帖子,它运行得非常好。如果您使用了其他解决方案,我会很好奇您是如何解决的。我知道在中有类似的答案,但我真的想避免使用/services/prefixedAndreas,您找到解决方案了吗?我已经为此挣扎了好几个小时了。我尝试过各种方法,从在guice社区发布带有各种正则表达式的ServerEGX,到这个解决方案(),再到使用tuckey UrlRewriteFilter,每次都失败了。最后,多亏了你的提问,我找到了康迪特的帖子,它运行得非常好。如果你使用了另一种解决方案,我很好奇你是如何解决的。