You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by di...@apache.org on 2001/09/08 01:00:28 UTC

cvs commit: xml-cocoon2/webapp/docs/samples/jsp welcome.jsp

dims        01/09/07 16:00:28

  Modified:    src/org/apache/cocoon/components/jsp JSPEngineImpl.java
               webapp   sitemap.xmap
               webapp/docs/samples samples.xml
  Added:       src/org/apache/cocoon/components/jsp JSPReader.java
               webapp/docs/samples/jsp welcome.jsp
  Log:
  "JSPReader & sample" from Piroumian, Konstantin
  
  Revision  Changes    Path
  1.4       +16 -16    xml-cocoon2/src/org/apache/cocoon/components/jsp/JSPEngineImpl.java
  
  Index: JSPEngineImpl.java
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/src/org/apache/cocoon/components/jsp/JSPEngineImpl.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- JSPEngineImpl.java	2001/08/20 13:55:10	1.3
  +++ JSPEngineImpl.java	2001/09/07 23:00:28	1.4
  @@ -20,8 +20,8 @@
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.parameters.Parameters;
   import org.apache.avalon.framework.thread.ThreadSafe;
  -import org.apache.cocoon.components.parser.Parser;
  -import org.xml.sax.SAXException;
  +//import org.apache.cocoon.components.parser.Parser;
  +//import org.xml.sax.SAXException;
   
   import javax.servlet.RequestDispatcher;
   import javax.servlet.Servlet;
  @@ -45,12 +45,12 @@
   
   /**
    * Allows JSP to be used as a generator.  Builds upon the JSP servlet
  - * functionality - overrides the output method and returns the byte(s). 
  + * functionality - overrides the output method and returns the byte(s).
    *
    * @author <a href="mailto:dims@yahoo.com">Davanum Srinivas</a>
  - * @version CVS $Revision: 1.3 $ $Date: 2001/08/20 13:55:10 $
  + * @version CVS $Revision: 1.4 $ $Date: 2001/09/07 23:00:28 $
    */
  -public class JSPEngineImpl extends AbstractLoggable 
  +public class JSPEngineImpl extends AbstractLoggable
       implements JSPEngine, Contextualizable, Composable, Configurable, ThreadSafe, Disposable {
   
       /** The Servlet Include Path */
  @@ -70,9 +70,9 @@
       }
   
       /**
  -     * Set the sitemap-provided configuration. 
  +     * Set the sitemap-provided configuration.
        * @param conf The configuration information
  -     * @exception ConfigurationException 
  +     * @exception ConfigurationException
        */
       public void configure(Configuration conf) throws ConfigurationException {
           Parameters params = Parameters.fromConfiguration(conf);
  @@ -94,15 +94,15 @@
        * execute the JSP and return the output
        *
        * @param context The Servlet Context
  -     * @exception IOException 
  -     * @exception ServletException 
  -     * @exception SAXException 
  -     * @exception Exception 
  +     * @exception IOException
  +     * @exception ServletException
  +     * @exception SAXException
  +     * @exception Exception
        */
  -    public byte[] executeJSP(String url, HttpServletRequest httpRequest, HttpServletResponse httpResponse, ServletContext context) 
  -        throws IOException, ServletException, SAXException, Exception {
  +    public byte[] executeJSP(String url, HttpServletRequest httpRequest, HttpServletResponse httpResponse, ServletContext context)
  +        throws IOException, ServletException/*, SAXException*/, Exception {
   
  -        Parser parser = null;
  +//        Parser parser = null;
           byte[] bytes = null;
   
           MyServletRequest request = new MyServletRequest(httpRequest, url);
  @@ -115,7 +115,7 @@
           jsp.service(request, response);
   
           bytes = response.toByteArray();
  -        ByteArrayInputStream input = new ByteArrayInputStream(bytes);
  +//        ByteArrayInputStream input = new ByteArrayInputStream(bytes);
   
           // clean up
           jsp.destroy();
  @@ -138,7 +138,7 @@
           ServletContext c;
           public config(ServletContext c) {this.c = c; }
   
  -        public String getServletName() { return "JspGenerator"; }
  +        public String getServletName() { return "JSPEngineImpl"; }
           public Enumeration getInitParameterNames()
                  { return c.getInitParameterNames(); }
           public ServletContext getServletContext() { return c; }
  
  
  
  1.1                  xml-cocoon2/src/org/apache/cocoon/components/jsp/JSPReader.java
  
  Index: JSPReader.java
  ===================================================================
  /*****************************************************************************
   * Copyright (C) The Apache Software Foundation. All rights reserved.        *
   * ------------------------------------------------------------------------- *
   * This software is published under the terms of the Apache Software License *
   * version 1.1, a copy of which has been included  with this distribution in *
   * the LICENSE file.                                                         *
   *****************************************************************************/
  package org.apache.cocoon.reading;
  
  import org.apache.avalon.excalibur.pool.Poolable;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.component.Composable;
  import org.apache.avalon.framework.parameters.Parameters;
  import org.apache.cocoon.ProcessingException;
  import org.apache.cocoon.environment.http.HttpEnvironment;
  import org.apache.cocoon.environment.Source;
  import org.apache.cocoon.environment.SourceResolver;
  
  import org.apache.cocoon.components.jsp.JSPEngine;
  
  import javax.servlet.ServletContext;
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  import java.io.File;
  import java.io.ByteArrayInputStream;
  import java.io.IOException;
  import java.net.MalformedURLException;
  
  /**
   * @author <a href="mailto:kpiroumian@flagship.ru">Konstantin Piroumian</a>
   * @version CVS $Revision: 1.1 $ $Date: 2001/09/07 23:00:28 $
   *
   * The <code>JSPReader</code> component is used to serve JSP page output data
   * in a sitemap pipeline.
   */
  public class JSPReader extends AbstractReader
              implements Composable, Poolable{
  
      private ComponentManager manager;
  
      public void compose (ComponentManager manager) {
          this.manager = manager;
      }
  
      /** Contextualize this class
      public void contextualize(Context context) throws ContextException {
          if (this.contextDir == null) {
              org.apache.cocoon.environment.Context ctx =
                  (org.apache.cocoon.environment.Context) context.get(Constants.CONTEXT_ENVIRONMENT_CONTEXT);
              try {
                  this.contextDir = new File(ctx.getRealPath("/")).toURL().toExternalForm();
                  getLogger().debug("JSPReader: Context directory is " + this.contextDir);
              } catch (MalformedURLException e) {
                  getLogger().error("JSPReader: Could not get context directory", e);
                  throw new ContextException("JSPReader: Could not get context directory", e);
              }
          }
      }
      */
      /**
       * Generates the output from JSP page.
       */
      public void generate() throws IOException, ProcessingException {
          // ensure that we are running in a servlet environment
          HttpServletResponse httpResponse =
              (HttpServletResponse)this.objectModel.get(HttpEnvironment.HTTP_RESPONSE_OBJECT);
          HttpServletRequest httpRequest =
              (HttpServletRequest)this.objectModel.get(HttpEnvironment.HTTP_REQUEST_OBJECT);
          ServletContext httpContext =
              (ServletContext)this.objectModel.get(HttpEnvironment.HTTP_SERVLET_CONTEXT);
  
          if (httpResponse == null || httpRequest == null || httpContext == null) {
              throw new ProcessingException("JSPReader can be used only in a Servlet/JSP environment");
          }
  
          JSPEngine engine = null;
          Source src = null;
          try {
              // KP: A hacky way of source resolving.
              // Why context:// protocol returns not a string in URL format,
              // but a system-dependent path with 'file:' prefix?
              String contextDir = new File(httpContext.getRealPath("/")).toURL().toExternalForm();
              src = this.resolver.resolve(this.source);
              String url = src.getSystemId();
              if(url.startsWith(contextDir)) {
                  // File is located under contextDir, using relative file name
                  url = url.substring(contextDir.length());
              }
              if (url.startsWith("file:")) {
                  // we need a relative path
                  url = url.substring(5);
              }
  
              getLogger().debug("JSPReader executing JSP:" + url);
  
              engine = (JSPEngine)this.manager.lookup(JSPEngine.ROLE);
              byte[] bytes = engine.executeJSP(url, httpRequest, httpResponse, httpContext);
  
              byte[] buffer = new byte[8192];
              int length = -1;
  
              ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
              while ((length = bais.read(buffer)) > -1) {
                  out.write(buffer, 0, length);
              }
              bais.close();
              bais = null;
              out.flush();
              //
          } catch (ServletException e) {
              getLogger().debug("ServletException in JSPReader.generate()", e);
              getLogger().debug("Embedded ServletException JSPReader.generate()", e.getRootCause());
              throw new ProcessingException("ServletException in JSPReader.generate()",e.getRootCause());
          } catch (IOException e) {
              getLogger().debug("IOException in JSPReader.generate()", e);
              throw new ProcessingException("IOException JSPReader.generate()",e);
          } catch (ProcessingException e) {
              throw e;
          } catch (Exception e) {
              getLogger().debug("Exception in JSPReader.generate()", e);
              throw new ProcessingException("Exception JSPReader.generate()",e);
          } finally {
              if (src != null) src.recycle();
              if (engine != null) this.manager.release(engine);
          }
      }
  }
  
  
  
  1.50      +5 -0      xml-cocoon2/webapp/sitemap.xmap
  
  Index: sitemap.xmap
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/webapp/sitemap.xmap,v
  retrieving revision 1.49
  retrieving revision 1.50
  diff -u -r1.49 -r1.50
  --- sitemap.xmap	2001/09/06 20:56:21	1.49
  +++ sitemap.xmap	2001/09/07 23:00:28	1.50
  @@ -44,6 +44,7 @@
   
     <map:readers default="resource">
      <map:reader name="resource"       src="org.apache.cocoon.reading.ResourceReader"/>
  +   <map:reader name="jsp"	     src="org.apache.cocoon.reading.JSPReader"/>
     </map:readers>
   
     <map:serializers default="html">
  @@ -459,6 +460,10 @@
       <map:generate type="script" src="docs/samples/scripts/{1}"/>
       <map:transform src="stylesheets/page/simple-page2html.xsl"/>
       <map:serialize type="html"/>
  +   </map:match>
  +
  +   <map:match pattern="jsp/*.htm">
  +    <map:read type="jsp" src="/docs/samples/jsp/{1}.jsp" mime-type="text/html" />
      </map:match>
   
      <map:match pattern="jsp/*">
  
  
  
  1.14      +3 -0      xml-cocoon2/webapp/docs/samples/samples.xml
  
  Index: samples.xml
  ===================================================================
  RCS file: /home/cvs/xml-cocoon2/webapp/docs/samples/samples.xml,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- samples.xml	2001/09/06 20:56:21	1.13
  +++ samples.xml	2001/09/07 23:00:28	1.14
  @@ -125,6 +125,9 @@
      <sample name="JSP Generator" href="jsp/hello">
       An example of the JSPGenerator producing XML out of using JSP.
      </sample>
  +   <sample name="JSP Reader" href="jsp/welcome.htm">
  +    An example of the JSPReader producing HTML out of using JSP.
  +   </sample>
      <sample name="Python Generator" href="scripts/hello.py">
       An example of the ScriptGenerator producing XML out of a Python program.
       You should make sure that you have the Jython interpreter (jython.jar) from
  
  
  
  1.1                  xml-cocoon2/webapp/docs/samples/jsp/welcome.jsp
  
  Index: welcome.jsp
  ===================================================================
  <%@ page import="java.util.*" %>
  <%
  	response.setHeader("Expires", "0");
  %>
  
  <html>
  
  <head>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  <title>JSPreader test</title>
  <style type="text/css">
  BODY {background-color: #FFFFFF; color: #660000; font-family: Verdana, Helvetica, Arial; }
  </style>
  </head>
  
  <body>
  <h3>This is a dynamic output from the JSPReader</h3>
  <h4>Current time: <%=new Date()%></h4>
  <hr noshade size="1">
  <small><a href="..">Back to samples</a></small>
  </body>
  </html>
  
  
  

----------------------------------------------------------------------
In case of troubles, e-mail:     webmaster@xml.apache.org
To unsubscribe, e-mail:          cocoon-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: cocoon-cvs-help@xml.apache.org