作为过滤HTTP状态404

问题描述:

我已经部署了新泽西州2.5应用程序作为一个过滤器,但我得到一个HTTP状态404新泽西州2.5 - 访问本(或任何资源)URL时未找到错误:作为过滤HTTP状态404

本地主机:8080/[appname]/rest/users/new

此应用程序作为servlet部署时以前可以使用。如果我将'过滤器'标签转换为'servlet'标签,那么URL会再次运行。

启动时没有例外,并且以前设置的断点不再被触发。就好像没有找到资源类。任何想法可能会出错?

我的web.xml:

<filter> 
    <filter-name>jerseywebapp</filter-name> 
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.[pkg].resources</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value> 
      org.glassfish.jersey.media.multipart.MultiPartFeature, 
      org.glassfish.jersey.server.mvc.jsp.MvcFeature, 
      org.glassfish.jersey.server.mvc.jsp.JspMvcFeature, 
      org.glassfish.jersey.jackson.JacksonFeature 
     </param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name> 
     <param-value>/WEB-INF/views</param-value> 
    </init-param> 
    <!-- 
    <load-on-startup>1</load-on-startup> 
    --> 
</filter> 
<filter-mapping> 
    <filter-name>jerseywebapp</filter-name> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 
+0

限制 新泽西Web应用程序那些想要使用JSP模板支持的应用程序应该在应用程序的web.xml中注册为Servlet过滤器而不是Servlet。对于需要使用Jersey MVC模板支持的Web应用程序,目前不支持Servlet 3.0中引入的web.xml-less部署样式。 – broadbear 2014-12-13 03:18:24

+0

面临放弃未答复的问题的风险,我必须报告说我正在将Jersey作为Servlet运行,并且一切正常。 – broadbear 2015-01-08 01:17:00

+0

您是否曾经在这个问题上找到过解决方案或更多信息@broadbear? – amess 2016-08-04 21:05:12

以我的经验,改变service标签filter标签的工作原理相同,需要提醒的是@Path("...")注释将承担的范围内进行匹配<url-pattern>。您必须手动将模式添加到路径注释中。

例如,该XML在web.xml

... 
<servlet-mapping> 
    <servlet-name>jerseywebapp</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

有了这个配置,你可以期望在/rest/test/ping得到这个路径注释的比赛:

@Path("test") 
public class Test { 

    @GET 
    @Path("ping") 
    public Response getPing() { 
     .... 
    } 

现在,如果我们切换使用filter标签:

... 
<filter-mapping> 
    <filter-name>jerseywebapp</filter-name> 
    <url-pattern>/rest/*</url-pattern> 
</filter-mapping> 

需要注意的是,在/rest/test/ping仍然达到我们的终点,我们需要从“测试”改变我们班@Path注释“休息/测试”

新泽西JSP MVC模板
@Path("rest/test") 
public class Test { 

    @GET 
    @Path("ping") 
    public Response getPing() { 
     .... 
    } 
+0

所有工作都是在部署为servlet的时候运行的,所以我从来没有打扰过滤器部署的工作。我已经接受了答案,因为它看起来很相关,并且可能是很好的信息。 – broadbear 2016-08-05 00:34:31