2012-05-09 4 views
4

У меня есть следующий код в моем Java классаДжерси привет мир дает 404

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

Примечание: Я запускаю Tomcat на порту 80, и другие сервлеты отвечают так, как ожидалось.

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 

ответ

1

Проблема была исправлена, и я так и сделал.

Я удалил файлы jersey .jar с пути сборки и заменил их в папке WEB-INF\lib, и все сработало.

0

Похоже, вы регистрируете ваш сервлет в неправильном месте. Дважды проверьте, что корневой URL вашего сервлета, и убедитесь, что соответствует тому, что вы нажимаете.

Вы пробовали ударяя ?:

http://127.0.0.1/hello 

Помните, что /hello будет идти после того, как все, что базовый URL вашего сервлета. Попробуйте найти его в отладчике, чтобы увидеть, где он монтируется.

7

Это может произойти, если вы еще не зарегистрировали реализацию сервлетов JAX-RS в своем web.xml. Джерси требует следующей конфигурации:

<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; 

на классах веб-сервиса. Исправьте или измените его соответствующим образом.

Обратите внимание, что URL-шаблон /* означает, что ВСЕ запросы будут переданы через Джерси. Если вам нужно развернуть другие сервлеты, JSP или статический контент в том же webapp, вы можете указать более конкретный шаблон URL. Например.

<url-pattern>/rest/*</url-pattern> 

Необходимо изменить URL-адрес вашего запроса только до http://localhost/test_server/rest/hello.

+0

Я получаю следующую ошибку 'java.lang.ClassNotFoundException: com.sun.jersey.spi.container.servlet.ServletContainer' У меня есть следующие .jar-файлы в моем пути сборки' asm-3.1.jar, jersey- core-1.12.jar, jersey-server-1.12.jar, jersey servlet-1.12.jar и jsr311-api-1.11.jar' еще один вопрос относительно 'web.xml'. Я использовал книгу для изучения программирования сервлетов, его новый, написанный budi kurniawan. Я до сих пор не сталкивался с редактированием web.xml в книге, я использовал их для записи, а затем экспортировал его как файл '.war', и это сработало, поэтому я сейчас смущен с целью использования web.xml , – cyberbemon

+0

Обновленный вопрос с текущей конфигурацией 'web.xml' – cyberbemon

+0

Какой сервер сервлетов вы развертываете? – BalusC

0

Для меня был добавлен файл jar, добавленный в Build path -> Libraries, для которого отсутствовала фактическая jar в файловой системе.

Я удалил запись с build path и добавил зависимость в pom.xml. работал как шарм.

Смежные вопросы