[英]Jersey hello world gives 404
我的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>
以下URL为我提供了Http状态500
http://localhost/Jersey_Test/rest/hello
java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer
如果您还没有在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模式。 例如
<url-pattern>/rest/*</url-pattern>
您只需将请求URL更改为http:// localhost / test_server / rest / hello 。
看起来你在错误的地方注册你的servlet。 仔细检查servlet的根URL,并确保它与您正在匹配的内容相匹配。
你试过打吗?:
http://127.0.0.1/hello
请记住, /hello
将追踪servlet的基本URL。 尝试在调试器中查看它以查看它的安装位置。
问题已得到解决,这就是我的做法。
我从构建路径中删除了jersey .jar文件,并在WEB-INF\\lib
文件夹中替换它们,一切正常。
对我来说,在Build path -> Libraries
添加了一个jar
文件,文件系统中缺少实际的jar
。
我从build path
删除了该条目,并在pom.xml
添加了依赖项。 像魅力一样工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.