Java ResourceHandler使用jetty 9停止托管文件-404未找到错误(使用jetty 8可以正常工作)
显然,Java ResourceHandler使用jetty 9停止托管文件-404未找到错误(使用jetty 8可以正常工作),java,eclipse,jetty,Java,Eclipse,Jetty,显然,ResourceHandler停止使用jetty 9托管文件-404未找到错误(使用jetty 8可以正常工作)。代码如下: ResourceHandler resourceHandler = new ResourceHandler(); resourceHandler.setDirectoriesListed(true); resourceHandler.setResourceBase("some_resource_base"); HandlerList
ResourceHandler
停止使用jetty 9托管文件-404未找到错误(使用jetty 8可以正常工作)。代码如下:
ResourceHandler resourceHandler = new ResourceHandler();
resourceHandler.setDirectoriesListed(true);
resourceHandler.setResourceBase("some_resource_base");
HandlerList handlerList = new HandlerList();
handlerList.setHandlers(new Handler[]{servletHandler, resourceHandler});
server.setHandler(handlerList);
server.start();
假设
servletHandler
是ServletContextHandler
(注意:最好不要是实际的ServletHandler
,因为它是一个内部类,不能直接实例化)
然后将永远不会调用resourceHandler
,因为ServletContextHandler
链末尾的DefaultServlet
处理(或Default404Servlet
)将始终响应,甚至不允许执行resourceHandler
如果您有一个
ServletContextHandler
,不要使用ResourceHandler
在ServletContextHandler
中使用DefaultServlet
来设置和服务您的静态文件。如果有人正在寻找一个工作示例,这就是我将ResourceHandler与ContextHandler组合的方式(部分基于当前码头文件:)
示例不完整,什么是
servletHandler
?这是我一直在寻找的。希望它也能在这个线程上帮助其他人。谢谢Joakim。
srv = new Server();
ServerConnector srvConn = new ServerConnector(srv);
srvConn.setHost("localhost");
srvConn.setPort(8080);
srvConn.setIdleTimeout(30000);
srv.addConnector(srvConn);
//used for webSocket comm later:
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
//for static content:
ResourceHandler resH = new ResourceHandler();
resH.setDirectoriesListed(true);
resH.setWelcomeFiles(new String[]{ "index.html" });
resH.setResourceBase("./my/web/root");
ContextHandler resCtx = new ContextHandler();
resCtx.setHandler(resH);
//Add both ContextHandlers to server:
ContextHandlerCollection handlers = new ContextHandlerCollection(resCtx, context);
srv.setHandler(handlers);