2013-10-18 10 views
6

Ich versuche eine einfache Anwendung mit Jersey 2.3 zu erstellen, die eine JSP-Seite in einem eigenständigen Tomcat bedient. Ich habe eine Menge Howto's aus dem Internet ausprobiert, aber die meisten von ihnen erklären Jersey mit Grizzly und nicht Tomcat. So konnte ich keine Lösung/Erklärung für mein Problem finden, warum die JSP nicht von meiner Anwendung bedient wird. Hat jemand eine Idee was hier falsch ist oder fehlt? Bitte finden Sie unten meine Bewerbung.Jersey mit MVC Templates und Tomcat

pom.xml

... 
<dependencies> 
    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet-core</artifactId> 
     <version>2.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.ext</groupId> 
     <artifactId>jersey-mvc-jsp</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
</dependencies> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.tomcat.maven</groupId> 
      <artifactId>tomcat7-maven-plugin</artifactId> 
      <version>2.0</version> 
      <executions> 
       <execution> 
        <id>tomcat-run</id> 
        <goals> 
         <goal>exec-war-only</goal> 
        </goals> 
        <phase>package</phase> 
        <configuration> 
         <path>/jhello</path> 
         <enableNaming>false</enableNaming> 
         <finalName>jhello-standalone.jar</finalName> 
         <charset>utf-8</charset> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

web.xml

<filter> 
    <filter-name>jhello</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.granatasoft.playground.jersey</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath</param-name> 
     <param-value>/WEB-INF/views</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name> 
     <param-value>/(decorators|scripts|styles|resources|(WEB-INF/views))/.*</param-value> 
    </init-param> 
</filter> 

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

HelloJersey.java

package com.granatasoft.playground.jersey; 

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

import org.glassfish.jersey.server.mvc.Viewable; 

@Path("/hello") 
public class HelloJersey { 
@GET 
@Produces(MediaType.APPLICATION_JSON) 
public String sayJsonHello() { 
    return "{'hello': 'jersey'}"; 
} 

@GET 
@Produces(MediaType.TEXT_HTML) 
public Viewable sayHtmlHello() { 
    return new Viewable("hello"); 
} 
} 

hello.js

<%@ page language="java" contentType="text/html; charset=UTF-8" 
pageEncoding="UTF-8"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII"> 
<title>Hello JSP</title> 
</head> 
<body> 
<h1>Hello JSP</h1> 
</body> 
</html> 

Antwort

6

Sie verwenden alte (com.sun.jersey.config.property.JSPTemplatesBasePath) Namen für die Basis-Pfad. Versuchen Sie es mit neuen

jersey.config.server.mvc.templateBasePath.jsp 

(siehe Eigenschaften in JspMvcFeature und MvcFeature).

Die andere Eigenschaft (com.sun.jersey.config.property.WebPageContentRegex) wird derzeit in Jersey 2.x nicht unterstützt.

+0

Diese Verbindung ist tot. Das neue ist https://jersey.java.net/nonav/apidocs/latest/jersey/ –

+0

Danke, auch in der Antwort behoben. –

2

Hier einige Jersey Filter init sind params Sie auf einen Blick nehmen möchten (ich verwende Jersey 2.5 innerhalb Tomcat 7 - der Rest meiner web.xml sieht ähnlich wie bei Ihnen):

<init-param> 
     <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name> 
     <param-value>/WEB-INF/jsp</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value>org.glassfish.jersey.server.mvc.jsp.JspMvcFeature</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.tracing</param-name> 
     <param-value>ALL</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.servlet.filter.staticContentRegex</param-name> 
     <param-value>(/index.jsp)|(/(content|(WEB-INF/jsp))/.*)</param-value> 
    </init-param> 

Der JspMvcFeature-Parameter könnte in Ihrer Situation nützlich sein. Sie können auch die Konfiguration des statischen Inhalts sowie die Ablaufverfolgung sehen, die Sie auf jeden Fall nützlich finden sollten.

+0

Ich versuche, eine JSP von meinem ReST-Dienst zurückzugeben, aber nach der Konfiguration in 'web.xml' kann keine JSP in der Antwort abgerufen werden. Nachdem ich die URL gefunden hatte, konnte ich nur '{" templateName ":"/TerstJSP "," model ": []," resolvingClass ": null," templateNameAbsolute ": true}' als Antwort sehen. –

Verwandte Themen