【问题标题】:Cannot resolve template using Jersey无法使用 Jersey 解析模板
【发布时间】:2015-02-14 14:11:05
【问题描述】:

我正在使用 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 服务器来运行这个网络应用程序

【问题讨论】:

  • WebRoot 是您自己创建的文件夹吗?
  • @peeskillet 可能是gradle插件的结果,我觉得真的没必要
  • 如果你没有创建它,我猜它不是在应用程序的一部分构建的。大多数 IDE 在项目资源管理器中有一个根文件夹视图(但它不是应用程序的一部分)。也许这就是你所看到的。我会尝试在路径中摆脱它,看看会发生什么
  • @peeskillet 这似乎有效!我想知道为什么...
  • 我以前从未将 gradle 用于 web 应用程序。 Maven 使用不同的结构。它有一个不包含在构建中的webapp 文件夹。我想这就是 gradle 所做的。但是您应该在实际的.war 文件中查找。在那里你会找到你的答案。要么在服务器中找到爆炸的战争,要么自己爆炸。您很可能会看到WebRoot 文件夹不存在

标签: java jsp model-view-controller jetty


【解决方案1】:
<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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多