我已将Jersey 2.5应用程序部署为过滤器,但在访问此(或任何资源)URL时,我收到HTTP Status 404 - Not Found错误:
本地主机:8080 / [应用程序的名字] /休息/用户/新
此应用程序部署为servlet时,此URL工作正常。如果我将'filter'标签转换为'servlet'标签,则网址会再次起作用。
启动时没有异常,之前设置的断点不再被触发。就好像没有找到资源类一样。知道会出现什么问题吗?
我的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 :(得分:1)
根据我的经验,将service
代码更改为filter
代码的工作方式相同,但需要注意的是@Path("...")
注释 <url-pattern>
的背景。您必须手动将模式添加到路径注释中。
例如,在web.xml
中使用此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
注释从&#34; test&#34; 更改为& #34;其余/测试&#34; 强>:
@Path("rest/test")
public class Test {
@GET
@Path("ping")
public Response getPing() {
....
}