Jersey / * servlet映射导致静态资源出现404错误 [英] Jersey /* servlet mapping causes 404 error for static resources

查看:295
本文介绍了Jersey / * servlet映射导致静态资源出现404错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

 < 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>

如何使用相同的网址格式提供静态内容?

解决方案

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

 < filter> 
< filter-name>泽西过滤器< / filter-name>
< filter-class> com.sun.jersey.spi.container.servlet.ServletContainer< / filter-class>
< init-param>
< param-name> javax.ws.rs.Application< / param-name>
< param-value> org.frog.jump.JerseyApp< / param-value>
< / init-param>
< init-param>
< param-name> com.sun.jersey.config.property.WebPageContentRegex< / param-name>
< param-value> /.* html< / param-value>
< / init-param>
< / filter>
< filter-mapping>
< filter-name>泽西过滤器< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

编辑:在泽西岛2.x你应该可以做到同样的事情,但属性的名称已被更改。尝试类似:

 < filter> 
< filter-name>泽西过滤器< / filter-name>
< filter-class> org.glassfish.jersey.servlet.ServletContainer< / filter-class>
< init-param>
< param-name> jersey.config.server.provider.packages< / param-name>
< param-value> org.example< / param-value>
< / init-param>
< init-param>
< param-name> jersey.config.servlet.filter.staticContentRegex< / param-name>
< param-value> /.* html< / param-value>
< / init-param>
< / filter>
< filter-mapping>
< filter-name>泽西过滤器< / filter-name>
< url-pattern> / *< / url-pattern>
< / filter-mapping>

您的POM应包括:

 < dependency> 
< groupId> org.glassfish.jersey.core< / groupId>
< artifactId> jersey-server< / artifactId>
< version> 2.0-m07-1< / version>
< type> jar< / type>
< scope> compile< / scope>
< / dependency>

<依赖>
< groupId> org.glassfish.jersey.containers< / groupId>
< artifactId> jersey-container-servlet-core< / artifactId>
< version> 2.0-m07-1< / version>
< type> jar< / type>
< scope> compile< / scope>
< / dependency>

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



另一个好的选择是为你的服务使用版本化路径(/ v1 / *),然后静态内容将在没有过滤器的情况下工作。 / p>

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?

解决方案

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:

<filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>javax.ws.rs.Application</param-name>
    <param-value>org.frog.jump.JerseyApp</param-value>
  </init-param>
  <init-param>
    <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping>

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:

<filter>
  <filter-name>Jersey Filter</filter-name>
  <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>org.example</param-value>
  </init-param>
  <init-param>
    <param-name>jersey.config.servlet.filter.staticContentRegex</param-name>
    <param-value>/.*html</param-value>
  </init-param>
</filter> 
<filter-mapping>
  <filter-name>Jersey Filter</filter-name>
  <url-pattern>/*</url-pattern> 
</filter-mapping>

And your POM should include:

<dependency>
  <groupId>org.glassfish.jersey.core</groupId>
  <artifactId>jersey-server</artifactId>
  <version>2.0-m07-1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet-core</artifactId>
  <version>2.0-m07-1</version>
  <type>jar</type>
  <scope>compile</scope>
</dependency>

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.

这篇关于Jersey / * servlet映射导致静态资源出现404错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆