KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > go > teaservlet > util > DecodedRequest


1 /* ====================================================================
2  * TeaServlet - Copyright (c) 1999-2000 Walt Disney Internet Group
3  * ====================================================================
4  * The Tea Software License, Version 1.1
5  *
6  * Copyright (c) 2000 Walt Disney Internet Group. All rights reserved.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  *
12  * 1. Redistributions of source code must retain the above copyright
13  * notice, this list of conditions and the following disclaimer.
14  *
15  * 2. Redistributions in binary form must reproduce the above copyright
16  * notice, this list of conditions and the following disclaimer in
17  * the documentation and/or other materials provided with the
18  * distribution.
19  *
20  * 3. The end-user documentation included with the redistribution,
21  * if any, must include the following acknowledgment:
22  * "This product includes software developed by the
23  * Walt Disney Internet Group (http://opensource.go.com/)."
24  * Alternately, this acknowledgment may appear in the software itself,
25  * if and wherever such third-party acknowledgments normally appear.
26  *
27  * 4. The names "Tea", "TeaServlet", "Kettle", "Trove" and "BeanDoc" must
28  * not be used to endorse or promote products derived from this
29  * software without prior written permission. For written
30  * permission, please contact opensource@dig.com.
31  *
32  * 5. Products derived from this software may not be called "Tea",
33  * "TeaServlet", "Kettle" or "Trove", nor may "Tea", "TeaServlet",
34  * "Kettle", "Trove" or "BeanDoc" appear in their name, without prior
35  * written permission of the Walt Disney Internet Group.
36  *
37  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
38  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
39  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
40  * DISCLAIMED. IN NO EVENT SHALL THE WALT DISNEY INTERNET GROUP OR ITS
41  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
42  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
43  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
44  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
45  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
46  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
47  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
48  * ====================================================================
49  *
50  * For more information about Tea, please see http://opensource.go.com/.
51  */

52
53 package com.go.teaservlet.util;
54
55 import java.io.UnsupportedEncodingException JavaDoc;
56 import java.util.Set JavaDoc;
57 import java.util.HashSet JavaDoc;
58 import javax.servlet.http.HttpServletRequest JavaDoc;
59
60 /******************************************************************************
61  * A convenience HttpServletRequest wrapper that automatically decodes request
62  * parameters using the provided character encoding.
63  *
64  * @author Brian S O'Neill
65  * @version
66  * <!--$$Revision:--> 13 <!-- $-->, <!--$$JustDate:--> 9/07/00 <!-- $-->
67  */

68 public class DecodedRequest extends FilteredHttpServletRequest {
69     private static final byte[] TEST_BYTES = {65};
70
71     private static Set JavaDoc cGoodEncodings = new HashSet JavaDoc(7);
72
73     private static synchronized String JavaDoc checkEncoding(String JavaDoc encoding) {
74         if (!cGoodEncodings.contains(encoding)) {
75             // Test the encoding.
76
try {
77                 new String JavaDoc(TEST_BYTES, encoding);
78             }
79             catch (UnsupportedEncodingException JavaDoc e) {
80                 throw new IllegalArgumentException JavaDoc
81                     ("Unsupported character encoding: " + encoding);
82             }
83             cGoodEncodings.add(encoding);
84         }
85         return encoding;
86     }
87
88     private String JavaDoc mEncoding;
89     private String JavaDoc mOriginalEncoding;
90
91     /**
92      * @param request wrapped request
93      * @param encoding character encoding to apply to request parameters
94      * @throws IllegalArgumentException when the encoding isn't supported
95      */

96     public DecodedRequest(HttpServletRequest JavaDoc request, String JavaDoc encoding) {
97         super(request);
98         mEncoding = checkEncoding(encoding);
99         mOriginalEncoding = request.getCharacterEncoding();
100     }
101
102     public String JavaDoc getCharacterEncoding() {
103         return mEncoding;
104     }
105
106     public String JavaDoc getParameter(String JavaDoc name) {
107         String JavaDoc value;
108         if ((value = mRequest.getParameter(name)) != null) {
109             try {
110                 return new String JavaDoc
111                     (value.getBytes(mOriginalEncoding), mEncoding);
112             }
113             catch (UnsupportedEncodingException JavaDoc e) {
114             }
115         }
116         return value;
117     }
118
119     public String JavaDoc[] getParameterValues(String JavaDoc name) {
120         String JavaDoc[] values = (String JavaDoc[])mRequest.getParameterValues(name).clone();
121         try {
122             String JavaDoc enc = mEncoding;
123             String JavaDoc orig = mOriginalEncoding;
124             for (int i = values.length; --i >= 0; ) {
125                 String JavaDoc value;
126                 if ((value = values[i]) != null) {
127                     values[i] = new String JavaDoc(value.getBytes(orig), enc);
128                 }
129             }
130         }
131         catch (UnsupportedEncodingException JavaDoc e) {
132         }
133         return values;
134     }
135 }
136
Popular Tags