Rest 可视路线返回404

Rest 可视路线返回404,rest,jsp,jersey,jersey-2.0,Rest,Jsp,Jersey,Jersey 2.0,尝试访问/Example/Site时,将显示404找不到页面,但jsp位于webapp/WEB-INF/jsp/中。为什么这不起作用 <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://jav

尝试访问
/Example/Site
时,将显示404找不到页面,但jsp位于
webapp/WEB-INF/jsp/
中。为什么这不起作用

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

希望使用JSP模板支持的Jersey web应用程序应该注册为Servlet过滤器,而不是应用程序的web.xml中的Servlet。Servlet 3.0中引入的web.xml-less部署样式目前不支持需要使用Jersey MVC模板支持的web应用程序

因此,您需要将servlet更改为过滤器以使其工作

这可能是jersey 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>

jmattheis rest应用程序
上下文配置位置
类路径:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
泽西过滤器
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.stackoverflow.jmattheis.rest
jersey.config.servlet.filter.forwardOn404
真的
jersey.config.server.provider.classnames
org.glassfish.jersey.server.mvc.jsp.JspMvcFeature
jersey.config.server.mvc.templateBasePath.jsp
/WEB-INF/jsp
jersey.config.server.tracing
全部的
泽西过滤器
/*

希望使用JSP模板支持的Jersey web应用程序应该注册为Servlet过滤器,而不是应用程序的web.xml中的Servlet。Servlet 3.0中引入的web.xml-less部署样式目前不支持需要使用Jersey MVC模板支持的web应用程序

因此,您需要将servlet更改为过滤器以使其工作

这可能是jersey 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>

jmattheis rest应用程序
上下文配置位置
类路径:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
泽西过滤器
org.glassfish.jersey.servlet.ServletContainer
jersey.config.server.provider.packages
com.stackoverflow.jmattheis.rest
jersey.config.servlet.filter.forwardOn404
真的
jersey.config.server.provider.classnames
org.glassfish.jersey.server.mvc.jsp.JspMvcFeature
jersey.config.server.mvc.templateBasePath.jsp
/WEB-INF/jsp
jersey.config.server.tracing
全部的
泽西过滤器
/*