2015-08-12 27 views
5

Ho lavorato per ottenere un servizio RESTful impostato utilizzando Jersey e Tomcat in RAD 8.5. Ho esaminato tonnellate di domande StackOverflow relative al mio errore senza che nessuno di loro funzioni. Non ci sono errori nella mia console.Jersey, Tomcat: la risorsa richiesta non è disponibile errore

Quando mi basta digitare: http://localhost:8080/, ottengo la home page di Apache, quindi il server sta lavorando, ma http://localhost:8080/jersey/rest/hello o http://localhost:8080/jersey/WEB-INF/classes/jersey/Hello.java non funziona.

Ecco l'errore: (con la mia libreria di vasi sul lato) Ecco il mio 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> "; 
     } 
} 

E il mio 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> 

Versioni:

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

Grazie,

in risposta a Maciej questo ha funzionato! Avevo bisogno di aggiungere <servlet-mapping> con il modello di URL di /*. Quindi utilizzare http://localhost:8080/jersey/hello, ho ricevuto una risposta dal server!

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

risposta

6

Si sta distribuendo un codice compilato su Tomcat, quindi non sarà possibile accedere alle risorse * .java.

Annotazione @Path("/hello") indica il percorso in cui è disponibile la risorsa.

È impostato su: base URL + /your_path. Il base URL si basa sul nome dell'applicazione, il servlet e il pattern URL dal 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> 

sostituire anche @Produces annotazione @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> "; 
     } 
} 

Prova: http://localhost:8080/jersey/hello

+0

La stessa cosa ens, 'La risorsa richiesta non è disponibile' –

+0

Prova a configurare la mappatura servlet in modo che corrisponda:' jersey/* ' –

+0

Sto andando a rispondere nella mia domanda –

0

Assicurarsi che hai tenuto tutti i file necessari di Jersey Jar nella cartella "WEB-INF -> lib"