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

Java Jersey/*servlet映射导致静态资源出现404错误,java,jersey,Java,Jersey,如果我将Jersey的url模式映射到2.0版本中的/*上,则会导致所有静态资源(例如/index.html)出现404。My web.xml具有: 运动衫 org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application org.frog.jump.JerseyApp 1. 运动衫 /* 如何使用相同的url模式提供静态内容 使用Jersey 1.x,如果您从Jersey servlet切换到过滤器,您应该能够从同一

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


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

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

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


泽西过滤器
com.sun.jersey.spi.container.servlet.ServletContainer
javax.ws.rs.Application
org.frog.jump.JerseyApp
com.sun.jersey.config.property.WebPageContentRegex
/*html
泽西过滤器
/* 
编辑:在Jersey 2.x中,您应该可以执行相同的操作,但属性名称已更改。尝试以下方法:


泽西过滤器
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
org.example
jersey.config.servlet.filter.staticContentRegex
/*html
泽西过滤器
/* 
您的POM应包括:


org.glassfish.jersey.core
泽西服务器
${jersey2.version}
罐子
编译
org.glassfish.jersey.containers
jersey容器servlet核心
${jersey2.version}
罐子
编译
如果要提供css、jsp等服务,必须在init参数中自定义正则表达式


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

您应该添加forwardOn404筛选器来解决此问题


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
真的
如本例所示

注意:确保将
配置更改为
配置。Jersey既是一个
HttpServlet
又是一个
过滤器
,因此您可以在web.xml中将其配置为任何一种要使用
forwardOn404
属性,Jersey需要配置为过滤器


如果我没有错的话,你就不能再在2.x版本中这样做了。我认为com.sun.jersey.spi.container.servlet.ServletContainer不是jersey 2.X的一部分。更新了答案以包含2.X选项。包已经更改。可能没有真正的关联,但我想知道是否可以“以编程方式”//Annotation/Properties”设置这些参数。似乎对于JEE6来说,这是不可能的。对于JEE7,它可能是通过Application.getProperites().put(key,value)?有关可以设置的另一个属性(而不是上面答案中的属性),请参阅。对于Jersey 1.x,它的
com.sun.Jersey.config.feature.FilterForwardOn404