public static void handleRequest(HttpServerExchange exchange, final ServletRequestContext servletRequestContext, final Throwable exception) throws IOException {
HttpServletRequestImpl req = servletRequestContext.getOriginalRequest();
StringBuilder sb = new StringBuilder();
sb.append("<html><head><title>ERROR</title>");
sb.append(ERROR_CSS);
sb.append("</head><body><div class=\"header\"><div class=\"error-div\"></div><div class=\"error-text-div\">Error processing request</div></div>");
writeLabel(sb, "Context Path", req.getContextPath());
writeLabel(sb, "Servlet Path", req.getServletPath());
writeLabel(sb, "Path Info", req.getPathInfo());
writeLabel(sb, "Query String", req.getQueryString());
writeLabel(sb, "Stack Trace", "");
sb.append("<pre>");
StringWriter stringWriter = new StringWriter();
exception.printStackTrace(new PrintWriter(stringWriter));
sb.append(escapeBodyText(stringWriter.toString()));
sb.append("</pre></body></html>");
servletRequestContext.getOriginalResponse().setContentType("text/html");
servletRequestContext.getOriginalResponse().setCharacterEncoding("UTF-8");
try {
ServletOutputStream out = servletRequestContext.getOriginalResponse().getOutputStream();
out.write(sb.toString().getBytes(StandardCharsets.UTF_8));
out.close();
} catch (IllegalStateException e) {
PrintWriter writer = servletRequestContext.getOriginalResponse().getWriter();
writer.write(sb.toString());
writer.close();
}
}