You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/01/11 02:33:00 UTC

svn commit: r611011 - /velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java

Author: nbubna
Date: Thu Jan 10 17:32:59 2008
New Revision: 611011

URL: http://svn.apache.org/viewvc?rev=611011&view=rev
Log:
VELTOOLS-83 add config switch and support for buffering output

Modified:
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java?rev=611011&r1=611010&r2=611011&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityViewServlet.java Thu Jan 10 17:32:59 2008
@@ -22,6 +22,7 @@
 import java.io.PrintWriter;
 import java.io.StringWriter;
 import java.io.IOException;
+import java.io.Writer;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
@@ -82,6 +83,16 @@
  *     will have all invalid tools, properties, and/or data removed prior to
  *     configuring the ToolboxFactory for this servlet by a
  *     {@link org.apache.velocity.tools.config.ConfigurationCleaner}</dd>
+ *   <dt>org.apache.velocity.tools.bufferOutput</dt>
+ *   <dd>By default, the processed templates are merged directly into
+ *     the {@link HttpServletResponse}'s writer.  If this parameter is
+ *     set to {@code true}, then the output of the merge process will be
+ *     buffered before being fed to the response. This allows the {@link #error}
+ *     method to be overridden to return a "500 Internal Server Error" or
+ *     at least not return any of the failed request content. Essentially,
+ *     setting this to {@code true} degrades performance in order to enable
+ *     a more "correct" error response"</dd>
+ *  </dd>
  * </dl>
  *
  * @version $Id$
@@ -91,9 +102,12 @@
 {
     public static final String SHARED_CONFIG_PARAM =
         "org.apache.velocity.tools.shared.config";
+    public static final String BUFFER_OUTPUT_PARAM =
+        "org.apache.velocity.tools.bufferOutput";
     private static final long serialVersionUID = -3329444102562079189L;
 
     private transient VelocityView view;
+    private boolean bufferOutput = false;
 
     /**
      * <p>Initializes servlet and VelocityView used to process requests.
@@ -107,6 +121,13 @@
 
         // init the VelocityView (if it hasn't been already)
         getVelocityView();
+
+        String buffer = findInitParameter(config, BUFFER_OUTPUT_PARAM);
+        if (buffer != null && buffer.equals("true"))
+        {
+            this.bufferOutput = true;
+            getLog().debug("VelocityViewServlet will buffer mergeTemplate output.");
+        }
     }
 
 
@@ -286,7 +307,22 @@
                                  HttpServletResponse response)
         throws IOException
     {
-        getVelocityView().merge(template, context, response.getWriter());
+        Writer writer;
+        if (this.bufferOutput)
+        {
+            writer = new StringWriter();
+        }
+        else
+        {
+            writer = response.getWriter();
+        }
+
+        getVelocityView().merge(template, context, writer);
+
+        if (this.bufferOutput)
+        {
+            response.getWriter().write(writer.toString());
+        }
     }