起初,在我的 Web 服务器中,我只有一个 REST servlet。就像是:
@Path("/")
public class Controller {
@GET
@Produces({ MediaType.TEXT_HTML })
public Response get(@Context UriInfo info) throws Exception {
...
}
@GET
@Path("resource1")
@Produces({ MediaType.TEXT_HTML })
public Response resource1() throws Exception {
...
}
...
}
和 web.xml:
<servlet>
<servlet-name>rest</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>xpto.mypack1;xpto.mypack2</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>rest</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
但是后来我想在服务器上添加一些静态 html,所以我将 servlet 映射更新为 /rest/*
以及 Controller servlet 类的 @Path 指令从“/”到“/rest”。一切正常,但带有停止工作的@path指令的控制器的子资源或方法..即:
- / 工作正常,因为我在根目录下有一个 index.html 页面
- /rest 工作正常,它调用我的 servlet 的 get 方法
- /rest/resource1 返回 404 http 代码...
有什么帮助吗?我已经尝试了每个 @Path 指令之后和之前的 / 组合列表,但没有成功......非常感谢
一更新:
我使用了跟踪工具并得到了以下结果:
对于 /[app-name]/rest (有效):
- X-Jersey-Trace-002 接受右手路径 java.util.regex.Matcher[pattern=/rest(/.*)? region=0,11 lastmatch=/rest]: "/rest" -> "/rest" : ""
- X-Jersey-Trace-003 接受资源:"rest" -> @Path("/rest") xpto.mypack.Controller
- X-Jersey-Trace-000 接受根资源类:“/rest”
- X-Jersey-Trace-001 匹配路径 "/rest" -> "/application.wadl(/. )?", "/rest(/. )?"
对于 /[app-name]/rest/resource1 (它不起作用):
- X-Jersey-Trace-002 匹配异常映射器:com.sun.jersey.api.NotFoundException@4fd41dc3 -> xpto.myclass
- X-Jersey-Trace-003 将异常映射到响应:com.sun.jersey.api.NotFoundException@4fd41dc3 -> 404(未找到) X-Jersey-Trace-000 接受根资源类:“/resource1” X-Jersey- Trace-001 匹配路径“/resource1”->“/application.wadl(/.)?”、“/rest(/. ) ?”
我希望它可以帮助有人帮助我..