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

如何从Jar而不是War获得为html文件提供服务的嵌入式Jetty

太叔凌龙
2023-03-14

我一直在寻找如何让嵌入式jetty服务器为包含在同一个JAR中的少数html文件提供服务,但没有成功。这肯定是可能的吗?

如果没有必要,我真的不想经历建设和战争的麻烦。理想情况下,我也不必创建WEB-INFO dir和web.xml文件,尽管我读过的所有解决方案似乎都指向使用WebAppContext来实现这一点。

我阅读了以下链接,但还没有找到在从JAR运行时设置ResourceBase或BaseResource属性的方法。

用不带WAR文件的jetty启动java应用程序

Server server = new Server();
ServerConnector connector = new ServerConnector(server);
connector.setPort(httpPort);
server.addConnector(connector);

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.setWelcomeFiles(new String[]{"welcome.html"});
server.setHandler(context);

ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
holderPwd.setInitParameter("resourceBase","./Relative/Path/To/Html/Files");
holderPwd.setInitParameter("dirAllowed","true");
context.addServlet(holderPwd,"/");

server.start();
server.join();

那么,我必须使用WebAppContext而不是ServletContextHandler吗?如果是,那么我是否也必须添加webapp/web-info/web.xml目录结构?如果我这样做了,那我必须包装成一场战争吗?

共有1个答案

仲君昊
2023-03-14

您需要将上下文的资源基础设置为可以访问静态内容的URL/URI。

注意:您在ServletContext级别而不是DefaultServlet级别设置该值,这样上下文中的所有servlet都可以访问相同的信息,并且ServletContext中与实际文件路径和资源相关的各种方法都是正常的。

public static void main(String[] args) throws Exception
{
    Server server = new Server(8080);

    // Figure out what path to serve content from
    ClassLoader cl = MyEmbeddedJettyMain.class.getClassLoader();
    // We look for a file, as ClassLoader.getResource() is not
    // designed to look for directories (we resolve the directory later)
    URL f = cl.getResource("static-root/hello.html");
    if (f == null)
    {
        throw new RuntimeException("Unable to find resource directory");
    }

    // Resolve file to directory
    URI webRootUri = f.toURI().resolve("./").normalize();
    System.err.println("WebRoot is " + webRootUri);

    ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
    context.setContextPath("/");
    context.setBaseResource(Resource.newResource(webRootUri));
    context.setWelcomeFiles(new String[]{"welcome.html"});

    ServletHolder holderPwd = new ServletHolder("default", DefaultServlet.class);
    holderPwd.setInitParameter("dirAllowed","true");
    context.addServlet(holderPwd,"/");

    server.setHandler(context);

    server.start();
    server.join();
}
 类似资料:
  • 问题内容: 我一直在寻找如何获得嵌入式码头服务器来服务同一罐子中包含的少数html文件的尝试,但没有成功。当然可以吗? 如果没有必要,我真的不想经历建造和打仗的麻烦。理想情况下,尽管我阅读的所有解决方案似乎都指向执行此操作并使用WebAppContext,但我也不必创建WEB- INFO目录和web.xml文件。 在DEV期间通过IDE运行非常简单,代码可以正常工作,看起来像这样。 因此,我必须使

  • 我正在使用Spring Boot创建JavaREST应用程序。我已经成功地加载了这个示例,并尝试将JAR文件转换为Spring Boot站点上显示的WAR文件。我修改了我的pom.xml文件,添加了: 然后我修改了Application.java类来初始化servlet(这是Spring Boot用来替换web.xml文件的): 我拿到了我的护照。WAR文件已生成,但当我将其部署到Tomcat上时

  • 问题内容: 我正在尝试使用嵌入式Jetty构建一个简单的演示应用程序,该应用程序可以从“ html”目录提供静态文件,该目录是当前工作目录的子目录。这个想法是,带有演示jar和内容的目录可以移动到新位置,并且仍然可以使用。 我已经尝试了以下方法的变体,但是我不断得到404。 更新: 这是Jetty教程中记录的解决方案。如正确答案中所述,它使用而不是: 问题答案: 使用代替。

  • 因此,我试图遵循这篇关于如何使用Spring为html文件提供服务的指南:http://spring.io/guides/gs/serving-web-content/ 映射: 使用@Controller引发错误: 编辑:

  • 我正在尝试加载一个“WAR”文件到Spring Boot的嵌入式tomcat服务器。为此,我找到了这样的答案:Spring Boot:如何向嵌入式Tomcat添加另一个WAR文件? 但是在我这样做之后,我发现在这个问题上已经问过的错误:用嵌入的Tomcat部署现有的war,但是没有一个满意的答案。 注意:我知道这是一个重复的问题(我把链接),但当时没有足够的声誉添加一个评论,或能力与作者私下联系,