ResourceHandler 停止托管带有码头 9 的文件 - 404 未找到错误(适用于码头 8)
ResourceHandler stop hosting files with jetty 9 - 404 not found error (works fine with jetty 8)
显然,ResourceHandler
停止使用 jetty 9 托管文件 - 404 not found error(适用于 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();
这个带有已接受答案的问题似乎不适用于 jetty 9 - Serving static files w/ embedded Jetty
假设 servletHandler
是 ServletContextHandler
(注意:最好不要是实际的ServletHandler
,因为那是内部的class,不能直接实例化)
那么 resourceHandler
将永远不会被调用,因为 ServletContextHandler
链末端的 DefaultServlet
处理(或 Default404Servlet
)将始终响应,不允许resourceHandler
甚至执行。
如果您有 ServletContextHandler
,请不要使用 ResourceHandler
使用 ServletContextHandler
中的 DefaultServlet
来设置和提供您的静态文件。
万一有人正在寻找一个工作示例,这就是我将 ResourceHandler 与 ContextHandler 组合在一起的方式(部分基于当前的 Jetty 文档:Jetty documentation)
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);
显然,ResourceHandler
停止使用 jetty 9 托管文件 - 404 not found error(适用于 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();
这个带有已接受答案的问题似乎不适用于 jetty 9 - Serving static files w/ embedded Jetty
假设 servletHandler
是 ServletContextHandler
(注意:最好不要是实际的ServletHandler
,因为那是内部的class,不能直接实例化)
那么 resourceHandler
将永远不会被调用,因为 ServletContextHandler
链末端的 DefaultServlet
处理(或 Default404Servlet
)将始终响应,不允许resourceHandler
甚至执行。
如果您有 ServletContextHandler
,请不要使用 ResourceHandler
使用 ServletContextHandler
中的 DefaultServlet
来设置和提供您的静态文件。
万一有人正在寻找一个工作示例,这就是我将 ResourceHandler 与 ContextHandler 组合在一起的方式(部分基于当前的 Jetty 文档:Jetty documentation)
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);