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() );
       }
   }
   
  
  
  

Reply via email to