GenericServlet.java
上传用户:tanyanyong
上传日期:2013-06-23
资源大小:1355k
文件大小:11k
源码类别:

电子政务应用

开发平台:

MultiPlatform

  1. /*
  2.  * The Apache Software License, Version 1.1
  3.  *
  4.  * Copyright (c) 1999 The Apache Software Foundation.  All rights 
  5.  * reserved.
  6.  *
  7.  * Redistribution and use in source and binary forms, with or without
  8.  * modification, are permitted provided that the following conditions
  9.  * are met:
  10.  *
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer. 
  13.  *
  14.  * 2. Redistributions in binary form must reproduce the above copyright
  15.  *    notice, this list of conditions and the following disclaimer in
  16.  *    the documentation and/or other materials provided with the
  17.  *    distribution.
  18.  *
  19.  * 3. The end-user documentation included with the redistribution, if
  20.  *    any, must include the following acknowlegement:  
  21.  *       "This product includes software developed by the 
  22.  *        Apache Software Foundation (http://www.apache.org/)."
  23.  *    Alternately, this acknowlegement may appear in the software itself,
  24.  *    if and wherever such third-party acknowlegements normally appear.
  25.  *
  26.  * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  27.  *    Foundation" must not be used to endorse or promote products derived
  28.  *    from this software without prior written permission. For written 
  29.  *    permission, please contact apache@apache.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "Apache"
  32.  *    nor may "Apache" appear in their names without prior written
  33.  *    permission of the Apache Group.
  34.  *
  35.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36.  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37.  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38.  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41.  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42.  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43.  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44.  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45.  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46.  * SUCH DAMAGE.
  47.  * ====================================================================
  48.  *
  49.  * This software consists of voluntary contributions made by many
  50.  * individuals on behalf of the Apache Software Foundation.  For more
  51.  * information on the Apache Software Foundation, please see
  52.  * <http://www.apache.org/>.
  53.  *
  54.  * ====================================================================
  55.  *
  56.  * This source code implements specifications defined by the Java
  57.  * Community Process. In order to remain compliant with the specification
  58.  * DO NOT add / change / or delete method signatures!
  59.  */ 
  60. package javax.servlet;
  61. import java.io.IOException;
  62. import java.util.Enumeration;
  63. /**
  64.  *
  65.  * Defines a generic, protocol-independent
  66.  * servlet. To write an HTTP servlet for use on the
  67.  * Web, extend {@link javax.servlet.http.HttpServlet} instead.
  68.  *
  69.  * <p><code>GenericServlet</code> implements the <code>Servlet</code>
  70.  * and <code>ServletConfig</code> interfaces. <code>GenericServlet</code>
  71.  * may be directly extended by a servlet, although it's more common to extend
  72.  * a protocol-specific subclass such as <code>HttpServlet</code>.
  73.  *
  74.  * <p><code>GenericServlet</code> makes writing servlets
  75.  * easier. It provides simple versions of the lifecycle methods 
  76.  * <code>init</code> and <code>destroy</code> and of the methods 
  77.  * in the <code>ServletConfig</code> interface. <code>GenericServlet</code>
  78.  * also implements the <code>log</code> method, declared in the
  79.  * <code>ServletContext</code> interface. 
  80.  *
  81.  * <p>To write a generic servlet, you need only
  82.  * override the abstract <code>service</code> method. 
  83.  *
  84.  *
  85.  * @author  Various
  86.  * @version  $Version$
  87.  *
  88.  *
  89.  *
  90.  */
  91.  
  92. public abstract class GenericServlet 
  93.     implements Servlet, ServletConfig, java.io.Serializable
  94. {
  95.     private transient ServletConfig config;
  96.     
  97.     /**
  98.      *
  99.      * Does nothing. All of the servlet initialization
  100.      * is done by one of the <code>init</code> methods.
  101.      *
  102.      */
  103.     public GenericServlet() { }
  104.     
  105.     
  106.     
  107.    /**
  108.      * Called by the servlet container to indicate to a servlet that the
  109.      * servlet is being taken out of service.  See {@link Servlet#destroy}.
  110.      *
  111.      * 
  112.      */
  113.     public void destroy() {
  114. log("destroy");
  115.     }
  116.     
  117.     
  118.     
  119.     /**
  120.      * Returns a <code>String</code> containing the value of the named
  121.      * initialization parameter, or <code>null</code> if the parameter does
  122.      * not exist.  See {@link ServletConfig#getInitParameter}.
  123.      *
  124.      * <p>This method is supplied for convenience. It gets the 
  125.      * value of the named parameter from the servlet's 
  126.      * <code>ServletConfig</code> object.
  127.      *
  128.      * @param name  a <code>String</code> specifying the name 
  129.      * of the initialization parameter
  130.      *
  131.      * @return String  a <code>String</code> containing the value
  132.      * of the initalization parameter
  133.      *
  134.      */ 
  135.     public String getInitParameter(String name) {
  136. return getServletConfig().getInitParameter(name);
  137.     }
  138.     
  139.     
  140.    /**
  141.     * Returns the names of the servlet's initialization parameters 
  142.     * as an <code>Enumeration</code> of <code>String</code> objects,
  143.     * or an empty <code>Enumeration</code> if the servlet has no
  144.     * initialization parameters.  See {@link
  145.     * ServletConfig#getInitParameterNames}.
  146.     *
  147.     * <p>This method is supplied for convenience. It gets the 
  148.     * parameter names from the servlet's <code>ServletConfig</code> object. 
  149.     *
  150.     *
  151.     * @return Enumeration  an enumeration of <code>String</code>
  152.     * objects containing the names of 
  153.     * the servlet's initialization parameters
  154.     *
  155.     */
  156.     public Enumeration getInitParameterNames() {
  157. return getServletConfig().getInitParameterNames();
  158.     }   
  159.     
  160.      
  161.  
  162.      
  163.     /**
  164.      * Returns this servlet's {@link ServletConfig} object.
  165.      *
  166.      * @return ServletConfig  the <code>ServletConfig</code> object
  167.      * that initialized this servlet
  168.      *
  169.      */
  170.     
  171.     public ServletConfig getServletConfig() {
  172. return config;
  173.     }
  174.     
  175.     
  176.  
  177.     
  178.     /**
  179.      * Returns a reference to the {@link ServletContext} in which this servlet
  180.      * is running.  See {@link ServletConfig#getServletContext}.
  181.      *
  182.      * <p>This method is supplied for convenience. It gets the 
  183.      * context from the servlet's <code>ServletConfig</code> object.
  184.      *
  185.      *
  186.      * @return ServletContext  the <code>ServletContext</code> object
  187.      * passed to this servlet by the <code>init</code>
  188.      * method
  189.      *
  190.      */
  191.     public ServletContext getServletContext() {
  192. return getServletConfig().getServletContext();
  193.     }
  194.  
  195.     /**
  196.      * Returns information about the servlet, such as 
  197.      * author, version, and copyright. 
  198.      * By default, this method returns an empty string.  Override this method
  199.      * to have it return a meaningful value.  See {@link
  200.      * Servlet#getServletInfo}.
  201.      *
  202.      *
  203.      * @return String  information about this servlet, by default an
  204.      *  empty string
  205.      *
  206.      */
  207.     
  208.     public String getServletInfo() {
  209. return "";
  210.     }
  211.     /**
  212.      *
  213.      * Called by the servlet container to indicate to a servlet that the
  214.      * servlet is being placed into service.  See {@link Servlet#init}.
  215.      *
  216.      * <p>This implementation stores the {@link ServletConfig}
  217.      * object it receives from the servlet container for alter use.
  218.      * When overriding this form of the method, call 
  219.      * <code>super.init(config)</code>.
  220.      *
  221.      * @param config  the <code>ServletConfig</code> object
  222.      * that contains configutation
  223.      * information for this servlet
  224.      *
  225.      * @exception ServletException  if an exception occurs that
  226.      * interrupts the servlet's normal
  227.      * operation
  228.      *
  229.      * 
  230.      * @see  UnavailableException
  231.      *
  232.      */
  233.     public void init(ServletConfig config) throws ServletException {
  234. this.config = config;
  235. log("init");
  236. this.init();
  237.     }
  238.     /**
  239.      *
  240.      * A convenience method which can be overridden so that there's no need
  241.      * to call <code>super.init(config)</code>.
  242.      *
  243.      * <p>Instead of overriding {@link #init(ServletConfig)}, simply override
  244.      * this method and it will be called by
  245.      * <code>GenericServlet.init(ServletConfig config)</code>.
  246.      * The <code>ServletConfig</code> object can still be retrieved via {@link
  247.      * #getServletConfig}. 
  248.      *
  249.      * @exception ServletException  if an exception occurs that
  250.      * interrupts the servlet's
  251.      * normal operation
  252.      *
  253.      */
  254.     
  255.     public void init() throws ServletException {
  256.     }
  257.     
  258.     /**
  259.      * 
  260.      * Writes the specified message to a servlet log file, prepended by the
  261.      * servlet's name.  See {@link ServletContext#log(String)}.
  262.      *
  263.      * @param msg  a <code>String</code> specifying
  264.      * the message to be written to the log file
  265.      *
  266.      */
  267.      
  268.     public void log(String msg) {
  269. getServletContext().log(getServletName() + ": "+ msg);
  270.     }
  271.    
  272.    
  273.    
  274.    
  275.     /**
  276.      * Writes an explanatory message and a stack trace
  277.      * for a given <code>Throwable</code> exception
  278.      * to the servlet log file, prepended by the servlet's name.
  279.      * See {@link ServletContext#log(String, Throwable)}.
  280.      *
  281.      *
  282.      * @param message  a <code>String</code> that describes
  283.      * the error or exception
  284.      *
  285.      * @param t the <code>java.lang.Throwable</code> error
  286.      *  or exception
  287.      *
  288.      *
  289.      */
  290.    
  291.     public void log(String message, Throwable t) {
  292. getServletContext().log(getServletName() + ": " + message, t);
  293.     }
  294.     
  295.     
  296.     
  297.     /**
  298.      * Called by the servlet container to allow the servlet to respond to
  299.      * a request.  See {@link Servlet#service}.
  300.      * 
  301.      * <p>This method is declared abstract so subclasses, such as 
  302.      * <code>HttpServlet</code>, must override it.
  303.      *
  304.      *
  305.      *
  306.      * @param req  the <code>ServletRequest</code> object
  307.      * that contains the client's request
  308.      *
  309.      * @param res  the <code>ServletResponse</code> object
  310.      * that will contain the servlet's response
  311.      *
  312.      * @exception ServletException  if an exception occurs that
  313.      * interferes with the servlet's
  314.      * normal operation occurred
  315.      *
  316.      * @exception IOException  if an input or output
  317.      * exception occurs
  318.      *
  319.      */
  320.     public abstract void service(ServletRequest req, ServletResponse res)
  321. throws ServletException, IOException;
  322.     
  323.     /**
  324.      * Returns the name of this servlet instance.
  325.      * See {@link ServletConfig#getServletName}.
  326.      *
  327.      * @return          the name of this servlet instance
  328.      *
  329.      *
  330.      *
  331.      */
  332.     public String getServletName() {
  333.         return config.getServletName();
  334.     }
  335. }