【发布时间】:2016-02-23 02:40:30
【问题描述】:
我一直在寻找如何让嵌入式码头服务器为同一个 jar 中包含的少量 html 文件提供服务,但没有成功。这肯定是可能的吗?
如果没有必要,我真的不想经历建造和打仗的麻烦。理想情况下,我也不必创建 WEB-INFO 目录和 web.xml 文件,尽管我读过的所有解决方案似乎都指向这样做并使用 WebAppContext。
我已阅读以下链接,但没有找到从 jar 运行时设置 ResourceBase 或 BaseResource 属性的方法。
Start java application with jetty without WAR file
What is correct URL to specify ResourceBase of JAR "resources/webapp" folder for embedded Jetty?
Embedded Jetty looking for files inside its Jar file
在 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 目录结构?而且如果我这样做了,那我是不是必须打包成战争?
【问题讨论】:
-
我没有看到来自3rd question 的
setResourceBase呼叫;应该这样做。或者您可以指定您自己的 servlet 实现并使用ClassLoader.getResource()。 -
肯尼 - 我以为我是通过以下方式做到这一点的? holderPwd.setInitParameter("resourceBase",...)
-
你可能是对的。您是否尝试过将
this.class.getClassLoader().getResource("com/company/project/mywebdir").toExternalForm();之类的内容作为第二个参数传递?你得到了什么结果,404? -
Kenney,externalForm() 提供了一个路径,但不幸的是它只会导致 404s