| career | drupal | java | mac | mysql | perl | scala | uml | unix  

Tomcat example source code file (

This example Tomcat source code file ( is included in the "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Tomcat tags/keywords

hr, http, illegalstateexception, io, ioexception, request, response, response, servlet, servletexception, string, string, stringbuffer, stringbuffer, stringmanager, throwable, throwable, valvebase

The Tomcat source code

 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * See the License for the specific language governing permissions and
 * limitations under the License.

package org.apache.catalina.valves;


import javax.servlet.ServletException;
import javax.servlet.http.HttpServletResponse;

import org.apache.catalina.Globals;
import org.apache.catalina.connector.Request;
import org.apache.catalina.connector.Response;
import org.apache.catalina.util.RequestUtil;
import org.apache.catalina.util.ServerInfo;
import org.apache.catalina.util.StringManager;

 * <p>Implementation of a Valve that outputs HTML error pages.

* * <p>This Valve should be attached at the Host level, although it will work * if attached to a Context.</p> * * <p>HTML code from the Cocoon 2 project.

* * @author Remy Maucherat * @author Craig R. McClanahan * @author <a href="">Nicola Ken Barozzi Aisa * @author <a href="">Stefano Mazzocchi * @author Yoav Shapira * @version $Revision: 543307 $ $Date: 2007-06-01 01:08:24 +0200 (ven., 01 juin 2007) $ */ public class ErrorReportValve extends ValveBase { // ----------------------------------------------------- Instance Variables /** * The descriptive information related to this implementation. */ private static final String info = "org.apache.catalina.valves.ErrorReportValve/1.0"; /** * The StringManager for this package. */ protected static StringManager sm = StringManager.getManager(Constants.Package); // ------------------------------------------------------------- Properties /** * Return descriptive information about this Valve implementation. */ public String getInfo() { return (info); } // --------------------------------------------------------- Public Methods /** * Invoke the next Valve in the sequence. When the invoke returns, check * the response state, and output an error report is necessary. * * @param request The servlet request to be processed * @param response The servlet response to be created * * @exception IOException if an input/output error occurs * @exception ServletException if a servlet error occurs */ public void invoke(Request request, Response response) throws IOException, ServletException { // Perform the request getNext().invoke(request, response); Throwable throwable = (Throwable) request.getAttribute(Globals.EXCEPTION_ATTR); if (response.isCommitted()) { return; } if (throwable != null) { // The response is an error response.setError(); // Reset the response (if possible) try { response.reset(); } catch (IllegalStateException e) { ; } response.sendError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } response.setSuspended(false); try { report(request, response, throwable); } catch (Throwable tt) { ; } } // ------------------------------------------------------ Protected Methods /** * Prints out an error report. * * @param request The request being processed * @param response The response being generated * @param throwable The exception that occurred (which possibly wraps * a root cause exception */ protected void report(Request request, Response response, Throwable throwable) { // Do nothing on non-HTTP responses int statusCode = response.getStatus(); // Do nothing on a 1xx, 2xx and 3xx status // Do nothing if anything has been written already if ((statusCode < 400) || (response.getContentCount() > 0)) return; String message = RequestUtil.filter(response.getMessage()); if (message == null) message = ""; // Do nothing if there is no report for the specified status code String report = null; try { report = sm.getString("http." + statusCode, message); } catch (Throwable t) { ; } if (report == null) return; StringBuffer sb = new StringBuffer(); sb.append("<html>"); sb.append(ServerInfo.getServerInfo()).append(" - "); sb.append(sm.getString("errorReportValve.errorReport")); sb.append("</title>"); sb.append("<style><!--"); sb.append(org.apache.catalina.util.TomcatCSS.TOMCAT_CSS); sb.append("--></style> "); sb.append("</head><body>"); sb.append("<h1>"); sb.append(sm.getString("errorReportValve.statusHeader", "" + statusCode, message)).append("</h1>"); sb.append("<HR size=\"1\" noshade=\"noshade\">"); sb.append("<p><b>type</b> "); if (throwable != null) { sb.append(sm.getString("errorReportValve.exceptionReport")); } else { sb.append(sm.getString("errorReportValve.statusReport")); } sb.append("</p>"); sb.append("<p><b>"); sb.append(sm.getString("errorReportValve.message")); sb.append("</b> <u>"); sb.append(message).append("</u></p>"); sb.append("<p><b>"); sb.append(sm.getString("errorReportValve.description")); sb.append("</b> <u>"); sb.append(report); sb.append("</u></p>"); if (throwable != null) { String stackTrace = getPartialServletStackTrace(throwable); sb.append("<p><b>"); sb.append(sm.getString("errorReportValve.exception")); sb.append("</b> <pre>"); sb.append(RequestUtil.filter(stackTrace)); sb.append("</pre></p>"); int loops = 0; Throwable rootCause = throwable.getCause(); while (rootCause != null && (loops < 10)) { stackTrace = getPartialServletStackTrace(rootCause); sb.append("<p><b>"); sb.append(sm.getString("errorReportValve.rootCause")); sb.append("</b> <pre>"); sb.append(RequestUtil.filter(stackTrace)); sb.append("</pre></p>"); // In case root cause is somehow heavily nested rootCause = rootCause.getCause(); loops++; } sb.append("<p><b>"); sb.append(sm.getString("errorReportValve.note")); sb.append("</b> <u>"); sb.append(sm.getString("errorReportValve.rootCauseInLogs", ServerInfo.getServerInfo())); sb.append("</u></p>"); } sb.append("<HR size=\"1\" noshade=\"noshade\">"); sb.append("<h3>").append(ServerInfo.getServerInfo()).append("</h3>"); sb.append("</body></html>"); try { try { response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); } catch (Throwable t) { if (container.getLogger().isDebugEnabled()) container.getLogger().debug("status.setContentType", t); } Writer writer = response.getReporter(); if (writer != null) { // If writer is null, it's an indication that the response has // been hard committed already, which should never happen writer.write(sb.toString()); } } catch (IOException e) { ; } catch (IllegalStateException e) { ; } } /** * Print out a partial servlet stack trace (truncating at the last * occurrence of javax.servlet.). */ protected String getPartialServletStackTrace(Throwable t) { StringBuffer trace = new StringBuffer(); trace.append(t.toString()).append('\n'); StackTraceElement[] elements = t.getStackTrace(); int pos = elements.length; for (int i = 0; i < elements.length; i++) { if ((elements[i].getClassName().startsWith ("org.apache.catalina.core.ApplicationFilterChain")) && (elements[i].getMethodName().equals("internalDoFilter"))) { pos = i; } } for (int i = 0; i < pos; i++) { if (!(elements[i].getClassName().startsWith ("org.apache.catalina.core."))) { trace.append('\t').append(elements[i].toString()).append('\n'); } } return trace.toString(); } } </pre> <div id="after_source_code"> <h2>Other Tomcat examples (source code examples)</h2> <p>Here is a short list of links related to this Tomcat source code file:</p> <ul> <li><a href="/java/jwarehouse"><img src="/images/scw/find.png" border="0"> The search page</a></li> <li><a href="index.shtml"><img src="/images/scw/folder.png" border="0"> Other Tomcat source code examples at this package level</a></li> <li><a href="/java/jwarehouse/about.shtml"><img src="/images/scw/information.png" border="0"> Click here to learn more about this project</a></li> </ul> </div> </td> </tr> </table> </div> </div> <div style="padding-top: 1em; width: 310px; margin-left: auto; margin-right: auto; table {border-collapse: collapse; border: none;}; tr {border-collapse: collapse; border: none; text-align: center;};"> <table width="100%" cellspacing="0" cellpadding="0"> <tr> <td colspan="2" style="border-collapse: collapse; border: none; text-align: center;};"> <em>... this post is sponsored by my books ...</em> </td> </tr> <tr> <td width="150" style="border-collapse: collapse; border: none; text-align: center;};"> <a href=""><img src="/images/books/scala-cookbook-v2-cover-220h.jpg" title="The Scala Cookbook, by Alvin Alexander" height="220" /> <br /><span style="opacity: 0.4;">#1 New Release!</span></a> </td> <td width="150" style="border-collapse: collapse; border: none; text-align: center; padding-left: 8px;"> <a href=""><img src="/images/books/functional-programming-simplified-small.jpg" title="Functional Programming, Simplified, by Alvin Alexander" height="220" /> <br /><span style="opacity: 0.4;">FP Best Seller</span></a> </td> </tr> </table> <p> </p> </div> <div id="whats_new"> <h2>new blog posts</h2> <div id="whats_new_list"> <ul> <li><a class="whats_new_link" href="/scala/learn-functional-programming-book">Book: Learn Functional Programming Without Fear (FP for OOP developers)</a></li> <li><a class="whats_new_link" href="/photos/learn-functional-programming-book-number-1-java-release">Learn Functional Programming: A #1 new Java release</a></li> <li><a class="whats_new_link" href="/photos/number-1-best-selling-java-functional-programming-book">#1 best-selling book in Java and Functional Programming</a></li> <br/> <li><a class="whats_new_link" href="/photos/scala-collections-methods-demonstrated-with-fruit">Demonstrating Scala collections methods with fruit</a></li> <li><a class="whats_new_link" href="/misc/zen-way-of-calligraphy-zen-mind-beginners-suzuki">The Zen way of calligraphy ...</a></li> <li><a class="whats_new_link" href="/photos/simplest-fp-book-no-monoids-monads-category-theory">Simple FP book: No monads. No monoids. No category theory. Just FP code.</a></li> <br/> <li><a class="whats_new_link" href="/photos/best-2022-holiday-programming-book-gift-java-kotlin-oop">Best 2022 holiday programming gift book (for Java/Kotlin/OOP developers)</a></li> <li><a class="whats_new_link" href="/misc/java-kotlin-oop-programmer-holiday-gift-2022-ideas">Java/Kotlin programmer holiday gift, 2022 (book)</a></li> <li><a class="whats_new_link" href="/photos/free-scala-functional-programming-training-courses">Kickstarter: Free Scala and functional programming training courses</a></li> <br/> <br/> </div> </ul> </div> <p> </p> <p align="center"><font color="#000000" size="2" face="Verdana,Arial">Copyright 1998-2021 Alvin Alexander,<br/> All Rights Reserved.<br/> <br/> A percentage of advertising revenue from<br/> pages under the <a href="/java/jwarehouse">/java/jwarehouse</a> URI on this website is<br/> paid back to open source projects.</p> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-35326316-1']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + ''; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> <script> shuffle(books); var div = document.getElementById("leftcol"); var pre = '<div style="margin: 0; padding-right: 1.6em"><h2 align="center">favorite books</h2>'; var post = '</div>'; if (adblock) { var str = books.slice(0,3).join(" "); div.insertAdjacentHTML('beforeend', pre + str + post); } else { var str = books.slice(0,1).join(" "); div.insertAdjacentHTML('beforeend', pre + str + post); } </script> <p style="padding-bottom: 80px;"> </p> </body>