使用 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 项目:
- Establishing a Base Resource via Classpath Reference.
- Establishing a Base Resource via File System Reference
除此之外,您遇到的问题似乎是您正在使用 Jersey 并假设 Jetty 正在为您提供静态资源。
使用 Jersey 时,Jersey 本身将提供静态资源,而不会让 Jetty 实际提供这些静态文件。
我正在努力将现有的 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 项目:
- Establishing a Base Resource via Classpath Reference.
- Establishing a Base Resource via File System Reference
除此之外,您遇到的问题似乎是您正在使用 Jersey 并假设 Jetty 正在为您提供静态资源。
使用 Jersey 时,Jersey 本身将提供静态资源,而不会让 Jetty 实际提供这些静态文件。