Here's some code that does what Gennady suggested, using
RequestDispatcher and wrapping the response object to capture the
output in a String.

public class JSPFormatter
{
    public String formatPage(String stJSPFile,
                HttpServletRequest request,
                HttpServletResponse response,
                ServletContext ctx)
    throws ServletException, IOException
    {

        // Make a wrapper for the response, to capture the output.
        ResponseWrapper rw = new ResponseWrapper(response);
        // Call the JSP page and capture its output.
        RequestDispatcher rd = ctx.getRequestDispatcher(stJSPFile);
        rd.include(request, rw);
        return rw.getOutputString();
    }

    /**
     * Nested class ResponseWrapper: Wrapper for the response to
capture the servlet output.
     */
    public class ResponseWrapper extends HttpServletResponseWrapper
    {
        protected StringWriter writer = null;
        protected ByteArrayOutputStream stream = null;

        public ResponseWrapper(HttpServletResponse response) {
            super(response);
        }

        public String getOutputString() {
            if (writer != null)
                return writer.toString();
            else if (stream != null)
                return stream.toString();
            else
                return null;
        }

        public ServletOutputStream getOutputStream() throws IOException {
            stream = new ByteArrayOutputStream();
            return new OutputStreamWrapper();
        }

        public PrintWriter getWriter() throws IOException {
            writer = new StringWriter();
            return new PrintWriter(writer);
        }

        /**
         * Nested class OutputStreamWrapper: Wrapper for the
OutputStream to turn it
         * into a ServletOutputStream for getOutputStream.
         */
        public class OutputStreamWrapper extends ServletOutputStream
        {
            public void write(int b) throws IOException {
                stream.write(b);
            }
        }
    }
}

-- 
Len

On Jan 4, 2008 4:15 AM, Gennady Shumakher <[EMAIL PROTECTED]> wrote:
> If you cannot replace your jsps with velocity (or freemarker) you could
> still use RequestDispatcher. Just provide your own implementation of
> ServletResponse that mostly will be just wrapper based on servlet response
> instance ( Tomcat implementation), but  will buffer response output as
> string rather than write it to output stream.
>
> Gennady.
>
> -----Original Message-----
> From: Mikolaj Rydzewski [mailto:[EMAIL PROTECTED]
> Sent: Friday, January 04, 2008 10:15
> To: Tomcat Users List
> Subject: Re: Avoiding same server to server HTTP calls to generate HTML
> pages via JSPs
>
>
> Adam Gordon wrote:
> > Right now we basically have a URL dispatcher that when a specific
> > request comes in, we make another request to retrieve the contents of
> > a URI (a JSP page to generate HTML) via a server-to-server HTTP call
> > and then essentially slap that into a MimeBodyPart for sending
> > text/html email messages.
> Simply do not use JSP. Use Velocity for example.
>
> --
> Mikolaj Rydzewski <[EMAIL PROTECTED]>
>
>
>
>
> ---------------------------------------------------------------------
> To start a new topic, e-mail: users@tomcat.apache.org
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to