1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package javax.servlet;
17
18 import java.io.IOException;
19 import java.util.Enumeration;
20
21 /**
22 *
23 * Defines a generic, protocol-independent
24 * servlet. To write an HTTP servlet for use on the
25 * Web, extend {@link javax.servlet.http.HttpServlet} instead.
26 *
27 * <p><code>GenericServlet</code> implements the <code>Servlet</code>
28 * and <code>ServletConfig</code> interfaces. <code>GenericServlet</code>
29 * may be directly extended by a servlet, although it's more common to extend
30 * a protocol-specific subclass such as <code>HttpServlet</code>.
31 *
32 * <p><code>GenericServlet</code> makes writing servlets
33 * easier. It provides simple versions of the lifecycle methods
34 * <code>init</code> and <code>destroy</code> and of the methods
35 * in the <code>ServletConfig</code> interface. <code>GenericServlet</code>
36 * also implements the <code>log</code> method, declared in the
37 * <code>ServletContext</code> interface.
38 *
39 * <p>To write a generic servlet, you need only
40 * override the abstract <code>service</code> method.
41 *
42 *
43 * @author Various
44 * @version $Version$
45 *
46 *
47 *
48 */
49
50
51 public abstract class GenericServlet
52 implements Servlet, ServletConfig, java.io.Serializable
53 {
54
55 private transient ServletConfig config;
56
57
58 /**
59 *
60 * Does nothing. All of the servlet initialization
61 * is done by one of the <code>init</code> methods.
62 *
63 */
64
65 public GenericServlet() { }
66
67
68
69 /**
70 * Called by the servlet container to indicate to a servlet that the
71 * servlet is being taken out of service. See {@link Servlet#destroy}.
72 *
73 *
74 */
75
76 public void destroy() {
77 }
78
79
80
81 /**
82 * Returns a <code>String</code> containing the value of the named
83 * initialization parameter, or <code>null</code> if the parameter does
84 * not exist. See {@link ServletConfig#getInitParameter}.
85 *
86 * <p>This method is supplied for convenience. It gets the
87 * value of the named parameter from the servlet's
88 * <code>ServletConfig</code> object.
89 *
90 * @param name a <code>String</code> specifying the name
91 * of the initialization parameter
92 *
93 * @return String a <code>String</code> containing the value
94 * of the initialization parameter
95 *
96 */
97
98 public String getInitParameter(String name) {
99 return getServletConfig().getInitParameter(name);
100 }
101
102
103
104 /**
105 * Returns the names of the servlet's initialization parameters
106 * as an <code>Enumeration</code> of <code>String</code> objects,
107 * or an empty <code>Enumeration</code> if the servlet has no
108 * initialization parameters. See {@link
109 * ServletConfig#getInitParameterNames}.
110 *
111 * <p>This method is supplied for convenience. It gets the
112 * parameter names from the servlet's <code>ServletConfig</code> object.
113 *
114 *
115 * @return Enumeration an enumeration of <code>String</code>
116 * objects containing the names of
117 * the servlet's initialization parameters
118 *
119 */
120
121 public Enumeration getInitParameterNames() {
122 return getServletConfig().getInitParameterNames();
123 }
124
125
126
127
128
129 /**
130 * Returns this servlet's {@link ServletConfig} object.
131 *
132 * @return ServletConfig the <code>ServletConfig</code> object
133 * that initialized this servlet
134 *
135 */
136
137 public ServletConfig getServletConfig() {
138 return config;
139 }
140
141
142
143
144 /**
145 * Returns a reference to the {@link ServletContext} in which this servlet
146 * is running. See {@link ServletConfig#getServletContext}.
147 *
148 * <p>This method is supplied for convenience. It gets the
149 * context from the servlet's <code>ServletConfig</code> object.
150 *
151 *
152 * @return ServletContext the <code>ServletContext</code> object
153 * passed to this servlet by the <code>init</code>
154 * method
155 *
156 */
157
158 public ServletContext getServletContext() {
159 return getServletConfig().getServletContext();
160 }
161
162
163
164
165
166 /**
167 * Returns information about the servlet, such as
168 * author, version, and copyright.
169 * By default, this method returns an empty string. Override this method
170 * to have it return a meaningful value. See {@link
171 * Servlet#getServletInfo}.
172 *
173 *
174 * @return String information about this servlet, by default an
175 * empty string
176 *
177 */
178
179 public String getServletInfo() {
180 return "";
181 }
182
183
184
185
186 /**
187 *
188 * Called by the servlet container to indicate to a servlet that the
189 * servlet is being placed into service. See {@link Servlet#init}.
190 *
191 * <p>This implementation stores the {@link ServletConfig}
192 * object it receives from the servlet container for later use.
193 * When overriding this form of the method, call
194 * <code>super.init(config)</code>.
195 *
196 * @param config the <code>ServletConfig</code> object
197 * that contains configutation
198 * information for this servlet
199 *
200 * @exception ServletException if an exception occurs that
201 * interrupts the servlet's normal
202 * operation
203 *
204 *
205 * @see UnavailableException
206 *
207 */
208
209 public void init(ServletConfig config) throws ServletException {
210 this.config = config;
211 this.init();
212 }
213
214
215
216
217
218 /**
219 *
220 * A convenience method which can be overridden so that there's no need
221 * to call <code>super.init(config)</code>.
222 *
223 * <p>Instead of overriding {@link #init(ServletConfig)}, simply override
224 * this method and it will be called by
225 * <code>GenericServlet.init(ServletConfig config)</code>.
226 * The <code>ServletConfig</code> object can still be retrieved via {@link
227 * #getServletConfig}.
228 *
229 * @exception ServletException if an exception occurs that
230 * interrupts the servlet's
231 * normal operation
232 *
233 */
234
235 public void init() throws ServletException {
236
237 }
238
239
240
241
242 /**
243 *
244 * Writes the specified message to a servlet log file, prepended by the
245 * servlet's name. See {@link ServletContext#log(String)}.
246 *
247 * @param msg a <code>String</code> specifying
248 * the message to be written to the log file
249 *
250 */
251
252 public void log(String msg) {
253 getServletContext().log(getServletName() + ": "+ msg);
254 }
255
256
257
258
259 /**
260 * Writes an explanatory message and a stack trace
261 * for a given <code>Throwable</code> exception
262 * to the servlet log file, prepended by the servlet's name.
263 * See {@link ServletContext#log(String, Throwable)}.
264 *
265 *
266 * @param message a <code>String</code> that describes
267 * the error or exception
268 *
269 * @param t the <code>java.lang.Throwable</code> error
270 * or exception
271 *
272 *
273 */
274
275 public void log(String message, Throwable t) {
276 getServletContext().log(getServletName() + ": " + message, t);
277 }
278
279
280
281 /**
282 * Called by the servlet container to allow the servlet to respond to
283 * a request. See {@link Servlet#service}.
284 *
285 * <p>This method is declared abstract so subclasses, such as
286 * <code>HttpServlet</code>, must override it.
287 *
288 *
289 *
290 * @param req the <code>ServletRequest</code> object
291 * that contains the client's request
292 *
293 * @param res the <code>ServletResponse</code> object
294 * that will contain the servlet's response
295 *
296 * @exception ServletException if an exception occurs that
297 * interferes with the servlet's
298 * normal operation occurred
299 *
300 * @exception IOException if an input or output
301 * exception occurs
302 *
303 */
304
305 public abstract void service(ServletRequest req, ServletResponse res)
306 throws ServletException, IOException;
307
308
309
310 /**
311 * Returns the name of this servlet instance.
312 * See {@link ServletConfig#getServletName}.
313 *
314 * @return the name of this servlet instance
315 *
316 *
317 *
318 */
319
320 public String getServletName() {
321 return config.getServletName();
322 }
323 }