繁体   English   中英

泽西岛你好世界给了404

[英]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文件

http://127.0.0.1/test_server/hello

我得到了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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM