【发布时间】: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