我一直在搜索如何使嵌入式jetty服务器提供同一个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目录结构?如果我这样做,那么我必须打包作为一场战争吗?
1 回答
您需要将Context的资源库设置为可以从中访问静态内容的URL / URI .
注意:您将此设置为
ServletContext
级别,而不是DefaultServlet
级别,这样您上下文中的所有servlet都可以访问相同的信息,并且ServletContext
中与真实文件路径和资源相关的各种方法都是合理的 .