If I map Jersey's url-pattern to /* in the 2.0 release it causes 404 for all static resources (e.g. /index.html). My web.xml has:
<servlet>
<servlet-name>JerseyApp</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>org.frog.jump.JerseyApp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>JerseyApp</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
How do I serve static content with same url pattern?
You shall add the forwardOn404 filter to address this issue
As done in this example https://github.com/jersey/jersey/blob/2.17/examples/bookstore-webapp/src/main/webapp/WEB-INF/web.xml
Note: make sure that you are changing the
<servlet>
configuration to a<filter>
configuration. The JerseyServletContainer
is both anHttpServlet
and aFilter
, so you can configure it as either in your web.xml. In order to use theforwardOn404
property, Jersey needs to be configured as filter.With Jersey 1.x you should be able to serve static content from the same path if you switch from the Jersey servlet to the filter. Drop the servlet XML you've specified and switch it to:
EDIT: In Jersey 2.x you should be able to do the same thing but the names of the properties have been changed. Try something like:
And your POM should include:
You'll have to customize the regular expression in the init-param if you want to serve css, jsp, etc.
Another good option is to use a versioned path for your services ("/v1/*") and then static content will work without the filter.