You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2002/06/29 19:46:23 UTC

cvs commit: jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/blocks CatalinaSevakImpl.java default-web.xml

hammant     2002/06/29 10:46:23

  Modified:    sevak/src/conf sevak-assembly.xml
               sevak/src/demo/conf sevak-demo-assembly.xml
               sevak/src/xdocs book.xml index.xml
  Added:       sevak/src/java/org/apache/avalon/apps/sevak/blocks/catalina
                        CatalinaSevakImpl.java default-web.xml
  Removed:     sevak/src/java/org/apache/avalon/apps/sevak/blocks
                        CatalinaSevakImpl.java default-web.xml
  Log:
  Move Catalina into catalina package.  Improve xdocs.
  
  Revision  Changes    Path
  1.2       +1 -1      jakarta-avalon-apps/sevak/src/conf/sevak-assembly.xml
  
  Index: sevak-assembly.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-apps/sevak/src/conf/sevak-assembly.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sevak-assembly.xml	28 Jun 2002 05:05:06 -0000	1.1
  +++ sevak-assembly.xml	29 Jun 2002 17:46:23 -0000	1.2
  @@ -3,5 +3,5 @@
                     "http://jakarta.apache.org/phoenix/assembly_1_0.dtd">
   
   <assembly>
  -  <block class="org.apache.avalon.apps.sevak.blocks.CatalinaSevakImpl" name="sevak"/>
  +  <block class="org.apache.avalon.apps.sevak.blocks.catalina.CatalinaSevakImpl" name="sevak"/>
   </assembly>
  
  
  
  1.2       +1 -1      jakarta-avalon-apps/sevak/src/demo/conf/sevak-demo-assembly.xml
  
  Index: sevak-demo-assembly.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-apps/sevak/src/demo/conf/sevak-demo-assembly.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- sevak-demo-assembly.xml	28 Jun 2002 05:04:52 -0000	1.1
  +++ sevak-demo-assembly.xml	29 Jun 2002 17:46:23 -0000	1.2
  @@ -3,7 +3,7 @@
                     "http://jakarta.apache.org/phoenix/assembly_1_0.dtd">
   
   <assembly>
  -  <block class="org.apache.avalon.apps.sevak.blocks.CatalinaSevakImpl" name="sevak"/>
  +  <block class="org.apache.avalon.apps.sevak.blocks.catalina.CatalinaSevakImpl" name="sevak"/>
     <block class="org.apache.avalon.apps.sevak.demo.SevakTest" name="sevakTest">
   	<provide name="sevak" role="org.apache.avalon.apps.sevak.Sevak"/>
     </block>
  
  
  
  1.2       +3 -3      jakarta-avalon-apps/sevak/src/xdocs/book.xml
  
  Index: book.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-apps/sevak/src/xdocs/book.xml,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- book.xml	28 Jun 2002 05:01:26 -0000	1.1
  +++ book.xml	29 Jun 2002 17:46:23 -0000	1.2
  @@ -1,7 +1,7 @@
   <?xml version="1.0"?>
   
   <book software="Avalon Applications"
  -      title="Avalon Applications Documentation - Applications / Sevak - A Catalina Wrapper"
  +      title="Avalon Applications Documentation - Applications / Sevak"
         copyright="@year@ The Apache Software Foundation">
   
     <project label="Back to Avalon" href="@AVALON_BASE@" />
  @@ -9,8 +9,8 @@
   
     <menu label="About">
       <menu-item label="Overview" href="index.html"/>
  -    <menu-item type="external" label="API Docs" href="http://jakarta.apache.org/avalon"/>   
  -    <menu-item type="external" id="downloads" label="Download" href="http://cvs.apache.org/~vinayc/"/>
  +    <menu-item type="external" label="API Docs" href="http://hack.hack"/>   
  +    <menu-item type="external" id="downloads" label="Download" href="http://cvs.apache.org/~hammant/"/>
     </menu>
   
   </book>
  
  
  
  1.4       +21 -1     jakarta-avalon-apps/sevak/src/xdocs/index.xml
  
  Index: index.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-apps/sevak/src/xdocs/index.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- index.xml	29 Jun 2002 13:20:21 -0000	1.3
  +++ index.xml	29 Jun 2002 17:46:23 -0000	1.4
  @@ -7,6 +7,7 @@
       <title>Avalon Applications / Sevak</title>
       <subtitle>Introduction</subtitle>
       <authors>
  +      <person name="Vinay Chandran" email="vinayc@apache.org"/>
         <person name="Avalon Documentation Team" email="avalon-dev@jakarta.apache.org"/>
       </authors>
     </header>
  @@ -16,8 +17,21 @@
           Sevak is a wrapper for Tomcat Catalina server in a Phoenix machine.
           <link href="http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/">
           http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.3/</link>
  +        It launches Catalina under Phoenix control in embedded mode.
         </p>
       </s1>
  +    <s1 title="Usage">
  +      <p>
  +        To use Sevak, you will need to have tools.jar placed in the lib directory of 
  +        Phoenix.  This is not unusual as a requirement as applications like the excellent
  +        OrionServer have the same requirement.  This will enable JSP processing.  You will
  +        find it in JAVA_HOME/lib/.  We can't include this in the SAR file for two reasons.
  +        The first is because it is part of the Java runtime environment and we have no 
  +        permission to distribute that given it is copyright of Sun Microsystems.  The 
  +        second reason is that it is tied to the version of Java you are running.  We can't 
  +        provide a different base SAR for each version of the JDK (1.2, 1.2.2, 1,3, 1,3,1 ..)
  +      </p>   
  +    </s1>    
       <s1 title="Blocks">
         <p>
           There are two blocks delivered with Sevak.  The first is the block that provides
  @@ -25,6 +39,12 @@
           org.apache.avalon.apps.sevak.blocks.CatalinaSevakImpl.  The second is one uses the 
           first to mount Catalina's demo apps.  The block class is 
           org.apache.avalon.apps.sevak.demo.SevakTest.
  +      </p>
  +    </s1>
  +    <s1 title="Plans">      
  +      <p>
  +        Given that there are other servlet capable web servers out there, we plan to 
  +        provide multiple implementations of Sevak for Jetty and Jo!.  
         </p>
       </s1>    
     </body>
  
  
  
  1.1                  jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/blocks/catalina/CatalinaSevakImpl.java
  
  Index: CatalinaSevakImpl.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.avalon.apps.sevak.blocks.catalina;
  
  import java.io.File;
  import java.io.FileOutputStream;
  import java.io.InputStream;
  
  import org.apache.avalon.apps.sevak.Sevak;
  import org.apache.avalon.apps.sevak.SevakException;
  import org.apache.avalon.apps.sevak.util.CatalinaLogger;
  import org.apache.avalon.apps.sevak.util.CustomWebappLoader;
  import org.apache.avalon.framework.activity.Initializable;
  import org.apache.avalon.framework.configuration.Configurable;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.ConfigurationException;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.Contextualizable;
  import org.apache.avalon.framework.logger.AbstractLogEnabled;
  import org.apache.avalon.framework.service.ServiceException;
  import org.apache.avalon.framework.service.ServiceManager;
  import org.apache.avalon.framework.service.Serviceable;
  import org.apache.avalon.phoenix.BlockContext;
  import org.apache.catalina.Engine;
  import org.apache.catalina.Host;
  import org.apache.catalina.Lifecycle;
  import org.apache.catalina.LifecycleException;
  import org.apache.catalina.Loader;
  import org.apache.catalina.core.StandardContext;
  import org.apache.catalina.startup.ContextConfig;
  import org.apache.catalina.startup.Embedded;
  import org.apache.coyote.tomcat4.CoyoteConnector;
  
  /**
   * @phoenix:block
   * @phoenix:service name="org.apache.avalon.apps.sevak.Sevak"
   *
   * Tomcat Wrapper.
   *
   *
   * @see <a href="http://jakarta.apache.org/tomcat">Tomcat Project Page</a>
   *
   * @author  Vinay Chandran<vi...@yahoo.com>
   * @version 1.0
   */
  public class CatalinaSevakImpl
      extends AbstractLogEnabled
      implements Contextualizable, Serviceable, Configurable, Initializable, Sevak
  {
      private BlockContext m_context;
      private Configuration m_configuration;
      private Engine m_engine = null;
      private Embedded m_embedded = null;
      private Host m_tomcatHost = null;
      private Loader m_catalinaCustomClassLoader = null;
      private int m_port;
      private String m_host = null;
  
      /**
       * @see org.apache.avalon.framework.context.Contextualizable#contextualize(org.apache.avalon.framework.context.Context)
       */
  
      public void contextualize(final Context context)
      {
          getLogger().info("Sevak.contextualize()");
          m_context = (BlockContext) context;
      }
  
      /**
       * @see org.apache.avalon.framework.configuration.Configurable#configure(org.apache.avalon.framework.configuration.Configuration)
       */
  
      public void configure(final Configuration configuration)
          throws ConfigurationException
      {
  
          m_configuration = configuration;
  
      }
  
      /**
       * @see org.apache.avalon.framework.service.Serviceable
       *
       */
      public void service(final ServiceManager serviceManager)
          throws ServiceException
      {
          getLogger().info("Sevak.service()");
  
      }
  
      /**
       * @see org.apache.avalon.framework.activity.Initializable#initialize()
       */
  
      public void initialize() throws Exception
      {
          getLogger().info("Sevak.initialize()");
  
          //create the Logger
          CatalinaLogger catalinaLogger = new CatalinaLogger();
          catalinaLogger.enableLogging(getLogger());
          //create the Custom ClassLoader
  
          m_catalinaCustomClassLoader =
              new CustomWebappLoader(this.getClass().getClassLoader());
  
          //read the configuration properties
          String catalinaHome =
              m_configuration.getChild("catalina.home").getValue(null);
          if (catalinaHome == null)
          {
              catalinaHome=m_context.getBaseDirectory().getAbsolutePath();
              //Creating a conf/ folder  and dumping the default web.xml 
              File confDir=new File(m_context.getBaseDirectory(),"conf");
              confDir.mkdir();
              getLogger().info("Created conf/ folder");
              InputStream in= CatalinaSevakImpl.class.getResourceAsStream("default-web.xml");
              FileOutputStream fos =
                          new FileOutputStream(new File(confDir,"web.xml").getAbsolutePath());
              byte[] bytes= new byte[512];
              int read=0;
              while((read=in.read(bytes))!=-1)
              {
                  fos.write(bytes,0,read);
              }
              fos.close();
              in.close();
          }
          /*
           * TODO : Hack Tomcat to be able to run without the catalina.home property set
          {
              System.out.println(
                  "catalina.home property Not Found. Using : "
                      + m_context.getBaseDirectory().getAbsolutePath());
              catalinaHome = m_context.getBaseDirectory().getAbsolutePath();
          }
          */
          m_port = m_configuration.getChild("port").getValueAsInteger(8080);
          m_host = m_configuration.getChild("bind").getValue("localhost");
  
          //set the catalina home directory
          System.setProperty("catalina.home", new File(catalinaHome).getAbsolutePath());
          // Create an Embedded Tomcat server
          m_embedded = new Embedded();
          m_embedded.setDebug(0);
          m_embedded.setLogger(catalinaLogger);
  
          //Create Tomcat Engine
          m_engine = m_embedded.createEngine();
          m_engine.setDefaultHost("localhost");
  
          // Create Tomcat Host
          m_tomcatHost = m_embedded.createHost("localhost", "webapps");
          m_engine.addChild(m_tomcatHost);
  
          // Create HTTP Coyote Connector
          CoyoteConnector coyoteConnector = new CoyoteConnector();
          coyoteConnector.setPort(8080);
          coyoteConnector.setMinProcessors(5);
          coyoteConnector.setMaxProcessors(75);
          coyoteConnector.setEnableLookups(true);
          coyoteConnector.setAcceptCount(10);
          coyoteConnector.setDebug(0);
          coyoteConnector.setConnectionTimeout(20000);
          coyoteConnector.setUseURIValidationHack(false);
  
          m_embedded.addEngine(m_engine);
          m_embedded.addConnector(coyoteConnector);
  
          //START  Tomcat Instance
          try
          {
              m_embedded.start();
          }
          catch (LifecycleException le)
          {
              le.printStackTrace();
              throw new ConfigurationException("[FATAL] Could Not START Tomcat  ");
  
          }
      }
  
      /**
       * Deploy the given Web Application
       * @param context Context for the the webapp
       * @param dirToWebAppFolder path can be a war-archive or exploded directory
       * @throws org.apache.avalon.apps.sevak.SevakException Thrown when the context already exists
       */
      public void deploy(String context, File dirToWebAppFolder)
          throws SevakException
      {
          if (!dirToWebAppFolder.exists())
          {
              throw new SevakException(
                  "Path not Found[" + dirToWebAppFolder + "]");
          }
          try
          {
              if (context == null)
              {
                  throw new SevakException("Invalid Context[" + context + "]");
              }
              if (context.equals("/"))
              {
                  context = "";
              }
              if (dirToWebAppFolder == null)
              {
                  throw new SevakException(
                      "Invalid WAR [" + dirToWebAppFolder + "]");
              }
              //now deploy ....
              org.apache.catalina.Context catalinaContext =
                  (org.apache.catalina.Context) m_tomcatHost.findChild(context);
              if (catalinaContext != null)
              {
                  throw new Exception("Context " + context + " Already Exists!");
              }
              catalinaContext =
                  createContext(context, dirToWebAppFolder.getAbsolutePath());
              m_tomcatHost.addChild(catalinaContext);
              System.out.println("Deployed [" + context + "] Context");
          }
          catch (Exception catalinaException)
          {
  
              throw new SevakException(
                  "Catalina Internal Error",
                  catalinaException);
          }
  
      }
  
      /**
       * Undeploy the given WebApp 
       * @param context Webapp context
       * @throws org.apache.avalon.apps.sevak.SevakException Thrown when context does NOT exist
       */
      public void undeploy(String context) throws SevakException
      {
          if (context == null)
          {
              throw new SevakException("Invalid Context[" + context + "]");
          }
          if (context.equals("/"))
          {
              context = "";
          }
          org.apache.catalina.Context catalinaContext =
              (org.apache.catalina.Context) m_tomcatHost.findChild(context);
          if (catalinaContext == null)
          {
              throw new SevakException("Context " + context + " does NOT Exist");
          }
          m_tomcatHost.removeChild(catalinaContext);
      }
      /**
       * Create a StandardContext 
       * @param path
       * @param docBase
       * @return Context
       */
  
      private org.apache.catalina.Context createContext(
          String path,
          String docBase)
      {
  
          StandardContext context = new StandardContext();
  
          context.setDebug(0);
          context.setDocBase(docBase);
          context.setPath(path);
          context.setLoader(m_catalinaCustomClassLoader);
  
          ContextConfig config = new ContextConfig();
          config.setDebug(0);
          ((Lifecycle) context).addLifecycleListener(config);
  
          return (context);
  
      }
  
  }
  
  
  
  1.1                  jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/blocks/catalina/default-web.xml
  
  Index: default-web.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  <!DOCTYPE web-app
       PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
      "http://java.sun.com/dtd/web-app_2_3.dtd">
  <web-app>
  
    <!-- ======================== Introduction ============================== -->
    <!-- This document defines default values for *all* web applications      -->
    <!-- loaded into this instance of Tomcat.  As each application is         -->
    <!-- deployed, this file is processed, followed by the                    -->
    <!-- "/WEB-INF/web.xml" deployment descriptor from your own               -->
    <!-- applications.                                                        -->
    <!--                                                                      -->
    <!-- WARNING:  Do not configure application-specific resources here!      -->
    <!-- They should go in the "/WEB-INF/web.xml" file in your application.   -->
  
  
    <!-- ================== Built In Servlet Definitions ==================== -->
  
  
    <!-- The default servlet for all web applications, that serves static     -->
    <!-- resources.  It processes all requests that are not mapped to other   -->
    <!-- servlets with servlet mappings (defined either here or in your own   -->
    <!-- web.xml file.  This servlet supports the following initialization    -->
    <!-- parameters (default values are in square brackets):                  -->
    <!--                                                                      -->
    <!--   debug               Debugging detail level for messages logged     -->
    <!--                       by this servlet.  [0]                          -->
    <!--                                                                      -->
    <!--   input               Input buffer size (in bytes) when reading      -->
    <!--                       resources to be served.  [2048]                -->
    <!--                                                                      -->
    <!--   listings            Should directory listings be produced if there -->
    <!--                       is no welcome file in this directory?  [true]  -->
    <!--                                                                      -->
    <!--   output              Output buffer size (in bytes) when writing     -->
    <!--                       resources to be served.  [2048]                -->
    <!--                                                                      -->
    <!--   readonly            Is this context "read only", so HTTP           -->
    <!--                       commands like PUT and DELETE are               -->
    <!--                       rejected?  [true]                              -->
  
      <servlet>
          <servlet-name>default</servlet-name>
          <servlet-class>
            org.apache.catalina.servlets.DefaultServlet
          </servlet-class>
          <init-param>
              <param-name>debug</param-name>
              <param-value>0</param-value>
          </init-param>
          <init-param>
              <param-name>listings</param-name>
              <param-value>true</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
  
  
    <!-- The "invoker" servlet, which executes anonymous servlet classes      -->
    <!-- that have not been defined in a web.xml file.  Traditionally, this   -->
    <!-- servlet is mapped to URL pattern "/servlet/*", but you can map it    -->
    <!-- to other patterns as well.  The extra path info portion of such a    -->
    <!-- request must be the fully qualified class name of a Java class that  -->
    <!-- implements Servlet (or extends HttpServlet), or the servlet name     -->
    <!-- of an existing servlet definition.     This servlet supports the     -->
    <!-- following initialization parameters (default values are in square    -->
    <!-- brackets):                                                           -->
    <!--                                                                      -->
    <!--   debug               Debugging detail level for messages logged     -->
    <!--                       by this servlet.  [0]                          -->
  
      <servlet>
          <servlet-name>invoker</servlet-name>
          <servlet-class>
            org.apache.catalina.servlets.InvokerServlet
          </servlet-class>
          <init-param>
              <param-name>debug</param-name>
              <param-value>0</param-value>
          </init-param>
          <load-on-startup>2</load-on-startup>
      </servlet>
  
  
    <!-- The JSP page compiler and execution servlet, which is the mechanism  -->
    <!-- used by Tomcat to support JSP pages.  Traditionally, this servlet    -->
    <!-- is mapped to URL patterh "*.jsp".  This servlet supports the         -->
    <!-- following initialization parameters (default values are in square    -->
    <!-- brackets):                                                           -->
    <!--                                                                      -->
    <!--   classdebuginfo      Should the class file be compiled with         -->
    <!--                       debugging information?  [false]                -->
    <!--                                                                      -->
    <!--   classpath           What class path should I use while compiling   -->
    <!--                       generated servlets?  [Created dynamically      -->
    <!--                       based on the current web application]          -->
    <!--                                                                      -->
    <!--   ieClassId           The class-id value to be sent to Internet      -->
    <!--                       Explorer when using <jsp:plugin> tags.         -->
    <!--                       [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93]   -->
    <!--                                                                      -->
    <!--   jspCompilerPlugin   The fully qualified class name of the JSP      -->
    <!--                       compiler plug-in to be used.  See below for    -->
    <!--                       more information.                              -->
    <!--                       [Use internal JDK compiler]                    -->
    <!--                                                                      -->
    <!--   keepgenerated       Should we keep the generated Java source code  -->
    <!--                       for each page instead of deleting it? [true]   -->
    <!--                                                                      -->
    <!--   largefile           Should we store the static content of JSP      -->
    <!--                       pages in external data files, to reduce the    -->
    <!--                       size of the generated servlets?  [false]       -->
    <!--                                                                      -->
    <!--   logVerbosityLevel   The level of detailed messages to be produced  -->
    <!--                       by this servlet.  Increasing levels cause the  -->
    <!--                       generation of more messages.  Valid values are -->
    <!--                       FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
    <!--                       [WARNING]                                      -->
    <!--                                                                      -->
    <!--   mappedfile          Should we generate static content with one     -->
    <!--                       print statement per input line, to ease        -->
    <!--                       debugging?  [false]                            -->
    <!--                                                                      -->
    <!--   scratchdir          What scratch directory should we use when      -->
    <!--                       compiling JSP pages?  [default work directory  -->
    <!--                       for the current web application]               -->
    <!--                                                                      -->
    <!-- If you wish to use Jikes to compile JSP pages:                       -->
    <!-- * Set the "classpath" initialization parameter appropriately         -->
    <!--   for this web application.                                          -->
    <!-- * Set the "jspCompilerPlugin" initialization parameter to            -->
    <!--   "org.apache.jasper.compiler.JikesJavaCompiler".                    -->
  
      <servlet>
          <servlet-name>jsp</servlet-name>
          <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
          <init-param>
              <param-name>logVerbosityLevel</param-name>
              <param-value>WARNING</param-value>
          </init-param>
          <load-on-startup>3</load-on-startup>
      </servlet>
  
  
    <!-- Server Side Includes processing servlet, which processes SSI         -->
    <!-- directives in HTML pages consistent with similar support in web      -->
    <!-- servers like Apache.  Traditionally, this servlet is mapped to       -->
    <!-- URL pattern "*.shtml".  This servlet supports the following          -->
    <!-- initialization parameters (default values are in square brackets):   -->
    <!--                                                                      -->
    <!--   buffered            Should output from this servlet be buffered?   -->
    <!--                       (0=false, 1=true)  [0]                         -->
    <!--                                                                      -->
    <!--   debug               Debugging detail level for messages logged     -->
    <!--                       by this servlet.  [0]                          -->
    <!--                                                                      -->
    <!--   expires             The number of seconds before a page with SSI   -->
    <!--                       directives will expire.  [No default]          -->
    <!--                                                                      -->
    <!--   isVirtualWebappRelative                                            -->
    <!--                       Should "virtual" paths be interpreted as       -->
    <!--                       relative to the context root, instead of       -->
    <!--                       the server root?  (0=false, 1=true) [0]        -->
    <!--                                                                      -->
    <!--   ignoreUnsupportedDirective                                         -->
    <!--                       Should unknown or misspelled Ssi directives    -->
    <!--                       be ignored and no errors shown?                -->
    <!--                       (0=false, 1=true) [1]                          -->
    <!--                                                                      -->
    <!-- IMPORTANT: To use the SSI servlet, you also need to rename the       -->
    <!--            $CATALINA_HOME/server/lib/servlets-ssi.renametojar file   -->
    <!--            to $CATALINA_HOME/server/lib/servlets-ssi.jar             -->
  
  <!--
      <servlet>
          <servlet-name>ssi</servlet-name>
          <servlet-class>
            org.apache.catalina.servlets.SsiInvokerServlet
          </servlet-class>
          <init-param>
            <param-name>buffered</param-name>
            <param-value>1</param-value>
          </init-param>
          <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
          </init-param>
          <init-param>
            <param-name>expires</param-name>
            <param-value>666</param-value>
          </init-param>
          <init-param>
            <param-name>isVirtualWebappRelative</param-name>
            <param-value>0</param-value>
          </init-param>
          <init-param>
            <param-name>ignoreUnsupportedDirective</param-name>
            <param-value>1</param-value>
          </init-param>
          <load-on-startup>4</load-on-startup>
      </servlet>
  -->
  
  
    <!-- Common Gateway Includes (CGI) processing servlet, which supports     -->
    <!-- execution of external applications that conform to the CGI spec      -->
    <!-- requirements.  Typically, this servlet is mapped to the URL pattern  -->
    <!-- "/cgi-bin/*", which means that any CGI applications that are         -->
    <!-- executed must be present within the web application.  This servlet   -->
    <!-- supports the following initialization parameters (default values     -->
    <!-- are in square brackets):                                             -->
    <!--                                                                      -->
    <!--   cgiPathPrefix       The CGI search path will start at              -->
    <!--                       webAppRootDir + File.separator + this prefix.  -->
    <!--                       [WEB-INF/cgi]                                  -->
    <!--                                                                      -->
    <!--   clientInputTimeout  The time (in milliseconds) to wait for input   -->
    <!--                       from the browser before assuming that there    -->
    <!--                       is none.  [100]                                -->
    <!--                                                                      -->
    <!--   debug               Debugging detail level for messages logged     -->
    <!--                       by this servlet.  [0]                          -->
    <!--                                                                      -->
    <!-- IMPORTANT: To use the CGI servlet, you also need to rename the       -->
    <!--            $CATALINA_HOME/server/lib/servlets-cgi.renametojar file   -->
    <!--            to $CATALINA_HOME/server/lib/servlets-cgi.jar             -->
  
  <!--
      <servlet>
          <servlet-name>cgi</servlet-name>
          <servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>
          <init-param>
            <param-name>clientInputTimeout</param-name>
            <param-value>100</param-value>
          </init-param>
          <init-param>
            <param-name>debug</param-name>
            <param-value>6</param-value>
          </init-param>
          <init-param>
            <param-name>cgiPathPrefix</param-name>
            <param-value>WEB-INF/cgi</param-value>
          </init-param>
           <load-on-startup>5</load-on-startup>
      </servlet>
  -->
  
  
    <!-- ================ Built In Servlet Mappings ========================= -->
  
  
    <!-- The servlet mappings for the built in servlets defined above.  Note  -->
    <!-- that, by default, the CGI and SSI servlets are *not* mapped.  You    -->
    <!-- must uncomment these mappings (or add them to your application's own -->
    <!-- web.xml deployment descriptor) to enable these services              -->
  
      <!-- The mapping for the default servlet -->
      <servlet-mapping>
          <servlet-name>default</servlet-name>
          <url-pattern>/</url-pattern>
      </servlet-mapping>
  
      <!-- The mapping for the invoker servlet -->
      <servlet-mapping>
          <servlet-name>invoker</servlet-name>
          <url-pattern>/servlet/*</url-pattern>
      </servlet-mapping>
  
      <!-- The mapping for the JSP servlet -->
      <servlet-mapping>
          <servlet-name>jsp</servlet-name>
          <url-pattern>*.jsp</url-pattern>
      </servlet-mapping>
  
      <!-- The mapping for the SSI servlet -->
  <!--
      <servlet-mapping>
          <servlet-name>ssi</servlet-name>
          <url-pattern>*.shtml</url-pattern>
      </servlet-mapping>
  -->
  
      <!-- The mapping for the CGI Gateway servlet -->
  <!--
      <servlet-mapping>
          <servlet-name>cgi</servlet-name>
          <url-pattern>/cgi-bin/*</url-pattern>
      </servlet-mapping>
  -->
  
  
    <!-- ==================== Default Session Configuration ================= -->
    <!-- You can set the default session timeout (in minutes) for all newly   -->
    <!-- created sessions by modifying the value below.                       -->
  
      <session-config>
          <session-timeout>30</session-timeout>
      </session-config>
  
  
    <!-- ===================== Default MIME Type Mappings =================== -->
    <!-- When serving static resources, Tomcat will automatically generate    -->
    <!-- a "Content-Type" header based on the resource's filename extension,  -->
    <!-- based on these mappings.  Additional mappings can be added here (to  -->
    <!-- apply to all web applications), or in your own application's web.xml -->
    <!-- deployment descriptor.                                               -->
  
      <mime-mapping>
          <extension>abs</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ai</extension>
          <mime-type>application/postscript</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>aif</extension>
          <mime-type>audio/x-aiff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>aifc</extension>
          <mime-type>audio/x-aiff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>aiff</extension>
          <mime-type>audio/x-aiff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>aim</extension>
          <mime-type>application/x-aim</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>art</extension>
          <mime-type>image/x-jg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>asf</extension>
          <mime-type>video/x-ms-asf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>asx</extension>
          <mime-type>video/x-ms-asf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>au</extension>
          <mime-type>audio/basic</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>avi</extension>
          <mime-type>video/x-msvideo</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>avx</extension>
          <mime-type>video/x-rad-screenplay</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>bcpio</extension>
          <mime-type>application/x-bcpio</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>bin</extension>
          <mime-type>application/octet-stream</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>bmp</extension>
          <mime-type>image/bmp</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>body</extension>
          <mime-type>text/html</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>cdf</extension>
          <mime-type>application/x-cdf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>cer</extension>
          <mime-type>application/x-x509-ca-cert</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>class</extension>
          <mime-type>application/java</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>cpio</extension>
          <mime-type>application/x-cpio</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>csh</extension>
          <mime-type>application/x-csh</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>css</extension>
          <mime-type>text/css</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>dib</extension>
          <mime-type>image/bmp</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>doc</extension>
          <mime-type>application/msword</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>dtd</extension>
          <mime-type>text/plain</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>dv</extension>
          <mime-type>video/x-dv</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>dvi</extension>
          <mime-type>application/x-dvi</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>eps</extension>
          <mime-type>application/postscript</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>etx</extension>
          <mime-type>text/x-setext</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>exe</extension>
          <mime-type>application/octet-stream</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>gif</extension>
          <mime-type>image/gif</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>gtar</extension>
          <mime-type>application/x-gtar</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>gz</extension>
          <mime-type>application/x-gzip</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>hdf</extension>
          <mime-type>application/x-hdf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>hqx</extension>
          <mime-type>application/mac-binhex40</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>htc</extension>
          <mime-type>text/x-component</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>htm</extension>
          <mime-type>text/html</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>html</extension>
          <mime-type>text/html</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>hqx</extension>
          <mime-type>application/mac-binhex40</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ief</extension>
          <mime-type>image/ief</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jad</extension>
          <mime-type>text/vnd.sun.j2me.app-descriptor</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jar</extension>
          <mime-type>application/java-archive</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>java</extension>
          <mime-type>text/plain</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jnlp</extension>
          <mime-type>application/x-java-jnlp-file</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jpe</extension>
          <mime-type>image/jpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jpeg</extension>
          <mime-type>image/jpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>jpg</extension>
          <mime-type>image/jpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>js</extension>
          <mime-type>text/javascript</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>kar</extension>
          <mime-type>audio/x-midi</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>latex</extension>
          <mime-type>application/x-latex</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>m3u</extension>
          <mime-type>audio/x-mpegurl</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mac</extension>
          <mime-type>image/x-macpaint</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>man</extension>
          <mime-type>application/x-troff-man</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>me</extension>
          <mime-type>application/x-troff-me</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mid</extension>
          <mime-type>audio/x-midi</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>midi</extension>
          <mime-type>audio/x-midi</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mif</extension>
          <mime-type>application/x-mif</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mov</extension>
          <mime-type>video/quicktime</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>movie</extension>
          <mime-type>video/x-sgi-movie</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mp1</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mp2</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mp3</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpa</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpe</extension>
          <mime-type>video/mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpeg</extension>
          <mime-type>video/mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpega</extension>
          <mime-type>audio/x-mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpg</extension>
          <mime-type>video/mpeg</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>mpv2</extension>
          <mime-type>video/mpeg2</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ms</extension>
          <mime-type>application/x-wais-source</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>nc</extension>
          <mime-type>application/x-netcdf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>oda</extension>
          <mime-type>application/oda</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pbm</extension>
          <mime-type>image/x-portable-bitmap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pct</extension>
          <mime-type>image/pict</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pdf</extension>
          <mime-type>application/pdf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pgm</extension>
          <mime-type>image/x-portable-graymap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pic</extension>
          <mime-type>image/pict</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pict</extension>
          <mime-type>image/pict</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pls</extension>
          <mime-type>audio/x-scpls</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>png</extension>
          <mime-type>image/png</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pnm</extension>
          <mime-type>image/x-portable-anymap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>pnt</extension>
          <mime-type>image/x-macpaint</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ppm</extension>
          <mime-type>image/x-portable-pixmap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ps</extension>
          <mime-type>application/postscript</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>psd</extension>
          <mime-type>image/x-photoshop</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>qt</extension>
          <mime-type>video/quicktime</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>qti</extension>
          <mime-type>image/x-quicktime</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>qtif</extension>
          <mime-type>image/x-quicktime</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ras</extension>
          <mime-type>image/x-cmu-raster</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>rgb</extension>
          <mime-type>image/x-rgb</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>rm</extension>
          <mime-type>application/vnd.rn-realmedia</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>roff</extension>
          <mime-type>application/x-troff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>rtf</extension>
          <mime-type>application/rtf</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>rtx</extension>
          <mime-type>text/richtext</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>sh</extension>
          <mime-type>application/x-sh</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>shar</extension>
          <mime-type>application/x-shar</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>smf</extension>
          <mime-type>audio/x-midi</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>snd</extension>
          <mime-type>audio/basic</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>src</extension>
          <mime-type>application/x-wais-source</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>sv4cpio</extension>
          <mime-type>application/x-sv4cpio</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>sv4crc</extension>
          <mime-type>application/x-sv4crc</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>swf</extension>
          <mime-type>application/x-shockwave-flash</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>t</extension>
          <mime-type>application/x-troff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tar</extension>
          <mime-type>application/x-tar</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tcl</extension>
          <mime-type>application/x-tcl</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tex</extension>
          <mime-type>application/x-tex</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>texi</extension>
          <mime-type>application/x-texinfo</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>texinfo</extension>
          <mime-type>application/x-texinfo</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tif</extension>
          <mime-type>image/tiff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tiff</extension>
          <mime-type>image/tiff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tr</extension>
          <mime-type>application/x-troff</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>tsv</extension>
          <mime-type>text/tab-separated-values</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>txt</extension>
          <mime-type>text/plain</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ulw</extension>
          <mime-type>audio/basic</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>ustar</extension>
          <mime-type>application/x-ustar</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>xbm</extension>
          <mime-type>image/x-xbitmap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>xpm</extension>
          <mime-type>image/x-xpixmap</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>xwd</extension>
          <mime-type>image/x-xwindowdump</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>wav</extension>
          <mime-type>audio/x-wav</mime-type>
      </mime-mapping>
      <mime-mapping>
          <!-- Wireless Bitmap -->
          <extension>wbmp</extension>
          <mime-type>image/vnd.wap.wbmp</mime-type>
      </mime-mapping>
      <mime-mapping>
          <!-- WML Source -->
          <extension>wml</extension>
          <mime-type>text/vnd.wap.wml</mime-type>
      </mime-mapping>
      <mime-mapping>
          <!-- Compiled WML -->
          <extension>wmlc</extension>
          <mime-type>application/vnd.wap.wmlc</mime-type>
      </mime-mapping>
      <mime-mapping>
          <!-- WML Script Source -->
          <extension>wmls</extension>
          <mime-type>text/vnd.wap.wmls</mime-type>
      </mime-mapping>
      <mime-mapping>
          <!-- Compiled WML Script -->
          <extension>wmlscriptc</extension>
          <mime-type>application/vnd.wap.wmlscriptc</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>wrl</extension>
          <mime-type>x-world/x-vrml</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>Z</extension>
          <mime-type>application/x-compress</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>z</extension>
          <mime-type>application/x-compress</mime-type>
      </mime-mapping>
      <mime-mapping>
          <extension>zip</extension>
          <mime-type>application/zip</mime-type>
      </mime-mapping>
  
  
    <!-- ==================== Default Welcome File List ===================== -->
    <!-- When a request URI refers to a directory, the default servlet looks  -->
    <!-- for a "welcome file" within that directory and, if present,          -->
    <!-- to the corresponding resource URI for display.  If no welcome file   -->
    <!-- is present, the default servlet either serves a directory listing,   -->
    <!-- or returns a 404 status, depending on how it is configured.          -->
    <!--                                                                      -->
    <!-- If you define welcome files in your own application's web.xml        -->
    <!-- deployment descriptor, that list *replaces* the list configured      -->
    <!-- here, so be sure that you include any of the default values that     -->
    <!-- you wish to include.                                                 -->
  
      <welcome-file-list>
          <welcome-file>index.html</welcome-file>
          <welcome-file>index.htm</welcome-file>
          <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
  
  </web-app>
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>