1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.chain.web.servlet;
18
19
20 import java.util.Map;
21 import javax.servlet.ServletContext;
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import org.apache.commons.chain.web.WebContext;
25
26
27 /**
28 * <p>Concrete implementation of {@link WebContext} suitable for use in
29 * Servlets and JSP pages. The abstract methods are mapped to the appropriate
30 * collections of the underlying servlet context, request, and response
31 * instances that are passed to the constructor (or the initialize method).</p>
32 *
33 * @author Craig R. McClanahan
34 * @version $Revision: 480477 $ $Date: 2006-11-29 08:34:52 +0000 (Wed, 29 Nov 2006) $
35 */
36
37 public class ServletWebContext extends WebContext {
38
39
40 // ------------------------------------------------------------ Constructors
41
42
43 /**
44 * <p>Construct an uninitialized {@link ServletWebContext} instance.</p>
45 */
46 public ServletWebContext() {
47 }
48
49
50 /**
51 * <p>Construct a {@link ServletWebContext} instance that is initialized
52 * with the specified Servlet API objects.</p>
53 *
54 * @param context The <code>ServletContext</code> for this web application
55 * @param request The <code>HttpServletRequest</code> for this request
56 * @param response The <code>HttpServletResponse</code> for this request
57 */
58 public ServletWebContext(ServletContext context,
59 HttpServletRequest request,
60 HttpServletResponse response) {
61
62 initialize(context, request, response);
63
64 }
65
66
67 // ------------------------------------------------------ Instance Variables
68
69
70 /**
71 * <p>The lazily instantiated <code>Map</code> of application scope
72 * attributes.</p>
73 */
74 private Map applicationScope = null;
75
76
77 /**
78 * <p>The <code>ServletContext</code> for this web application.</p>
79 */
80 protected ServletContext context = null;
81
82
83 /**
84 * <p>The lazily instantiated <code>Map</code> of header name-value
85 * combinations (immutable).</p>
86 */
87 private Map header = null;
88
89
90 /**
91 * <p>The lazily instantitated <code>Map</code> of header name-values
92 * combinations (immutable).</p>
93 */
94 private Map headerValues = null;
95
96
97 /**
98 * <p>The lazily instantiated <code>Map</code> of context initialization
99 * parameters.</p>
100 */
101 private Map initParam = null;
102
103
104 /**
105 * <p>The lazily instantiated <code>Map</code> of cookies.</p>
106 */
107 private Map cookieValues = null;
108
109
110 /**
111 * <p>The lazily instantiated <code>Map</code> of request
112 * parameter name-value.</p>
113 */
114 private Map param = null;
115
116
117 /**
118 * <p>The lazily instantiated <code>Map</code> of request
119 * parameter name-values.</p>
120 */
121 private Map paramValues = null;
122
123
124 /**
125 * <p>The <code>HttpServletRequest</code> for this request.</p>
126 */
127 protected HttpServletRequest request = null;
128
129
130 /**
131 * <p>The lazily instantiated <code>Map</code> of request scope
132 * attributes.</p>
133 */
134 private Map requestScope = null;
135
136
137 /**
138 * <p>The <code>HttpServletResponse</code> for this request.</p>
139 */
140 protected HttpServletResponse response = null;
141
142
143 /**
144 * <p>The lazily instantiated <code>Map</code> of session scope
145 * attributes.</p>
146 */
147 private Map sessionScope = null;
148
149
150 // ---------------------------------------------------------- Public Methods
151
152
153 /**
154 * <p>Return the {@link ServletContext} for this context.</p>
155 *
156 * @return The <code>ServletContext</code> for this context.
157 */
158 public ServletContext getContext() {
159
160 return (this.context);
161
162 }
163
164
165 /**
166 * <p>Return the {@link HttpServletRequest} for this context.</p>
167 *
168 * @return The <code>HttpServletRequest</code> for this context.
169 */
170 public HttpServletRequest getRequest() {
171
172 return (this.request);
173
174 }
175
176
177 /**
178 * <p>Return the {@link HttpServletResponse} for this context.</p>
179 *
180 * @return The <code>HttpServletResponse</code> for this context.
181 */
182 public HttpServletResponse getResponse() {
183
184 return (this.response);
185
186 }
187
188
189 /**
190 * <p>Initialize (or reinitialize) this {@link ServletWebContext} instance
191 * for the specified Servlet API objects.</p>
192 *
193 * @param context The <code>ServletContext</code> for this web application
194 * @param request The <code>HttpServletRequest</code> for this request
195 * @param response The <code>HttpServletResponse</code> for this request
196 */
197 public void initialize(ServletContext context,
198 HttpServletRequest request,
199 HttpServletResponse response) {
200
201 // Save the specified Servlet API object references
202 this.context = context;
203 this.request = request;
204 this.response = response;
205
206 // Perform other setup as needed
207
208 }
209
210
211 /**
212 * <p>Release references to allocated resources acquired in
213 * <code>initialize()</code> of via subsequent processing. After this
214 * method is called, subsequent calls to any other method than
215 * <code>initialize()</code> will return undefined results.</p>
216 */
217 public void release() {
218
219 // Release references to allocated collections
220 applicationScope = null;
221 header = null;
222 headerValues = null;
223 initParam = null;
224 param = null;
225 paramValues = null;
226 cookieValues = null;
227 requestScope = null;
228 sessionScope = null;
229
230 // Release references to Servlet API objects
231 context = null;
232 request = null;
233 response = null;
234
235 }
236
237
238
239 // ------------------------------------------------------ WebContext Methods
240
241
242 /**
243 * See the {@link WebContext}'s Javadoc.
244 *
245 * @return Application scope Map.
246 */
247 public Map getApplicationScope() {
248
249 if ((applicationScope == null) && (context != null)) {
250 applicationScope = new ServletApplicationScopeMap(context);
251 }
252 return (applicationScope);
253
254 }
255
256
257 /**
258 * See the {@link WebContext}'s Javadoc.
259 *
260 * @return Header values Map.
261 */
262 public Map getHeader() {
263
264 if ((header == null) && (request != null)) {
265 header = new ServletHeaderMap(request);
266 }
267 return (header);
268
269 }
270
271
272 /**
273 * See the {@link WebContext}'s Javadoc.
274 *
275 * @return Header values Map.
276 */
277 public Map getHeaderValues() {
278
279 if ((headerValues == null) && (request != null)) {
280 headerValues = new ServletHeaderValuesMap(request);
281 }
282 return (headerValues);
283
284 }
285
286
287 /**
288 * See the {@link WebContext}'s Javadoc.
289 *
290 * @return Initialization parameter Map.
291 */
292 public Map getInitParam() {
293
294 if ((initParam == null) && (context != null)) {
295 initParam = new ServletInitParamMap(context);
296 }
297 return (initParam);
298
299 }
300
301
302 /**
303 * See the {@link WebContext}'s Javadoc.
304 *
305 * @return Request parameter Map.
306 */
307 public Map getParam() {
308
309 if ((param == null) && (request != null)) {
310 param = new ServletParamMap(request);
311 }
312 return (param);
313
314 }
315
316
317 /**
318 * See the {@link WebContext}'s Javadoc.
319 *
320 * @return Request parameter Map.
321 */
322 public Map getParamValues() {
323
324 if ((paramValues == null) && (request != null)) {
325 paramValues = new ServletParamValuesMap(request);
326 }
327 return (paramValues);
328
329 }
330
331
332 /**
333 * See the {@link WebContext}'s Javadoc.
334 *
335 * @return Map of Cookies.
336 * @since Chain 1.1
337 */
338 public Map getCookies() {
339
340 if ((cookieValues == null) && (request != null)) {
341 cookieValues = new ServletCookieMap(request);
342 }
343 return (cookieValues);
344
345 }
346
347
348 /**
349 * See the {@link WebContext}'s Javadoc.
350 *
351 * @return Request scope Map.
352 */
353 public Map getRequestScope() {
354
355 if ((requestScope == null) && (request != null)) {
356 requestScope = new ServletRequestScopeMap(request);
357 }
358 return (requestScope);
359
360 }
361
362
363 /**
364 * See the {@link WebContext}'s Javadoc.
365 *
366 * @return Session scope Map.
367 */
368 public Map getSessionScope() {
369
370 if ((sessionScope == null) && (request != null)) {
371 sessionScope = new ServletSessionScopeMap(request);
372 }
373 return (sessionScope);
374
375 }
376
377
378
379 }