亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 .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 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號