2014-11-07 4 views
0

Это первый раз, когда я пользуюсь веб-сервисами, и это заставляет меня сходить с ума.Rest Web service 404 error - Tomcat Eclipse

Я следую учебник от: http://www.vogella.com/articles/REST/article.html - раздел 6

Я создал имя проекта, как example.restservice.blue, и в том, что у меня есть пакет example.restservice.blue и в том, что у меня есть класс Hey:

package example.restservice.blue; 


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

// Plain old Java Object it does not extend as class or implements 
// an interface 

// The class registers its methods for the HTTP GET request using the @GET annotation. 
// Using the @Produces annotation, it defines that it can deliver several MIME types, 
// text, XML and HTML. 

// The browser requests per default the HTML MIME type. 

//Sets the path to base URL + /hello 
@Path("/Hey") 
public class Hey { 

// This method is called if TEXT_PLAIN is request 
@GET 
@Produces(MediaType.TEXT_PLAIN) 
public String sayPlainTextHello() { 
return "Hello Jersey, please please work"; 
} 

// This method is called if XML is request 
@GET 
@Produces(MediaType.TEXT_XML) 
public String sayXMLHello() { 
return "<?xml version=\"1.0\"?>" + "<hello> Hello Jersey, please please work" + "</hello>"; 
} 

// This method is called if HTML is request 
@GET 
@Produces(MediaType.TEXT_HTML) 
public String sayHtmlHello() { 
return "<html> " + "<title>" + "Hello Jersey, please please work" + "</title>" 
    + "<body><h1>" + "Hello Jersey, please please work" + "</body></h1>" + "</html> "; 
} 

} 

Выше является ресурс java-файла.

<?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" 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>example.restservice.blue</display-name> 
<welcome-file-list> 
<welcome-file>index.html</welcome-file> 
</welcome-file-list> 
<servlet> 
<servlet-name>Jersey REST Service</servlet-name> 
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>example.restservice.blue</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
</web-app> 

Выше файла web.xml.

Проект также назван example.restservice.blue.

файл класса присутствует в example.restservice.blue/build/classes/example/restservice/blue/ Файл web.xml присутствует в example.restservice.blue/WebContent/WEB-INF/

Tomcat 7 отлично работает с другим приложением, а также отображает страницу приветствия tomcat, поэтому проблем с ней нет, я думаю.

здесь ошибка я получаю:

Error 404

Вот консоль:

>

Nov 07, 2014 5:34:37 PM org.apache.catalina.core.AprLifecycleListener init 
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x86;C:\Program Files (x86)\Intel\OpenCL SDK\2.0\bin\x64;C:\Program Files (x86)\QuickTime\QTSystem\;. 
Nov 07, 2014 5:34:38 PM org.apache.tomcat.util.digester.SetPropertiesRule begin 
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:example.restservice.bhagya' did not find a matching property. 
Nov 07, 2014 5:34:38 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["http-bio-8080"] 
Nov 07, 2014 5:34:38 PM org.apache.coyote.AbstractProtocol init 
INFO: Initializing ProtocolHandler ["ajp-bio-8009"] 
Nov 07, 2014 5:34:38 PM org.apache.catalina.startup.Catalina load 
INFO: Initialization processed in 1608 ms 
Nov 07, 2014 5:34:38 PM org.apache.catalina.core.StandardService startInternal 
INFO: Starting service Catalina 
Nov 07, 2014 5:34:38 PM org.apache.catalina.core.StandardEngine startInternal 
INFO: Starting Servlet Engine: Apache Tomcat/7.0.47 
Nov 07, 2014 5:34:38 PM org.apache.catalina.loader.WebappClassLoader validateJarFile 
INFO: validateJarFile(C:\Users\vaio\Desktop\RESTProject\wtpwebapps\example.restservice.blue\WEB-INF\lib\javax.servlet-api-3.0.1.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Users\vaio\Desktop\RESTProject\webapps\docs 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Users\vaio\Desktop\RESTProject\webapps\examples 
Nov 07, 2014 5:34:42 PM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: contextInitialized() 
Nov 07, 2014 5:34:42 PM org.apache.catalina.core.ApplicationContext log 
INFO: SessionListener: contextInitialized() 
Nov 07, 2014 5:34:42 PM org.apache.catalina.core.ApplicationContext log 
INFO: ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', '[email protected]') 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Users\vaio\Desktop\RESTProject\webapps\host-manager 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Users\vaio\Desktop\RESTProject\webapps\manager 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.HostConfig deployDirectory 
INFO: Deploying web application directory C:\Users\vaio\Desktop\RESTProject\webapps\ROOT 
Nov 07, 2014 5:34:42 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["http-bio-8080"] 
Nov 07, 2014 5:34:42 PM org.apache.coyote.AbstractProtocol start 
INFO: Starting ProtocolHandler ["ajp-bio-8009"] 
Nov 07, 2014 5:34:42 PM org.apache.catalina.startup.Catalina start 
INFO: Server startup in 4642 ms 

ответ

0

Ваша конфигурация кажется довольно хорошо, но вы не имеют доступа к правильным страницы в вашем браузере: если вы обратите внимание в своем учебнике, то он будет доступен для/rest/hello page не WEB-INF/classes/hello.java

В Java (или J2EE) вы никогда не получите доступ к классу Java: вы получите доступ к странице, которая сопоставляется с Java-контроллером (или веб-службой в вашем случае).

Так чтобы получить доступ к веб-службы из браузера, исправить URL на что-то вроде http://localhost:8080/example.restservice.blue/rest/Hey (для веб-службы с аннотаций @Path («/ Эй»))

+0

Привет, спасибо за Ваш ответ! Я просто запускаю java-файл на сервере (rt. Нажмите Hey.java -> Run as -> Run on Server). Я пробовал то же самое, например, запускать web.xml на сервере и даже весь проект на сервере. Каждый раз, когда URL-адрес конкретно содержит путь к тому, что я запускаю, но дает ту же ошибку 404. Могу ли я узнать, как я могу запустить его, чтобы получить указанный вами URL. Я попробовал просто ввести указанный вами URL (после запуска проекта на Tomcat) и до сих пор не повезло. – user2201545

+0

Я не использую правый клик -> Запуск от имени ... Но ваш URL-адрес всегда будет таким: http: // yourservername: yourserverport/yourprojectname/yourpath, где ваше имя сервера - «localhost», ваш сервер - «8080», ваше имя проекта - из файла server.xml (в папке tomcat: атрибут path тега Context), а ваш путь состоит из шаблона url, определенного в вашем web.xml, и имени, указанного в @path аннотации – rlm

+0

Я вижу, я тоже это пробовал , Я по-прежнему получаю ту же ошибку – user2201545

0

Перед успешного развертывания веб-службы RESTful, который был разработан с использованием JAX-RS, вы должны настроить путь ресурса REST для своего приложения. Есть два способа сделать это:

  • Чтобы использовать web.xml дескриптор
  • развертывания Разработка класс, который расширяет javax.ws.rs.core.Application и указать аннотацию @ApplicationPath

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

Класс web-сервиса:

package example.restservice.blue; 

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

@Path("Hey") 
public class Hey { 

    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String sayPlainTextHello() { 
     return "Hello Jersey, please please work"; 
    } 

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

Дескриптор развертывания:

<?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" 
    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>example.restservice.blue</display-name> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

<servlet> 
    <servlet-name>JerseyService</servlet-name> 
    <servlet-class> 
     com.sun.jersey.spi.container.servlet.ServletContainer 
    </servlet-class> 

    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>JerseyService</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

</web-app> 

В этом случае вы должны сделать этот запрос:

http://localhost:8080/root_context_here/rest/Hey 

Вы можете использовать сканирование пакета. Как уже упоминалось на сайте vogella.com,

Параметр com.sun.jersey.config.property.package определяет, в котором пакет Джерси будет искать классы веб-службы. Это свойство должно указывать на классы ресурсов. Шаблон URL-адреса определяет часть базового URL вашего приложения.

В вашем случае вам нужно указать правильный URI в аннотации пути и сделать правильный запрос.

Смотрите также: