当前位置: 首页 > 知识库问答 >
问题:

通过。jar部署Jetty服务器。为什么我不能访问索引?

赵英范
2023-03-14
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();
    }
}

当我运行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

谢了!

共有1个答案

景令秋
2023-03-14

使用从HtmlDirectory获得的URL作为整个ServletContexthHandler的基本资源。

详情见先前答复: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配置。让杰蒂负责。(至于如何做到这一点,这是另一个问题,这是Jersey版本特定的,在stackoverflow上已经有了答案)

 类似资料:
  • 我了解在lambda中捕获此(修改对象属性)的正确方法如下: 但我对我所看到的以下特点感到好奇: 我感到困惑(并希望得到回答)的奇怪之处在于,为什么以下方法有效: 以及为什么我无法通过引用明确捕获此内容:

  • 我是K8s的新手,所以仍然试图让我的头脑周围的事情。我一直在研究部署,并能够理解它们将有多有用。但是,我不明白为什么它们不支持服务(只支持副本集和豆荚)。

  • 以下是JDK11的源代码: 使用访问器而不是直接使用字段有什么意义?既然访问器方法是最终的,为什么不声明:并删除访问器呢?

  • 我在Java中使用嵌套类时遇到问题,有人知道为什么Java不允许我这样做吗?

  • 当我在tomcat服务器上运行它时,它在服务页面中返回以下错误:我不能访问WSDL和SOAP 我有这个错误: 类型异常报告 servlet[CXFServlet]的“servlet.init()”消息引发了异常 说明服务器遇到内部错误,导致它无法满足请求。

  • 当使用NodePort服务和Kubernetes入口公开时,SFTP服务器不可访问。但是,如果使用LoadBalancer类型的服务公开相同的部署,它就可以正常工作。 然而,我尝试使用GKE Ingress公开相同的部署,但它不起作用。以下是入口的清单: 将外部IP分配给入口后(我知道完全设置需要几分钟),开始工作,但不工作。 下面是我从服务器得到的错误: 在上面的设置中,我做错了什么?为什么Lo