我遗漏了一些明显的东西,但我不确定是什么。我有一个单独的“HelloWorld.java”,它有一个返回一些文本的@GET方法。
我的web.xml取自this doc(描述为“更简单的方法是让Jersey自动选择PackagesResourceConfig实现......”):
<web-app>
<servlet>
<servlet-name>HelloWorld</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>com.hello.rest</param-value>
</init-param>
</servlet>
</web-app>
这是我的课程(主要来自here):
package com.hello.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Produces;
import javax.ws.rs.Path;
@Path("/helloworld")
public class HelloWorld {
@GET
@Produces("text/json")
public String getHelloWorld() {
return "{\"hello\":\"World\"}";
}
}
我使用ant构建war文件,并将其部署到tomcat。战争似乎是正确的,因为tomcat解压缩它,我可以访问我放入其中进行测试的静态index.html。但是访问localhost:8080 / helloworld给了我一个404.为了让Jersey工作,我必须要有一些其他的东西。我错过了什么?
谢谢Bozho,我错过了<servlet-mapping>
部分。实际上,我似乎不希望“/”作为url-pattern,因为这会阻止提供静态内容(我无法再获取我的index.html页面了!)所以这是我的新web.xml(我把我的资源在“/ data /”路径中):
<web-app>
<servlet>
<servlet-name>HelloWorld</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>com.hello.rest</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/data/*</url-pattern>
</servlet-mapping>
</web-app>
现在我可以http://localhost:8080/hello/index.html
访问我的index.html页面,http://localhost:8080/hello/data/helloworld
访问我的资源。
答案 0 :(得分:2)
您必须使用<servlet-mapping>
制作servlet,/
为url-pattern