要用 JAX-RS 替换我现有的 Struts 应用程序,我需要支持 servlet 扩展映射 (*.do)。因此,我注册了 Apache JAX-RS servlet,如下所示:
<display-name>jaxrs_wink</display-name>
<servlet>
<description>
JAX-RS Tools Generated - Do not modify</description>
<servlet-name>JAX-RS Servlet</servlet-name>
<servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>tests.SampleApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<enabled>true</enabled>
<async-supported>false</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>JAX-RS Servlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
请注意,该元素指定了扩展映射。问题是扩展映射不适用于 Apache Wink 1.4。但是,它适用于泽西岛。
要重现此问题,请创建以下 JAX-RS 资源类和应用程序。尝试访问:http:////hi.do
我从 Wink 获得 WebApplicationException (405)。但是,对于泽西岛,它工作得很好。我想知道扩展映射是否应该根据 JAX-RS v1.1 工作。我搜索了规范,但找不到关于 servlet 映射的任何具体评论。
package tests;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
@Path("/")
public class SampleResource {
@GET
@Path("hi.do")
public String sayHi() {
return "Hello World!";
}
}
package tests;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
public class SampleApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> classes = new HashSet<Class<?>>();
classes.add(SampleResource.class);
return classes;
}
}