1 52 53 package com.go.teaservlet.util; 54 55 import java.io.UnsupportedEncodingException ; 56 import java.util.Set ; 57 import java.util.HashSet ; 58 import javax.servlet.http.HttpServletRequest ; 59 60 68 public class DecodedRequest extends FilteredHttpServletRequest { 69 private static final byte[] TEST_BYTES = {65}; 70 71 private static Set cGoodEncodings = new HashSet (7); 72 73 private static synchronized String checkEncoding(String encoding) { 74 if (!cGoodEncodings.contains(encoding)) { 75 try { 77 new String (TEST_BYTES, encoding); 78 } 79 catch (UnsupportedEncodingException e) { 80 throw new IllegalArgumentException 81 ("Unsupported character encoding: " + encoding); 82 } 83 cGoodEncodings.add(encoding); 84 } 85 return encoding; 86 } 87 88 private String mEncoding; 89 private String mOriginalEncoding; 90 91 96 public DecodedRequest(HttpServletRequest request, String encoding) { 97 super(request); 98 mEncoding = checkEncoding(encoding); 99 mOriginalEncoding = request.getCharacterEncoding(); 100 } 101 102 public String getCharacterEncoding() { 103 return mEncoding; 104 } 105 106 public String getParameter(String name) { 107 String value; 108 if ((value = mRequest.getParameter(name)) != null) { 109 try { 110 return new String 111 (value.getBytes(mOriginalEncoding), mEncoding); 112 } 113 catch (UnsupportedEncodingException e) { 114 } 115 } 116 return value; 117 } 118 119 public String [] getParameterValues(String name) { 120 String [] values = (String [])mRequest.getParameterValues(name).clone(); 121 try { 122 String enc = mEncoding; 123 String orig = mOriginalEncoding; 124 for (int i = values.length; --i >= 0; ) { 125 String value; 126 if ((value = values[i]) != null) { 127 values[i] = new String (value.getBytes(orig), enc); 128 } 129 } 130 } 131 catch (UnsupportedEncodingException e) { 132 } 133 return values; 134 } 135 } 136 | Popular Tags |