2016-05-31 15 views
2

Ich versuche, ein einfaches Beispiel für eine Webanwendung mit Jersey 2 und JSP zu erstellen und sie auf Glassfish 4 bereitzustellen. Ich bekomme jedoch immer 404-Fehler beim Zugriff meine einzige Ressource.404 wird versucht, eine JSP von Jersey 2 zu rendern

Zunächst wird die Projektstruktur:

Project structure

Hier sind die wichtigsten Klassen und Dateien:

web.xml Ich gründe Jersey als Filter, anstelle eines Servlets, weil ich es gelesen muss auf diese Weise definiert werden, damit es mit JSP funktioniert.

<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 ist denkbar einfach:

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

Der Brauch ResourceConfig (was ich bin nicht einmal sicher, ob ich brauche)

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 ... 
    } 
} 

Und mein Controller für die Filme:

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"); 
    } 
} 

Wenn ich versuche, auf https://localhost:8181/sample-jersey2/ zuzugreifen, wird das einfache index.jsp gerendert (das nur eine Hello World-Nachricht anzeigt). Der Versuch, auf https://localhost:8181/sample-jersey2/movies/list/ zuzugreifen, gibt mir einen Fehler 404.

Alle Ideen dazu würden sehr geschätzt werden. Mit freundlichen Grüßen

+0

Wird der MoviesController in Jersey-Protokollen als Ressource registriert, wenn Sie Ihre App starten? –

Antwort

1

Sie sind in der richtigen Richtung. Bitte registrieren Sie Ihre benutzerdefinierte Ressourcen-Konfiguration in web.xml.

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

Sie können die init param jersey.config.server.provider.packages entfernen, wie Sie bereits, dass config in Ihrer Ressource zu tun. Eine letzte Sache ändern Sie die Rückkehr neue Sichtbar ("movies.jsp") zu neuen Sichtbar ("/ movies.jsp"). Hoffentlich wird es funktionieren.

+0

Danke, diese Änderungen und diese Eigenschaft 'property (JspMvcFeature.TEMPLATE_BASE_PATH,"/WEB-INF/jsp ")' in der 'CustomResourceConfig' Klasse haben den Trick gemacht – jmm