[英]Deploying Jetty server via .jar. Why can't I access the index?
我正在尝试从 jar 文件部署 Jetty 服务器。 jar 在服务器上运行时,它至少会到达 Jetty 404 页面,但无法到达index.html
。
我用于启动服务器的主类如下所示,并且在本地主机上通过 IDE 运行时在本地运行良好:
public static void main(String[] args) {
Server server = new Server(8080);
ServletContextHandler servletContextHandler = new ServletContextHandler(NO_SESSIONS);
servletContextHandler.setContextPath("/");
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holderPwd = new ServletHolder("default", defaultServlet);
final URL htmlDirectory = JerseyApplication.class.getResource("/html");
holderPwd.setInitParameter("resourceBase", htmlDirectory.getFile());
servletContextHandler.addServlet(holderPwd, "/*");
server.setHandler(servletContextHandler);
ServletHolder servletHolder = servletContextHandler.addServlet(ServletContainer.class, "/api/*");
servletHolder.setInitOrder(0);
servletHolder.setInitParameter(
"jersey.config.server.provider.packages",
"com.x.y.z.parser");
try {
LOGGER.info("Starting server");
server.start();
server.join();
}
catch (Exception ex) {
LOGGER.error("Server failed to start - Aborting");
ex.printStackTrace();
}
finally {
LOGGER.info("Destroying server");
server.destroy();
}
}
所有 html 内容都在src/main/resources/html
目录中。
当我运行jar tvf jarfile.jar | grep html
jar tvf jarfile.jar | grep html
我可以看到html
目录,它的内容在那里:
0 Thu Nov 01 11:48:46 UTC 2018 html/
2258 Thu Nov 01 11:48:46 UTC 2018 html/formRequest.js
871 Thu Nov 01 11:48:46 UTC 2018 html/index.html
谢谢!
使用从htmlDirectory
获得的 URL 作为整个ServletContextHandler
的基本资源。
有关详细信息,请参阅先前的答案: https : //stackoverflow.com/a/39019797/775715
final URL htmlDirectory = JerseyApplication.class.getResource("/html");
// TODO: Handle error if htmlDirectory == null
ServletContextHandler servletContextHandler = new ServletContextHandler(NO_SESSIONS);
servletContextHandler.setContextPath("/");
servletContextHandler.setBaseResource(Resource.newResource(htmlDirectory));
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holderPwd = new ServletHolder("default", defaultServlet);
// holderPwd.setInitParameter("resourceBase", htmlDirectory.getFile()); <-- not needed here
servletContextHandler.addServlet(holderPwd, "/"); // NOTE: MUST be "/" not "/*"!
最后一件事,您似乎在使用 Jersey。 (又名jersey.config.server.provider.packages
)确保禁用使 Jersey 本身提供静态内容的 Jersey 配置。 让码头负责。 (至于这是如何完成的,这是另一个问题,这是特定于 Jersey 版本的,并且已经在 stackoverflow 上提供了答案)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.