2016-05-31 1 views
2

J'essaye de faire un exemple simple d'une application Web en utilisant Jersey 2 et JSP, et de le déployer sur Glassfish 4. Cependant, je continue à recevoir des erreurs 404 essayant d'accéder ma seule ressource.Obtenir 404 essayant de rendre un JSP depuis Jersey 2

D'abord, la structure du projet:

Project structure

Voici les classes et les fichiers importants:

web.xml J'installe Jersey comme un filtre, au lieu d'un servlet, parce que je l'ai lu doit être défini de cette façon afin de le faire fonctionner avec JSP.

<web-app version="3.0" 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_3_0.xsd"> 

    <display-name>Archetype Created Web Application</display-name> 

    <filter> 
    <filter-name>jersey</filter-name> 
    <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.xxx.sample-jersey2</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    </filter> 

    <filter-mapping> 
    <filter-name>jersey</filter-name> 
    <url-pattern>/*</url-pattern> 
    </filter-mapping> 

    <!--<welcome-file-list>--> 
    <!--<welcome-file>index.html</welcome-file>--> 
    <!--<welcome-file>index.htm</welcome-file>--> 
    <!--<welcome-file>movies.jsp</welcome-file>--> 
    <!--</welcome-file-list>--> 

</web-app> 

movies.jsp est extrêmement simple:

<html> 
<body> 
    <h2>Listing Movies</h2> 
</body> 
</html> 

La coutume ResourceConfig (que je ne suis même pas sûr que je besoin)

package com.xxx.jersey2.config; 

import org.glassfish.jersey.filter.LoggingFilter; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature; 

public class CustomResourceConfig extends ResourceConfig { 
    public CustomResourceConfig() { 
     packages("com.xxx"); 
     register(LoggingFilter.class); 
     register(JspMvcFeature.class); 
     // it may be also jersey.config.server.mvc.templateBasePath 
     property("jersey.config.server.mvc.templateBasePath", "/WEB-INF/jsp"); 
     // ... more properties as needed ... 
    } 
} 

Et mon contrôleur pour les films:

package com.xxx.jersey2.web; 

import com.xxx.jersey2.model.Movie; 
import java.util.ArrayList; 
import java.util.List; 
import javax.ws.rs.GET; 
import javax.ws.rs.Path; 
import org.glassfish.jersey.server.mvc.Viewable; 

@Path("movies") 
public class MoviesController { 
    @GET 
    @Path("/list") 
    public Viewable getMovies() { 
     List<Movie> movies = new ArrayList<Movie>(); 

     movies.add(new Movie("Million Dollar Baby", "Hillary Swank")); 
     movies.add(new Movie("Toy Story", "Buzz Light Year")); 
     movies.add(new Movie("Hunger Games", "Jennifer Lawrence")); 

     return new Viewable("movies.jsp"); 
    } 
} 

Si j'essaie d'accéder à https://localhost:8181/sample-jersey2/, le index.jsp simple est rendu (qui affiche uniquement un message Hello World). Cependant, essayer d'accéder à https://localhost:8181/sample-jersey2/movies/list/ me donne une erreur 404.

Toutes les idées à ce sujet seraient grandement appréciées. Sincères salutations

+0

Voyez-vous le MoviesController être enregistré en tant que ressource dans les journaux de Jersey lorsque vous démarrez votre application? –

Répondre

1

Vous êtes dans la bonne direction. Veuillez enregistrer votre configuration de ressource personnalisée dans le fichier web.xml.

 <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>com.xxx.jersey2.config.CustomResourceConfig</param-value> 
    </init-param> 

Vous pouvez supprimer les jersey.config.server.provider.packages param init que vous faites déjà dans votre configuration de ressources. Une dernière chose change le retour new Viewable ("movies.jsp") en new Viewable ("/ movies.jsp"). J'espère que ça va marcher.

+0

Merci, ces modifications et cette propriété 'propriété (JspMvcFeature.TEMPLATE_BASE_PATH,"/WEB-INF/jsp ")' dans la classe 'CustomResourceConfig' ont fait l'affaire – jmm