我有以下配置作为Guice模块(而不是web.xml)
public class RestModule extends JerseyServletModule {
@Override
protected void configureServlets() {
install(new JpaPersistModule("myDB"));
filter("/*").through(PersistFilter.class);
bind(CustomerList.class);
bind(OrdersList.class);
bind(MessageBodyReader.class).to(JacksonJsonProvider.class);
bind(MessageBodyWriter.class).to(JacksonJsonProvider.class);
ImmutableMap<String, String> settings = ImmutableMap.of(
JSONConfiguration.FEATURE_POJO_MAPPING, "true"
);
serve("/*").with(GuiceContainer.class, settings);
}
}
提供REST端点确实可以很好地工作。
当用户请求http://example.com/
时,我想从/webapp/index.html提供静态html文件以及http://example.com/customers或http://example.com/orders
的其他服务我不使用web.xml。网络服务器是码头
答案 0 :(得分:2)
请参阅:Jersey /* servlet mapping causes 404 error for static resources
并将适当的参数添加到settings
对象。类似的东西:
ImmutableMap<String, String> settings = ImmutableMap.of(
JSONConfiguration.FEATURE_POJO_MAPPING, "true"
"com.sun.jersey.config.property.WebPageContentRegex", "/.*html");
答案 1 :(得分:2)
正如我在评论中所说,我几乎整天都在努力。 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);
}
});
}
}
注意:最后两行是最重要的。
首先,忽略静态文件的参数:
"com.sun.jersey.config.property.WebPageContentRegex" (1.7 only!!!)
我将此设置为正则表达式:
"/(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_STATIC_CONTENT_REGEX)。 / p>
最后,最后一行:
filter("/*").through(GuiceContainer.class, params);
您应该使用:filter(“/ *”)。through和NOT serve(“/ *)。with
如果你提出了不同的解决方案,我想看看它是什么。