使用 Jersey ServletHolder 时无法从 Jetty ResourceBase 文件访问静态资源

Can't access static resources from Jetty ResourceBase files when using a Jersey ServletHolder

我正在努力将现有的 war 项目移植到嵌入式 Jetty。我已经尝试了大约 5 种不同的服务器设置方法,下面是唯一对我有用的方法:

public class WebApp {

  public static void main(String[] args) throws Exception { 
    Server server = new Server(8080);

    ResourceConfig resourceConfig = new ResourceConfig();       
    resourceConfig.packages(HelloWorldResource.class.getPackage().getName(),GoodbyeWorldResource.class.getPackage().getName());
    ServletContainer servletContainer = new ServletContainer(resourceConfig);
    ServletHolder sh = new ServletHolder(servletContainer);  

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    context.setResourceBase("../src/main/webapp");
    context.addServlet(sh, "/*");
    server.setHandler(context);

    server.start();
    server.join();
  }
}

唯一的问题是 setResourceBase 似乎不起作用;我无法访问我的 webapp 目录中的任何 html 文件(尽管我可以使用相同的相对路径在我的代码中将它们作为文件读取)。我肯定在这里遗漏了一些简单的东西。

首先,不要对基本资源使用相对路径,而是使用完全限定路径。

有关此技术的 2 个示例,请参阅 embedded-jetty-cookbook 项目:

除此之外,您遇到的问题似乎是您正在使用 Jersey 并假设 Jetty 正在为您提供静态资源。

使用 Jersey 时,Jersey 本身将提供静态资源,而不会让 Jetty 实际提供这些静态文件。