Jersey / * servlet映射导致静态资源出现404错误

如果我将Jersey的url-pattern映射到2.0版本中的/ *,则会导致404所有静态资源(例如/index.html)。 我的web.xml有:

 JerseyApp org.glassfish.jersey.servlet.ServletContainer  javax.ws.rs.Application org.frog.jump.JerseyApp  1   JerseyApp /*  

如何使用相同的url模式提​​供静态内容?

使用Jersey 1.x,如果从Jersey servlet切换到filter,您应该可以从同一路径提供静态内容。 删除您指定的servlet XML并将其切换为:

  Jersey Filter com.sun.jersey.spi.container.servlet.ServletContainer  javax.ws.rs.Application org.frog.jump.JerseyApp   com.sun.jersey.config.property.WebPageContentRegex /.*html    Jersey Filter /*  

编辑:在泽西2.x你应该能够做同样的事情,但属性的名称已经改变。 尝试以下方法:

  Jersey Filter org.glassfish.jersey.servlet.ServletContainer  jersey.config.server.provider.packages org.example   jersey.config.servlet.filter.staticContentRegex /.*html    Jersey Filter /*  

你的POM应该包括:

  org.glassfish.jersey.core jersey-server 2.0-m07-1 jar compile   org.glassfish.jersey.containers jersey-container-servlet-core 2.0-m07-1 jar compile  

如果要提供css,jsp等,则必须在init-param中自定义正则表达式。

另一个不错的选择是为您的服务使用版本化路径(“/ v1 / *”),然后静态内容将在没有filter的情况下工作。

您应添加forwardOn404filter以解决此问题

  org.glassfish.jersey.examples.bookstore.webapp.MyApplication org.glassfish.jersey.servlet.ServletContainer  javax.ws.rs.Application org.glassfish.jersey.examples.bookstore.webapp.MyApplication    jersey.config.servlet.filter.forwardOn404 true   

正如在此示例中所做的那样https://github.com/jersey/jersey/blob/2.17/examples/bookstore-webapp/src/main/webapp/WEB-INF/web.xml

注意:确保将配置更改为配置。 Jersey ServletContainer既是HttpServlet Filter ,因此您可以在web.xml中将其配置为。 为了使用forwardOn404属性,需要将Jersey配置为filter。