如何在嵌入式 Jetty 中配置 ErrorPageErrorHandler?
HowTo configure the ErrorPageErrorHandler in embedded Jetty?
是否可以配置 ErrorPageErrorHandler,使其在未找到 content/service 时重定向到静态页面?
这是我的代码:
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 - No error page found
index.html"
。 way/syntax 定义 URI 的正确方法是什么?
提前致谢!
之前在
已经回答了这个问题
不要混用 ResourceHandler
和 ServletContextHandler
除非你 真的 知道你在做什么,并且完全理解 javax.servlet.ServletContext
的本质以及它为 table.
带来的所有规则
另请参阅:
- Serving static files from alternate path in embedded Jetty
这是您的设置示例,没有使用 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
是否可以配置 ErrorPageErrorHandler,使其在未找到 content/service 时重定向到静态页面?
这是我的代码:
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 - No error page found index.html"
。 way/syntax 定义 URI 的正确方法是什么?
提前致谢!
之前在
已经回答了这个问题不要混用 ResourceHandler
和 ServletContextHandler
除非你 真的 知道你在做什么,并且完全理解 javax.servlet.ServletContext
的本质以及它为 table.
另请参阅:
- Serving static files from alternate path in embedded Jetty
这是您的设置示例,没有使用 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