int getStatus(Exception e) { if (e instanceof JavaScriptException) { JavaScriptException je = (JavaScriptException) e; Object value = ((ScriptableObject) je.getValue()).get("message", null); if (value != null) { String status = Utility.find(value.toString(), "^\\d\\d\\d\\b"); if (status != null) return Integer.parseInt(status); } } return 500; }
@Override public void service(HttpServletRequest request, HttpServletResponse response) throws IOException { response.setContentType("text/html"); String path = request.getRequestURI(); // use routes if present if (this.routes != null) { String route = this.routes.getProperty(path); if (route != null) { path = route; // then we also need to replace the HttpServletRequest.getRequestURI method // request = getRequestWrapper(request, path); } } if (path.endsWith("/")) path += "index"; String source = null; // check for changes first if (this.debug && contextCache.checkForChanges()) { if (this.pageInfoCache != null) this.pageInfoCache.clear(); } ScriptContext context = contextCache.getContext(); try { serve(request, response, context, path, null); } catch (Exception e) { int status = getStatus(e); response.setStatus(status); response.setContentType("text/plain"); System.out.println(e.toString()); if (errorPath != null && status >= 500) { try { serve(request, response, context, errorPath, e); } catch (Exception f) { e.printStackTrace(response.getWriter()); response.getWriter().write("ERROR IN ERROR HANDLER PAGE!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"); f.printStackTrace(response.getWriter()); } } else if (debug && status == 500) { e.printStackTrace(response.getWriter()); } else if (e instanceof JavaScriptException) { JavaScriptException je = (JavaScriptException) e; response.getWriter().write(je.getValue().toString()); } else { response.getWriter().write(e.getMessage()); } } finally { contextCache.returnContext(context); } }