-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCharacterFilter.java
More file actions
68 lines (62 loc) · 2.77 KB
/
CharacterFilter.java
File metadata and controls
68 lines (62 loc) · 2.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
package filter;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
public class CharacterFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
//POST的乱码解决方案
request.setCharacterEncoding("utf-8");
//返回数据的乱码解决方案
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//将增强后的对象放行
MyRequest myRequest = new MyRequest(request);
chain.doFilter(myRequest, response); //这样一来,后面所有的操作都是基于这个增强后的对象进行的
}
/**创建一个request对象的包装类:
1.编写一个类,实现与被增强对象相同的接口
2.在类中定义一个变量,记住被增强对象
3.在类中定义一个构造方法,接收被增强对象
4.覆写想要增强的方法
5.对于不想增强的方法,直接调用被增强对象(目标对象)的方法
包装设计模式"五步曲"
*/
class MyRequest extends HttpServletRequestWrapper{
private HttpServletRequest request;
public MyRequest(HttpServletRequest request) {
super(request);
this.request = request;
}
public String getParameter(String name) {
//如果请求方式是POST,则不用增强,直接调用目标对象的方法
if(this.request.getMethod().equalsIgnoreCase("POST")){
return this.request.getParameter(name);
}
/*程序运行到此,请求方式必然为GET
先获取值,再进行手动转换*/
String value = this.request.getParameter(name);
try {
value = new String(value.getBytes("iso8859-1"),"utf-8");
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(e);
}
return value; //返回
}
}
public void destroy() {
// TODO Auto-generated method stub
}
public void init(FilterConfig fConfig) throws ServletException {
// TODO Auto-generated method stub
}
}