我正在使用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应用程序
答案 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
。