单个Jersey GET资源是否需要最低限度?

时间:2010-12-21 20:37:49

标签: rest tomcat jersey

我遗漏了一些明显的东西,但我不确定是什么。我有一个单独的“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访问我的资源。

1 个答案:

答案 0 :(得分:2)

您必须使用<servlet-mapping>制作servlet,/url-pattern