【问题标题】:HowTo configure the ErrorPageErrorHandler in embedded Jetty?如何在嵌入式 Jetty 中配置 ErrorPageErrorHandler?
【发布时间】:2018-11-22 17:23:34
【问题描述】:

如果没有找到内容/服务,是否可以将 ErrorPageErrorHandler 配置为重定向到静态页面?

这是我的代码:

server = new Server(port);

    Resource webRoot = Resource.newResource(webContent);
    if (!webRoot.exists()) {
        logger.warn("Unable to find root resource:" + webRoot.getName());
    } else {
        logger.info("Root resource is " + webRoot.getName());
    }

    ResourceHandler res = new ResourceHandler();
    res.setBaseResource(webRoot);
    res.setDirAllowed(false);

    //servlet handler
    ServletContextHandler servletCtx = new ServletContextHandler(ServletContextHandler.SESSIONS);
    servletCtx.setContextPath("/service");
    servletCtx.addServlet(new ServletHolder("sample", new MyServletSample()), "/sample");

    ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
    errorHandler.addErrorPage(404, "index.html");
    servletCtx.setErrorHandler(errorHandler);

    // static file handler
    ContextHandler staticCtx = new ContextHandler("/");
    staticCtx.setBaseResource(webRoot);
    staticCtx.setHandler(res);


    // add handlers
    HandlerList handlerList = new HandlerList();
    handlerList.addHandler(servletCtx);
    handlerList.addHandler(staticCtx);

    // add handerList to server
    server.setHandler(handlerList);

这段代码显示了 localhost:8080 上的 index.html,我可以访问示例服务 http://localhost:8080/service/sample。但是,如果发生“404 Not Found”之类的错误,我想显示一个静态错误页面(即文档)。

使用此代码,错误处理程序会记录:

"WARN o.e.j.server.handler.ErrorHandler - 未找到错误页面 index.html"

。定义 URI 的正确方法/语法是什么?

提前致谢!

【问题讨论】:

  • 为什么要将静态与 ServletContextHandler 分开?

标签: jetty http-status-code-404 embedded-jetty custom-error-pages


【解决方案1】:

之前在https://stackoverflow.com/a/32383973/775715回答过这个问题

不要将ResourceHandlerServletContextHandler 混用,除非您真的知道自己在做什么,并且完全理解javax.servlet.ServletContext 的本质以及它带来的所有规则。

另见:

这是一个使用 NO ResourceHandler、1 个 ServletContextHandler 和一个提供静态文件服务的 DefaultServlet 的设置示例。

// servlet handler
ServletContextHandler servletCtx = new ServletContextHandler(ServletContextHandler.SESSIONS);
servletCtx.setContextPath("/");
servletCtx.setBaseResource(webRoot); // what static content to serve
servletCtx.setWelcomeFiles(new String[] { "index.html" });
servletCtx.addServlet(new ServletHolder("sample", new MyServletSample()), "/service/sample");

ErrorPageErrorHandler errorHandler = new ErrorPageErrorHandler();
errorHandler.addErrorPage(404, "/index.html");
servletCtx.setErrorHandler(errorHandler);

// static file serving, and context based error handling
ServletHolder defaultServ = new ServletHolder("default", DefaultServlet.class);
defaultServ.setInitParameter("dirAllowed","false");
servletCtx.addServlet(defaultServ,"/");

// add handlers
HandlerList handlerList = new HandlerList();
handlerList.addHandler(servletCtx);
handlerList.addHandler(new DefaultHandler()); // non-context error handling

【讨论】:

    猜你喜欢
    • 2013-11-01
    • 1970-01-01
    • 2017-07-05
    • 2011-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多