2016-06-15 1 views
0

Ниже мой web.xmlДжерси образец HelloWorld получить 404 код из браузера

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>jersey_helloworld</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <servlet-name>jerseyhello</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.javapapers.webservices.rest.jersey</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>jerseyhello</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Ниже все банки в WEB-INF/Lib, и я добавил их, чтобы построить путь. enter image description here

Ниже приведен мой код HelloWorld.

package com.javapapers.webservices.rest.jersey; 

import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 

@Path("/helloworld") 
public class HelloWorld { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello() { 
     return "Hello World RESTful Jersey!"; 
    } 

    @GET 
    @Produces(MediaType.TEXT_XML) 
    public String sayXMLHello() { 
     return "<?xml version=\"1.0\"?>" + "<hello> Hello World RESTful Jersey" 
       + "</hello>"; 
    } 

    @GET 
    @Produces(MediaType.TEXT_HTML) 
    public String sayHtmlHello() { 
     return "<html> " + "<title>" + "Hello World RESTful Jersey" 
       + "</title>" + "<body><h1>" + "Hello World RESTful Jersey" 
       + "</body></h1>" + "</html> "; 
    } 

} 

Наконец-то я назвал эту веб-службу из firefox, как показано ниже.

http://localhost:8080/jersey_helloworld/rest/helloworld 

После этого был опубликован статус HTTP 404 - Not Found. И ничего не сообщалось об ошибке в консоли eclipse.

+0

Пожалуйста, убедитесь, что все ваши банки упаковываются в войне. – Veeram

+0

есть. Я скопировал все банки в lib –

+0

Успешно ли работает ваш сервис отдыха? –

ответ

1

Я использовал:

1) следующие банки:

enter image description here

2) web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!-- This web.xml file is not required when using Servlet 3.0 container, 
    see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html --> 
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> 
    <servlet> 
     <servlet-name>jerseyhello</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.javapapers.webservices.rest.jersey</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>jerseyhello</servlet-name> 
     <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

3) ваш исходный код без каких-либо изменений.

и результат:

enter image description here

+0

спасибо. Я понял. И я нашел основную причину. Это потому, что моя папка классов jerseyhelloworld/build in eclipse, правильным должен быть jerseyhelloworld/WebContent/WEB-INF/classes. Но мой вопрос в том, почему он не сообщает об исключении classnotfound. –

+0

Ваш класс 'HelloWorld' должен быть загружен' org.glassfish.jersey.servlet.ServletContainer'. Мы не упоминаем имя нашего класса в 'web.xml', мы указываем только' jersey.config.server.provider.packages', чтобы указать, где должны загружаться классы. Поскольку мы не указываем имя нашего класса, 'org.glassfish.jersey.servlet.ServletContainer' does not throw 'ClassNotFoundException'. Надеюсь это поможет. –

0

Вы должны добавить аннотацию @Path к каждому методу, чтобы указать разные пути. Теперь вы вызываете только /helloworld, но нет способа, связанного с этим путем.

Например, для первого способа попытаться сделать это:

@GET 
@Produces(MediaType.TEXT_PLAIN) 
@Path("/plainText") 
public String sayPlainTextHello() { 
    return "Hello World RESTful Jersey!"; 
} 

и назвать его таким образом:

http://localhost:8080/jersey_helloworld/rest/helloworld/plainText 
+0

Я также пробовал, но он все еще 404 –

+0

, если вы используете eclipse, перейдите к свойствам вашего проекта -> Настройки веб-проекта и проверьте имя корня контекста. Я вижу, что вы вызываете jersey_helloworld, но это ваше отображаемое имя. – mlg

+0

нет необходимости добавлять путь к методу, поскольку все они производят разные типы носителей и трикотаж, чтобы разрешить его одному методу. – Veeram

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