为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

RISEBY 2021-12-22 19:19:07
我正在尝试从 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我可以看到html目录,它的内容在那里:0 Thu Nov 01 11:48:46 UTC 2018 html/2258 Thu Nov 01 11:48:46 UTC 2018 html/formRequest.js871 Thu Nov 01 11:48:46 UTC 2018 html/index.html
查看完整描述

1 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

使用您从中获得的 URLhtmlDirectory作为整个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 上提供了答案)


查看完整回答
反对 回复 2021-12-22
  • 1 回答
  • 0 关注
  • 132 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信