无法使用Jersey解析模板

时间:2015-02-14 14:11:06

标签: java jsp model-view-controller jetty

我正在使用Jersey创建一个简单的Web服务。我想返回JSP名称home.jsp,但在使用http://localhost:{port}/home端点时总是会出现以下错误:

  

模板名称/WebRoot/views/home.jsp无法解析为   完全限定的模板名称

我做错了什么?


项目布局:

-src/main/java
   -resource
       -jsp
         -HomeResource.java
       -rest
         -HomeRestResource.java (Note rest endpoints are working fine)
-WebRoot
   -views
      -home.jsp
   -WEB-INF
      -web.xml

HomeResource.java

@Path("/home")
public class HomeResource{

    private final static String RESOURCE_PATH = "/WebRoot/views/home.jsp";

    @GET
    public Viewable getView() {
        return new Viewable(RESOURCE_PATH);
    }
}

针对home.jsp

<head>
</head>
<body>
    <h1>Test Service</h1>
</body>

的web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <filter>
        <filter-name>jersey</filter-name>
        <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer
        </filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>resource</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath
            </param-name>
            <param-value>/WebRoot/views</param-value>
        </init-param>

        <init-param>
            <param-name>com.sun.jersey.config.property.WebPageContentRegex
            </param-name>
            <param-value>/(images|js|styles|(WebRoot/views))/.*</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>jersey</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

其他笔记

我正在使用Jetty服务器来运行此Web应用程序

1 个答案:

答案 0 :(得分:0)

<init-param>
    <param-name>com.sun.jersey.config.property.JSPTemplatesBasePath
    </param-name>
    <param-value>/WebRoot/views</param-value>
</init-param>

在这里,您要告诉Jersey将/WebRoot/views放在JSP路径的前面。

private final static String RESOURCE_PATH = "/WebRoot/views/home.jsp";

这里您说的是JSP路径为/WebRoot/views/home.jsp

因此,泽西岛可能正在寻找/WebRoot/views/WebRoot/views/home.jsp,但找不到它。

我建议删除该init-param或至少将值设置为/而不是/WebRoot/views