我的java类中有以下代码
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
//This method is called is TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello(){
return "Hello World";
}
//this method is called if TEXT_XML is requested
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello(){
return "<?xml version=\"1.0\"?>"+"<Hello> Hello World"+"</hello>";
}
//this method is called if HTML is requested
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello(){
return "<html>"+"<title>"+"hello jersey"+"</title>"+"<body><h1>"+"hello World!!"+"</body></h1>"+"</html>";
}
}
当我输入
时,我将其编译并导出为.WAR文件我得到了404。我在WTP中试过它,cURL它们都返回404 ..我正在使用tomcat 7.0.26
注意:我在端口80上运行Tomcat,其他servlet按预期响应。
web.xml配置
<display-name>Jersey_Test</display-name>
<servlet>
<servlet-name>Hello</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.example.service</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/*</url-pattern>
以下网址为我提供了Http状态500
http://localhost/Jersey_Test/rest/hello
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
答案 0 :(得分:9)
如果您尚未在web.xml
中注册JAX-RS servlet实现,则会发生这种情况。 Jersey需要以下配置:
<servlet>
<servlet-name>jersey</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.example.service</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>jersey</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
com.sun.jersey.config.property.packages
初始化参数值必须指向您所有服务所在的包。但是,您的代码段缺少package
声明。我不确定是否为了简洁而省略了这一点,但无包装类对于本身位于包中的类是不可见的(例如Tomcat和Jersey引擎本身)。上面的web.xml
示例假定您已经
package com.example.service;
在您的Web服务类上。相应地修复或更改它。
请注意,/*
的URL模式因此意味着所有请求都将通过Jersey传递。如果您需要在同一个Web应用程序中部署其他servlet,JSP或静态内容,则可能需要指定更具体的URL模式。 E.g。
<url-pattern>/rest/*</url-pattern>
您只需将请求网址更改为http://localhost/test_server/rest/hello。
答案 1 :(得分:2)
问题已得到修复,我就是这样做的。
我从构建路径中删除了jersey .jar文件,并将其替换为WEB-INF\lib
文件夹,一切正常。
答案 2 :(得分:1)
看起来您正在错误的地方注册您的servlet。仔细检查servlet的根URL,并确保它符合您的要求。
你试过点击吗?:
http://127.0.0.1/hello
请记住,/hello
将跟随您的servlet的基本URL。尝试在调试器中查看它以查看它的安装位置。
答案 3 :(得分:0)
对我来说,jar
中添加了一个Build path -> Libraries
文件,文件系统中缺少实际的jar
。
我从build path
删除了该条目,并在pom.xml
中添加了依赖项。
像魅力一样工作。