Как настроить ErrorPageErrorHandler во встроенной Jetty? - PullRequest
0 голосов
/ 13 июня 2018

Можно ли настроить 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);

Этот код показываетme index.html на localhost: 8080, и я могу получить доступ к образцу службы http://localhost:8080/service/sample. Однако я хочу показать страницу статической ошибки (т. е. документацию), которая будет отображаться, если произошла ошибка типа «404 Not Found».

С этим кодом обработчик ошибок регистрирует:

"WARN oejserver.handler.ErrorHandler - страница ошибок не найдена index.html"

.Каков правильный способ / синтаксис для определения URI?

Заранее спасибо!

1 Ответ

0 голосов
/ 13 июня 2018

Ответ на этот вопрос был ранее на https://stackoverflow.com/a/32383973/775715

Не смешивайте ResourceHandler и ServletContextHandler, если вы ДЕЙСТВИТЕЛЬНО не знаете, что делаете, и полностью не понимаете природу 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
...