2013-10-18 16 views
6

Próbuję skonfigurować prostą aplikację z serwerem Jersey 2.3 obsługującym stronę jsp w autonomicznym Tomcat. Próbowałem wielu poradników z internetu, ale większość z nich wyjaśnia, jak używać Jersey z Grizzly, a nie z Tomcat. Nie mogłem znaleźć rozwiązania/wyjaśnienia mojego problemu, dlaczego jsp nie jest obsługiwany przez moją aplikację. Czy ktoś ma pojęcie, co tu jest nie tak? Poniżej moja aplikacja.Koszulka z szablonami MVC i 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> 

Odpowiedz

6

Używasz własności stary (com.sun.jersey.config.property.JSPTemplatesBasePath) nazwę bazowej ścieżki. Spróbuj użyć nowego

jersey.config.server.mvc.templateBasePath.jsp 

(patrz właściwości w JspMvcFeature i MvcFeature).

Druga właściwość (com.sun.jersey.config.property.WebPageContentRegex) nie jest obecnie obsługiwana w systemie Jersey 2.x.

+0

To łącze nie działa. Nowy jest https://jersey.java.net/nonav/apidocs/latest/jersey/ –

+0

Dzięki, poprawiono również w odpowiedzi. –

2

Oto niektóre filtr Jersey startowych params może chcesz przyjrzeć (używam Jersey 2.5 wewnątrz Tomcat 7 - reszta mojego web.xml wygląda podobnie do Ciebie):

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

Parametr JspMvcFeature może być przydatny w twojej sytuacji. Możesz także zobaczyć konfigurację zawartości statycznej, a także śledzenie, które w pewnym momencie na pewno okaże się przydatne.

+0

Próbuję zwrócić stronę JSP z mojej usługi ReST, ale po wykonaniu całej konfiguracji w 'web.xml', nie można uzyskać strony JSP w odpowiedzi. Po kliknięciu adresu URL mogłem zobaczyć tylko {{"templateName": "/ TerstJSP", "model": [], "resolvingClass": null, "templateNameAbsolute": true} "jako odpowiedź. –

Powiązane problemy