Голый минимум, необходимый для одного ресурса Джерси GET? - PullRequest
0 голосов
/ 21 декабря 2010

Мне не хватает чего-то очевидного, но я не уверен, что. У меня есть один «HelloWorld.java», который имеет один метод @GET, который возвращает некоторый текст.

Мой web.xml был взят из этого документа (описанного как "Еще более простой подход - позволить Джерси автоматически выбирать реализацию 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>

Вот мой класс (в основном взят из здесь ):

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 для создания файла войны и развертывания его в Tomcat. Война кажется правильной, потому что tomcat разархивирует ее, и я могу получить доступ к своему статическому index.html, который я вставил в него для тестирования. Но доступ к localhost: 8080 / helloworld дает мне 404. Должен быть какой-то другой кусок, который мне нужен, чтобы Джерси работал. Что я пропустил?

Спасибо, Божо, я пропустил раздел <servlet-mapping>. На самом деле кажется, что я не хочу использовать «/» в качестве URL-шаблона, потому что это препятствует подаче статического содержимого (я больше не могу получить свою страницу 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>

Теперь я могу получить доступ к своей странице index.html как http://localhost:8080/hello/index.html, а мой ресурс - http://localhost:8080/hello/data/helloworld.

1 Ответ

2 голосов
/ 21 декабря 2010

Вы должны сопоставить свой сервлет с <servlet-mapping>, с / как url-pattern

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...