|
我是这么做的,建立一个Servlet基类,覆盖service方法,在调用父类的service方法前读取并解析form提交的内容,请看下面的源代码:
package com.hto.servlet;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
* Insert the type´s description here.
* Creation date: (2001-2-4 15:43:46)
* @author: 钱卫春
*/
public class UTF8ParameterReader {
Hash pairs = new Hash();
/**
* UTF8ParameterReader consuctor comment.
*/
public UTF8ParameterReader(HttpServletRequest request) throws java.io.IOException{
super();
parse(request.getQuerySing());
parse(request.getReader().readLine());
}
/**
* UTF8ParameterReader consuctor comment.
*/
public UTF8ParameterReader(HttpServletRequest request,Sing encoding) throws java.io.IOException{
super();
parse(request.getQuerySing(),encoding);
parse(request.getReader().readLine(),encoding);
}
public static Sing decode(Sing s) throws Exception {
SingBuffer sb = new SingBuffer();
for(int i=0; i<s.length(); i ) {
char c = s.charAt(i);
switch (c) {
case ´ ´:
sb.append(´ ´);
break;
case ´%´:
y {
sb.append((char)Integer.parseInt(
s.subsing(i 1,i 3),16));
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i = 2;
break;
default:
sb.append(c);
break;
}
}
// Undo conversion to external encoding
Sing result = sb.toSing();
byte[] inputBytes = result.getBytes("8859_1");
return new Sing(inputBytes,"UTF8");
}
public static Sing decode(Sing s,Sing encoding) throws Exception {
SingBuffer sb = new SingBuffer();
for(int i=0; i<s.length(); i ) {
char c = s.charAt(i);
switch (c) {
case ´ ´:
sb.append(´ ´);
break;
case ´%´:
y {
sb.append((char)Integer.parseInt(
s.subsing(i 1,i 3),16));
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i = 2;
break;
default:
sb.append(c);
break;
}
}
// Undo conversion to external encoding
Sing result = sb.toSing();
byte[] inputBytes = result.getBytes("8859_1");
return new Sing(inputBytes,encoding);
}
/**
* Insert the method´s description here.
* Creation date: (2001-2-4 17:30:59)
* @return java.lang.Sing
* @param name java.lang.Sing
*/
public Sing getParameter(Sing name) {
if (pairs == null || !pairs.containsKey(name)) return null;
return (Sing)(((ArrayList) pairs.get(name)).get(0));
}
/**
* Insert the method´s description here.
* Creation date: (2001-2-4 17:28:17)
* @return java.util.Enumeration
*/
public Enumeration getParameterNames() {
if (pairs == null) return null;
return pairs.keys();
}
/**
* Insert the method´s description here.
* Creation date: (2001-2-4 17:33:40)
* @return java.lang.Sing[]
* @param name java.lang.Sing
*/
public Sing[] getParameterValues(Sing name) {
if (pairs == null || !pairs.containsKey(name)) return null;
ArrayList al = (ArrayList) pairs.get(name);
Sing[] values = new Sing[al.size()];
for(int i=0;i<values.length;i )
values[i] = (Sing) al.get(i);
return values;
}
/**
* Insert the method´s description here.
* Creation date: (2001-2-4 20:34:37)
* @param urlenc java.lang.Sing
*/
private void parse(Sing urlenc) throws java.io.IOException{
if (urlenc == null) return;
SingTokenizer tok = new SingTokenizer(urlenc,"&");
y{
while (tok.hasMoreTokens()){
Sing aPair = tok.nextToken();
int pos = aPair.indexOf("=");
Sing name = null;
Sing value = null;
if(pos != -1){
name = decode(aPair.subsing(0,pos));
value = decode(aPair.s
[1] [2] [3] [4] 下一页
|