Hol*_*osa 53 java jetty embedded-jetty
我正在尝试构建一个带有嵌入式Jetty的简单演示应用程序,该应用程序提供来自"html"目录的静态文件,该目录是当前工作目录的子目录.我们的想法是,包含演示jar和内容的目录可以移动到新位置并仍然有效.
我尝试过以下各种变体,但我一直在使用404.
ServletContextHandler context =
new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.getInitParams().put(
"org.eclipse.jetty.servlet.Default.resourceBase", "html");
context.addServlet(new ServletHolder(new DefaultServlet()), "/html");
Server jetty = new Server(8080);
jetty.setHandler(context);
jetty.start();
Run Code Online (Sandbox Code Playgroud)
更新:这是Jetty教程中记录的解决方案.如正确答案所述,它使用的是a ResourceHandler而不是ServletContextHandler:
Server server = new Server();
SelectChannelConnector connector = new SelectChannelConnector();
connector.setPort(8080);
server.addConnector(connector);
ResourceHandler resource_handler = new ResourceHandler();
resource_handler.setDirectoriesListed(true);
resource_handler.setWelcomeFiles(new String[]{ "index.html" });
resource_handler.setResourceBase(".");
HandlerList handlers = new HandlerList();
handlers.setHandlers(new Handler[] { resource_handler, new DefaultHandler() });
server.setHandler(handlers);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
小智 33
用a ResourceHandler代替ServletContextHandler.
xor*_*cus 19
使用a ResourceHandler和使用a DefaultServlet(使用a ServletContextHandler)提供静态内容之间存在重要差异.
当a ResourceHandler(或HandlerList持有多个ResourceHandler实例)被设置为上下文处理程序时,它直接处理请求并忽略任何已注册的javax.servlet.Filter实例.
如果你需要过滤器,唯一的方法是使用a ServletContextHandler,向其中添加过滤器,然后添加a DefaultServlet,最后设置基础Resource.
base Resource表示ResourceHandler将初始化的resourceBase路径.如果从多个目录提供静态资源,请使用a ResourceCollection(仍然是a Resource)并使用resourceBase字符串数组初始化它:
ResourceCollection resourceCollection = new ResourceCollection();
resourceCollection.setResources(getArrayOfResourceBaseDirs());
Run Code Online (Sandbox Code Playgroud)
小智 16
在我的小型Web服务器中,我有两个文件,一个index.html和一个info.js位于下面/src/webapp,我希望它们是从嵌入式jetty Web服务器提供的.
这就是我用静态内容解决问题的方法.
Server server = new Server(8080);
ServletContextHandler ctx = new ServletContextHandler();
ctx.setContextPath("/");
DefaultServlet defaultServlet = new DefaultServlet();
ServletHolder holderPwd = new ServletHolder("default", defaultServlet);
holderPwd.setInitParameter("resourceBase", "./src/webapp/");
ctx.addServlet(holderPwd, "/*");
ctx.addServlet(InfoServiceSocketServlet.class, "/info");
server.setHandler(ctx);
Run Code Online (Sandbox Code Playgroud)
像魅力一样工作!
| 归档时间: |
|
| 查看次数: |
59570 次 |
| 最近记录: |