2015-08-12 27 views
5

Ich habe daran gearbeitet, einen RESTful-Service mit Jersey und Tomcat in RAD 8.5 einzurichten. Ich habe Tonnen von Stackoverflow-Fragen im Zusammenhang mit meinem Fehler betrachtet, bei denen keiner von ihnen funktioniert. Es gibt keine Fehler in meiner Konsole.Jersey, Tomcat: Die angeforderte Ressource ist nicht verfügbar Fehler

Wenn ich tippe einfach: http://localhost:8080/, erhalte ich die Apache Homepage, so dass der Server funktioniert, aber http://localhost:8080/jersey/rest/hello oder http://localhost:8080/jersey/WEB-INF/classes/jersey/Hello.java funktioniert nicht. Hier

ist der Fehler: (mit meiner Bibliothek von Gläsern auf der Seite) Hier ist meine Hello.java

package jersey; 

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

@Path("/hello") 
public class Hello { 

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

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

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

Und meine web.xml

<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>com.example</param-value> 
    </init-param> 
</servlet> 

Versionen:

  • Tomcat: 7.0.663
  • RAD: 8.5
  • Jersey: 2,19

Danke,

in Reaktion auf Maciej Das funktioniert! Ich musste <servlet-mapping> mit URL-Muster von /* hinzufügen. Dann benutze http://localhost:8080/jersey/hello, ich habe eine Antwort vom Server bekommen!

Antwort

6

Sie stellen einen kompilierten Code für Tomcat bereit, sodass Sie nicht auf die * .java-Ressourcen zugreifen können.

Die Anmerkung @Path("/hello") gibt den Pfad an, in dem die Ressource verfügbar ist.

Es ist eingestellt auf: base URL + /your_path. Die base URL basiert auf Ihren Anwendungsnamen, das Servlet und die URL-Muster aus den web.xml:

<?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_2_5.xsd" 
    id="jersey" version="2.5"> 
    <servlet> 
     <servlet-name>jersey</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>jersey</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jersey</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

ersetzen auch @Produces Anmerkung zu @Consumes:

package jersey; 

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

@Path("/hello") 
public class Hello { 

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

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

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

Versuchen: http://localhost:8080/jersey/hello

+0

Gleiches ist happ ens, 'Die angeforderte Ressource ist nicht verfügbar ' –

+0

Versuchen Sie, das Servlet-Mapping so zu konfigurieren, dass es übereinstimmt:' jersey/* ' –

+0

Ich werde in meiner Frage antworten –

0

Achten Sie darauf, dass Sie haben alle erforderlichen Jersey Jar-Dateien im Ordner "WEB-INF -> lib" gespeichert.