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