【问题标题】:ResourceHandler stop hosting files with jetty 9 - 404 not found error (works fine with jetty 8)ResourceHandler stop hosting files with jetty 9 - 404 not found 错误(适用于 jetty 8)
【发布时间】:2015-04-05 10:54:02
【问题描述】:

显然,ResourceHandler 停止使用 jetty 9 托管文件 - 404 not found 错误(适用于 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 是什么?

标签: java eclipse jetty


【解决方案1】:

假设servletHandlerServletContextHandler

(注意:最好不要是实际的ServletHandler,因为这是一个内部类,不能直接实例化)

那么resourceHandler 将永远不会被调用,因为ServletContextHandler 链末尾的DefaultServlet 处理(或Default404Servlet)将始终响应,甚至不允许resourceHandler 执行。

如果您有ServletContextHandler,请不要使用ResourceHandler,使用DefaultServlet 中的ServletContextHandler 来设置和提供静态文件。

【讨论】:

【解决方案2】:

如果有人正在寻找一个可行的示例,这就是我将 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 2012-09-09
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    相关资源
    最近更新 更多