当前位置: 首页 > 面试题库 >

如何从Jar(而非战争)中获取嵌入的Jetty服务html文件

施自明
2023-03-14
问题内容

我一直在寻找如何获得嵌入式码头服务器来服务同一罐子中包含的少数html文件的尝试,但没有成功。当然可以吗?

如果没有必要,我真的不想经历建造和打仗的麻烦。理想情况下,尽管我阅读的所有解决方案似乎都指向执行此操作并使用WebAppContext,但我也不必创建WEB-
INFO目录和web.xml文件。

在DEV期间通过IDE运行非常简单,代码可以正常工作,看起来像这样。

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目录结构?如果我这样做,那么我是否必须打包为战争?


问题答案:

您需要将上下文的资源库设置为可以从中访问静态内容的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();
}


 类似资料:
  • 我一直在寻找如何让嵌入式jetty服务器为包含在同一个JAR中的少数html文件提供服务,但没有成功。这肯定是可能的吗? 如果没有必要,我真的不想经历建设和战争的麻烦。理想情况下,我也不必创建WEB-INFO dir和web.xml文件,尽管我读过的所有解决方案似乎都指向使用WebAppContext来实现这一点。 我阅读了以下链接,但还没有找到在从JAR运行时设置ResourceBase或Bas

  • 问题内容: 已经有很多资源,但是我似乎无法使它正常工作。我究竟做错了什么?jar文件位于: http://www.alexandertechniqueatlantic.ca/multimedia/AT-web-presentation- imp.jar 我用来嵌入的代码是: 我正在使用的测试页位于: http://www.alexandertechniqueatlantic.ca/test.php

  • 问题内容: 我如何知道要从WAR中获取文件的文件参考。 WAR的结构为: WAR SRC -Model -Network structure WebContent META-INF WEB-INF LIB JSP位于WebContent下,我已将config.txt文件放在WebContent文件夹下,并尝试通过 BufferedReader in = new BufferedReader(new

  • 无法创建目录[/tmp/tomcat.9153500015669016883.8080/webapps/blog] 这是tomcat工作目录的布局: 中的断点表示它希望在webapps/中创建目录。此不存在的webapps文件夹取自(来自)。

  • 问题内容: 我讨厌问这样一个模糊的问题,但是我很难找到一个简单的例子。这是我到目前为止的内容: 我可以找到的嵌入式Jetty示例始终显示如下内容,以启动运行的Server实例,但我不知道如何实例化WebSocketServlet。 如何创建可以处理WebSocket连接请求的嵌入式服务器? 问题答案: 更新:2013年12月2日 有关带有WebSocket的嵌入式码头的最新示例,请参见: http

  • 问题内容: 如果我有这样的HTML文件,该如何在Golang中进行操作: 我想将一部分代码嵌入到其他文件的标头标签中,如下所示: 我的尝试: 问题答案: 如果使用或来解析所有模板文件,则模板可以相互引用,它们可以互相包含。 更改您的内容以包括以下内容: 然后是完整的程序(从当前目录解析文件,执行并将结果写入标准输出): 有了它可能看起来像这样: 输出(打印在控制台上):