use*_*021 1 html java jar jetty
我一直在寻找如何让嵌入式码头服务器为包含在同一个 jar 中的少数 html 文件提供服务的方法,但没有成功。这当然有可能吗?
如果不需要的话,我真的不想经历建造和参与战争的麻烦。理想情况下,我也不必创建 WEB-INFO 目录和 web.xml 文件,尽管我读过的所有解决方案似乎都指向这样做并使用 WebAppContext。
我已阅读以下链接,但还没有找到从 jar 运行时设置 ResourceBase 或 BaseResource 属性的方法。
为嵌入式 Jetty 指定 JAR“resources/webapp”文件夹的 ResourceBase 的正确 URL 是什么?
在 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();
Run Code Online (Sandbox Code Playgroud)
那么,我是否必须使用 WebAppContext 而不是 ServletContextHandler?如果是,那么我是否也必须添加 webapp/WEB-INFO/web.xml 目录结构?如果我这样做,那么我是否必须打包成一场战争?
Joa*_*elt 10
您需要将 Context 的 Resource Base 设置为可以访问静态内容的 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();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5525 次 |
| 最近记录: |