获取 404 尝试从 Jersey 2 渲染 JSP
Getting 404 trying to render a JSP from Jersey 2
我正在尝试制作一个使用 Jersey 2 和 JSP 的 Web 应用程序的简单示例,并将其部署在 Glassfish 4 上。但是,我在尝试访问我唯一的资源时不断收到 404 错误。
一、项目结构:
这里是重要的类和文件:
web.xml
我将 Jersey 设置为过滤器,而不是 servlet,因为我读到它需要以这种方式定义才能与 JSP.[=21 一起使用=]
<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">
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>jersey</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.xxx.sample-jersey2</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.forwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--<welcome-file-list>-->
<!--<welcome-file>index.html</welcome-file>-->
<!--<welcome-file>index.htm</welcome-file>-->
<!--<welcome-file>movies.jsp</welcome-file>-->
<!--</welcome-file-list>-->
</web-app>
movies.jsp
非常简单:
<html>
<body>
<h2>Listing Movies</h2>
</body>
</html>
自定义 ResourceConfig(我什至不确定我是否需要)
package com.xxx.jersey2.config;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;
public class CustomResourceConfig extends ResourceConfig {
public CustomResourceConfig() {
packages("com.xxx");
register(LoggingFilter.class);
register(JspMvcFeature.class);
// it may be also jersey.config.server.mvc.templateBasePath
property("jersey.config.server.mvc.templateBasePath", "/WEB-INF/jsp");
// ... more properties as needed ...
}
}
还有我的电影控制器:
package com.xxx.jersey2.web;
import com.xxx.jersey2.model.Movie;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import org.glassfish.jersey.server.mvc.Viewable;
@Path("movies")
public class MoviesController {
@GET
@Path("/list")
public Viewable getMovies() {
List<Movie> movies = new ArrayList<Movie>();
movies.add(new Movie("Million Dollar Baby", "Hillary Swank"));
movies.add(new Movie("Toy Story", "Buzz Light Year"));
movies.add(new Movie("Hunger Games", "Jennifer Lawrence"));
return new Viewable("movies.jsp");
}
}
如果我尝试访问 https://localhost:8181/sample-jersey2/
,则会呈现简单的 index.jsp
(仅显示 Hello World 消息)。但是,尝试访问 https://localhost:8181/sample-jersey2/movies/list/
时出现 404 错误。
如有任何想法,我们将不胜感激。
最好的问候
你的方向是正确的。请在 web.xml.
中注册您的自定义资源配置
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.xxx.jersey2.config.CustomResourceConfig</param-value>
</init-param>
您可以删除初始化参数 jersey.config.server.provider.packages,因为您已经在资源配置中这样做了。最后一件事将 return new Viewable("movies.jsp") 更改为 new Viewable("/movies.jsp")。希望它会起作用。
我正在尝试制作一个使用 Jersey 2 和 JSP 的 Web 应用程序的简单示例,并将其部署在 Glassfish 4 上。但是,我在尝试访问我唯一的资源时不断收到 404 错误。
一、项目结构:
这里是重要的类和文件:
web.xml
我将 Jersey 设置为过滤器,而不是 servlet,因为我读到它需要以这种方式定义才能与 JSP.[=21 一起使用=]
<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">
<display-name>Archetype Created Web Application</display-name>
<filter>
<filter-name>jersey</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.xxx.sample-jersey2</param-value>
</init-param>
<init-param>
<param-name>jersey.config.servlet.filter.forwardOn404</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>jersey</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--<welcome-file-list>-->
<!--<welcome-file>index.html</welcome-file>-->
<!--<welcome-file>index.htm</welcome-file>-->
<!--<welcome-file>movies.jsp</welcome-file>-->
<!--</welcome-file-list>-->
</web-app>
movies.jsp
非常简单:
<html>
<body>
<h2>Listing Movies</h2>
</body>
</html>
自定义 ResourceConfig(我什至不确定我是否需要)
package com.xxx.jersey2.config;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature;
public class CustomResourceConfig extends ResourceConfig {
public CustomResourceConfig() {
packages("com.xxx");
register(LoggingFilter.class);
register(JspMvcFeature.class);
// it may be also jersey.config.server.mvc.templateBasePath
property("jersey.config.server.mvc.templateBasePath", "/WEB-INF/jsp");
// ... more properties as needed ...
}
}
还有我的电影控制器:
package com.xxx.jersey2.web;
import com.xxx.jersey2.model.Movie;
import java.util.ArrayList;
import java.util.List;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import org.glassfish.jersey.server.mvc.Viewable;
@Path("movies")
public class MoviesController {
@GET
@Path("/list")
public Viewable getMovies() {
List<Movie> movies = new ArrayList<Movie>();
movies.add(new Movie("Million Dollar Baby", "Hillary Swank"));
movies.add(new Movie("Toy Story", "Buzz Light Year"));
movies.add(new Movie("Hunger Games", "Jennifer Lawrence"));
return new Viewable("movies.jsp");
}
}
如果我尝试访问 https://localhost:8181/sample-jersey2/
,则会呈现简单的 index.jsp
(仅显示 Hello World 消息)。但是,尝试访问 https://localhost:8181/sample-jersey2/movies/list/
时出现 404 错误。
如有任何想法,我们将不胜感激。 最好的问候
你的方向是正确的。请在 web.xml.
中注册您的自定义资源配置 <init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>com.xxx.jersey2.config.CustomResourceConfig</param-value>
</init-param>
您可以删除初始化参数 jersey.config.server.provider.packages,因为您已经在资源配置中这样做了。最后一件事将 return new Viewable("movies.jsp") 更改为 new Viewable("/movies.jsp")。希望它会起作用。