【发布时间】: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