Servlet随笔

1.Servlet和ServletConfig的关系,这里GenericServlet实现了ServletConfig接口,却引用了一个对应ServletConfig类型实例,这里用到了代理模式.通过init(ServletConfig config)方法初始化类引用.
  1 public abstract class GenericServlet implements Servlet, ServletConfig,
  2         java.io.Serializable {
  3 
  4     private static final long serialVersionUID = 1L;
  5 
  6     private transient ServletConfig config;
  7 
  8     /**
  9      * Does nothing. All of the servlet initialization is done by one of the
 10      * <code>init</code> methods.
 11      */
 12     public GenericServlet() {
 13         // NOOP
 14     }
 15 
 16     /**
 17      * Called by the servlet container to indicate to a servlet that the servlet
 18      * is being taken out of service. See {@link Servlet#destroy}.
 19      */
 20     @Override
 21     public void destroy() {
 22         // NOOP by default
 23     }
 24 
 25     /**
 26      * Returns a <code>String</code> containing the value of the named
 27      * initialization parameter, or <code>null</code> if the parameter does not
 28      * exist. See {@link ServletConfig#getInitParameter}.
 29      * <p>
 30      * This method is supplied for convenience. It gets the value of the named
 31      * parameter from the servlet's <code>ServletConfig</code> object.
 32      *
 33      * @param name
 34      *            a <code>String</code> specifying the name of the
 35      *            initialization parameter
 36      * @return String a <code>String</code> containing the value of the
 37      *         initialization parameter
 38      */
 39     @Override
 40     public String getInitParameter(String name) {
 41         return getServletConfig().getInitParameter(name);
 42     }
 43 
 44     /**
 45      * Returns the names of the servlet's initialization parameters as an
 46      * <code>Enumeration</code> of <code>String</code> objects, or an empty
 47      * <code>Enumeration</code> if the servlet has no initialization parameters.
 48      * See {@link ServletConfig#getInitParameterNames}.
 49      * <p>
 50      * This method is supplied for convenience. It gets the parameter names from
 51      * the servlet's <code>ServletConfig</code> object.
 52      *
 53      * @return Enumeration an enumeration of <code>String</code> objects
 54      *         containing the names of the servlet's initialization parameters
 55      */
 56     @Override
 57     public Enumeration<String> getInitParameterNames() {
 58         return getServletConfig().getInitParameterNames();
 59     }
 60 
 61     /**
 62      * Returns this servlet's {@link ServletConfig} object.
 63      *
 64      * @return ServletConfig the <code>ServletConfig</code> object that
 65      *         initialized this servlet
 66      */
 67     @Override
 68     public ServletConfig getServletConfig() {
 69         return config;
 70     }
 71 
 72     /**
 73      * Returns a reference to the {@link ServletContext} in which this servlet
 74      * is running. See {@link ServletConfig#getServletContext}.
 75      * <p>
 76      * This method is supplied for convenience. It gets the context from the
 77      * servlet's <code>ServletConfig</code> object.
 78      *
 79      * @return ServletContext the <code>ServletContext</code> object passed to
 80      *         this servlet by the <code>init</code> method
 81      */
 82     @Override
 83     public ServletContext getServletContext() {
 84         return getServletConfig().getServletContext();
 85     }
 86 
 87     /**
 88      * Returns information about the servlet, such as author, version, and
 89      * copyright. By default, this method returns an empty string. Override this
 90      * method to have it return a meaningful value. See
 91      * {@link Servlet#getServletInfo}.
 92      *
 93      * @return String information about this servlet, by default an empty string
 94      */
 95     @Override
 96     public String getServletInfo() {
 97         return "";
 98     }
 99 
100     /**
101      * Called by the servlet container to indicate to a servlet that the servlet
102      * is being placed into service. See {@link Servlet#init}.
103      * <p>
104      * This implementation stores the {@link ServletConfig} object it receives
105      * from the servlet container for later use. When overriding this form of
106      * the method, call <code>super.init(config)</code>.
107      *
108      * @param config
109      *            the <code>ServletConfig</code> object that contains
110      *            configuration information for this servlet
111      * @exception ServletException
112      *                if an exception occurs that interrupts the servlet's
113      *                normal operation
114      * @see UnavailableException
115      */
116     @Override
117     public void init(ServletConfig config) throws ServletException {
118         this.config = config;
119         this.init();
120     }
121 
122     /**
123      * A convenience method which can be overridden so that there's no need to
124      * call <code>super.init(config)</code>.
125      * <p>
126      * Instead of overriding {@link #init(ServletConfig)}, simply override this
127      * method and it will be called by
128      * <code>GenericServlet.init(ServletConfig config)</code>. The
129      * <code>ServletConfig</code> object can still be retrieved via
130      * {@link #getServletConfig}.
131      *
132      * @exception ServletException
133      *                if an exception occurs that interrupts the servlet's
134      *                normal operation
135      */
136     public void init() throws ServletException {
137         // NOOP by default
138     }
139 
140     /**
141      * Writes the specified message to a servlet log file, prepended by the
142      * servlet's name. See {@link ServletContext#log(String)}.
143      *
144      * @param msg
145      *            a <code>String</code> specifying the message to be written to
146      *            the log file
147      */
148     public void log(String msg) {
149         getServletContext().log(getServletName() + ": " + msg);
150     }
151 
152     /**
153      * Writes an explanatory message and a stack trace for a given
154      * <code>Throwable</code> exception to the servlet log file, prepended by
155      * the servlet's name. See {@link ServletContext#log(String, Throwable)}.
156      *
157      * @param message
158      *            a <code>String</code> that describes the error or exception
159      * @param t
160      *            the <code>java.lang.Throwable</code> error or exception
161      */
162     public void log(String message, Throwable t) {
163         getServletContext().log(getServletName() + ": " + message, t);
164     }
165 
166     /**
167      * Called by the servlet container to allow the servlet to respond to a
168      * request. See {@link Servlet#service}.
169      * <p>
170      * This method is declared abstract so subclasses, such as
171      * <code>HttpServlet</code>, must override it.
172      *
173      * @param req
174      *            the <code>ServletRequest</code> object that contains the
175      *            client's request
176      * @param res
177      *            the <code>ServletResponse</code> object that will contain the
178      *            servlet's response
179      * @exception ServletException
180      *                if an exception occurs that interferes with the servlet's
181      *                normal operation occurred
182      * @exception IOException
183      *                if an input or output exception occurs
184      */
185     @Override
186     public abstract void service(ServletRequest req, ServletResponse res)
187             throws ServletException, IOException;
188 
189     /**
190      * Returns the name of this servlet instance. See
191      * {@link ServletConfig#getServletName}.
192      *
193      * @return the name of this servlet instance
194      */
195     @Override
196     public String getServletName() {
197         return config.getServletName();
198     }
199 }

 

posted @ 2017-12-09 14:28  codewc  阅读(113)  评论(0编辑  收藏  举报