【问题标题】:Getting 404 trying to render a JSP from Jersey 2获取 404 尝试从 Jersey 2 渲染 JSP
【发布时间】:2016-05-31 19:18:27
【问题描述】:

我正在尝试使用 Jersey 2 和 JSP 制作一个简单的 Web 应用程序示例,并将其部署在 Glassfish 4 上。但是,我在尝试访问我唯一的资源时不断收到 404 错误。

一、项目结构:

以下是重要的类和文件:

web.xml 我将 Jersey 设置为过滤器,而不是 servlet,因为我读到它需要以这种方式定义才能使其与 JSP 一起使用。

<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 错误。

对此的任何想法将不胜感激。 最好的问候

【问题讨论】:

  • 当您启动应用程序时,您是否看到 MoviesController 在 Jersey 日志中注册为资源?

标签: jsp jersey glassfish jersey-2.0 glassfish-4


【解决方案1】:

你的方向是对的。请在 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")。希望它会起作用。

【讨论】:

  • 谢谢,这些更改和 CustomResourceConfig 类中的 property(JspMvcFeature.TEMPLATE_BASE_PATH, "/WEB-INF/jsp") 属性成功了
猜你喜欢
  • 1970-01-01
  • 2013-06-23
  • 2012-07-12
  • 1970-01-01
  • 2016-07-14
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多