2016-09-21 85 views
1

當試圖訪問/Example/Site 404時,將不會顯示找到的頁面,但jsp位於webapp/WEB-INF/jsp/。爲什麼這不起作用?可視路徑返回404

<web-app id="WebApp_ID" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>jmattheis rest app</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 


    <servlet> 
     <servlet-name>jersey-servlet</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.stackoverflow.jmattheis.rest</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
      <param-value>true</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.mvc.templateBasePath.jsp</param-name> 
      <param-value>/WEB-INF/jsp</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.tracing</param-name> 
      <param-value>ALL</param-value> 
     </init-param> 
    </servlet> 

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

</web-app> 

這裏的資源:

@Component 
@Path("Example") 
public class Example { 
    @GET 
    @Path("/Site") 
    @Produces(MediaType.TEXT_HTML) 
    public Response getSite() { 
     return Response.ok(new Viewable("/test")).build(); 
    } 
} 

回答

0

Have a look at the Jersey2 MVC documentation

澤西希望使用JSP模板的支持應註冊爲Servlet過濾器而不是Servlet的應用程序的web.xml Web應用程序。對於需要使用Jersey MVC模板支持的Web應用程序,目前不支持Servlet 3.0中引入的web.xml-less部署樣式。

所以你需要改變你的servlet到一個過濾器,使其工作。

這可能是在早期版本的澤西島2中不需要的,但我找不到那些舊的文檔,所以我們永遠不會知道。

像這樣:

<web-app id="WebApp_ID" version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
    <display-name>jmattheis rest app</display-name> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:applicationContext.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
    </listener> 


    <filter> 
     <filter-name>jersey-filter</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.stackoverflow.jmattheis.rest</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.servlet.filter.forwardOn404</param-name> 
      <param-value>true</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.mvc.templateBasePath.jsp</param-name> 
      <param-value>/WEB-INF/jsp</param-value> 
     </init-param> 
     <init-param> 
      <param-name>jersey.config.server.tracing</param-name> 
      <param-value>ALL</param-value> 
     </init-param> 
    </filter> 

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

</web-app>