通过.jar部署 Jetty 服务器。为什么我无法访问索引?



我正试图从一个jar文件部署一个Jetty服务器。当jar在服务器上运行时,它至少到达Jetty404页面,但无法到达index.html

我启动服务器的主类看起来是这样的,当通过localhost:上的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时,我可以看到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.config.server.provider.packages(请确保禁用使Jersey本身提供静态内容的Jersey配置。让杰蒂负责。(至于如何做到这一点,这是另一个问题,它是泽西岛版本的特定问题,已经在stackoverflow上给出了答案(

最新更新