geirm 01/05/11 05:07:49
Modified: examples/forumdemo/WEB-INF/src/org/apache/velocity/demo
ControllerServlet.java
Log:
Added support for the app exceptions to make for better debugging, and
put that message to the browser as well via a VelocityServlet.error()
override.
Revision Changes Path
1.3 +62 -4
jakarta-velocity/examples/forumdemo/WEB-INF/src/org/apache/velocity/demo/ControllerServlet.java
Index: ControllerServlet.java
===================================================================
RCS file:
/home/cvs/jakarta-velocity/examples/forumdemo/WEB-INF/src/org/apache/velocity/demo/ControllerServlet.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ControllerServlet.java 2001/01/03 06:04:54 1.2
+++ ControllerServlet.java 2001/05/11 12:07:47 1.3
@@ -57,18 +57,26 @@
// Java stuff
import java.util.*;
+import java.io.StringWriter;
+import java.io.PrintWriter;
+import java.io.IOException;
// Servlet stuff
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
// Velocity stuff
import org.apache.velocity.context.Context;
import org.apache.velocity.Template;
import org.apache.velocity.servlet.VelocityServlet;
+import org.apache.velocity.exception.ParseErrorException;
+import org.apache.velocity.exception.ResourceNotFoundException;
+import org.apache.velocity.exception.MethodInvocationException;
+
// Demo stuff
import org.apache.velocity.demo.action.*;
@@ -77,11 +85,13 @@
* All requests are made to this servlet.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Dave Bryson</a>
- * @version $Revision: 1.2 $
- * $Id: ControllerServlet.java,v 1.2 2001/01/03 06:04:54 geirm Exp $
+ * @version $Revision: 1.3 $
+ * $Id: ControllerServlet.java,v 1.3 2001/05/11 12:07:47 geirm Exp $
*/
public class ControllerServlet extends VelocityServlet
{
+ private static String ERR_MSG_TAG = "forumdemo_current_error_msg";
+
/**
* VelocityServlet handles most of the Servlet issues.
* By extending it, you need to just implement the handleRequest method.
@@ -93,18 +103,37 @@
HttpServletRequest req =
(HttpServletRequest)ctx.get(VelocityServlet.REQUEST);
HttpServletResponse resp =
(HttpServletResponse)ctx.get(VelocityServlet.RESPONSE);
Template template = null;
+ String templateName = null;
+ HttpSession sess = req.getSession();
+ sess.setAttribute(ERR_MSG_TAG, "all ok" );
+
try
{
// Process the command
- String templateName = processRequest( req, resp, ctx );
+ templateName = processRequest( req, resp, ctx );
// Get the template
template = getTemplate( templateName );
}
+ catch( ResourceNotFoundException rnfe )
+ {
+ String err = "ForumDemo -> ControllerServlet.handleRequest() : Cannot
find template " + templateName ;
+ sess.setAttribute( ERR_MSG_TAG, err );
+ System.out.println(err );
+ }
+ catch( ParseErrorException pee )
+ {
+ String err = "ForumDemo -> ControllerServlet.handleRequest() : Syntax
error in template " + templateName + ":" + pee ;
+ sess.setAttribute( ERR_MSG_TAG, err );
+ System.out.println(err );
+ }
catch( Exception e )
{
- System.out.println("Error handling the request: " + e);
+ String err = "Error handling the request: " + e ;
+ sess.setAttribute( ERR_MSG_TAG, err );
+ System.out.println(err );
}
+
return template;
}
@@ -154,6 +183,35 @@
template = c.exec( context );
}
return template;
+ }
+
+ /**
+ * Override the method from VelocityServlet to produce an intelligent
+ * message to the browser
+ */
+ protected void error( HttpServletRequest request, HttpServletResponse
response, Exception cause )
+ throws ServletException, IOException
+ {
+ HttpSession sess = request.getSession();
+ String err = (String) sess.getAttribute( ERR_MSG_TAG );
+
+ StringBuffer html = new StringBuffer();
+ html.append("<html>");
+ html.append("<body bgcolor=\"#ffffff\">");
+ html.append("<h2>ForumDemo : Error processing the request</h2>");
+ html.append("<br><br>There was a problem in the request." );
+ html.append("<br><br>The relevant error is :<br>");
+ html.append( err );
+ html.append("<br><br><br>");
+ html.append("The error occurred at :<br><br>");
+
+ StringWriter sw = new StringWriter();
+ cause.printStackTrace( new PrintWriter( sw ) );
+
+ html.append( sw.toString() );
+ html.append("</body>");
+ html.append("</html>");
+ response.getOutputStream().print( html.toString() );
}
}