filter类里写代码

包装类思想

 1 package cn.itcast.filter;
 2 
 3 import java.io.IOException;
 4 import java.io.UnsupportedEncodingException;
 5 
 6 import javax.servlet.Filter;
 7 import javax.servlet.FilterChain;
 8 import javax.servlet.FilterConfig;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletRequestWrapper;
14 import javax.servlet.http.HttpServletResponse;
15 
16 public class AllCharacterEncodingFilter implements Filter {
17     private FilterConfig filterConfig;
18     
19     public void init(FilterConfig filterConfig) throws ServletException {
20         this.filterConfig = filterConfig;
21     }
22     public void doFilter(ServletRequest req, ServletResponse resp,
23             FilterChain chain) throws IOException, ServletException {
24         HttpServletRequest request = (HttpServletRequest)req;
25         HttpServletResponse response = (HttpServletResponse)resp;
26         //获取配置的过滤器参数encoding的值:如果没有,给定一个默认值
27         String encoding = filterConfig.getInitParameter("encoding");
28         if(encoding==null)
29             encoding = "UTF-8";
30         //设置POST请求方式的中文请求参数的编码
31         request.setCharacterEncoding(encoding);
32         //设置响应输出时的编码:字符流和字节流
33         response.setCharacterEncoding(encoding);//字节流输出时通知客户端的解码码表
34         response.setContentType("text/html;charset="+encoding);//字节流输出时通知客户端的解码码表;字符流:字符流输出时使用的码表及通知客户端解码用的码表
35         
36         MyHttpServletRequest mrequest = new MyHttpServletRequest(request);
37         //放行
38         chain.doFilter(mrequest, response);
39     }
40 
41     
42     public void destroy() {
43 
44     }
45 }
46 
47 //HttpServletRequestWrapper内部的代码与连接池原理中那个默认适配器一样
48 class MyHttpServletRequest extends HttpServletRequestWrapper{
49     public MyHttpServletRequest(HttpServletRequest request){
50         super(request);
51     }
52     //只对get请求方式进行改写
53     public String getParameter(String name) {
54         String value = super.getParameter(name);
55         if(value==null)
56             return value;
57         //得到请求方式
58         String method = super.getMethod();
59         if("get".equalsIgnoreCase(method)){
60             try {
61                 value = new String(value.getBytes("ISO-8859-1"),super.getCharacterEncoding());
62             } catch (UnsupportedEncodingException e) {
63                 e.printStackTrace();
64             }
65         }
66         return value;
67     }
68     
69 }
70 class MyHttpServletRequest1 extends HttpServletRequestWrapper{
71     private HttpServletRequest request;
72     public MyHttpServletRequest1(HttpServletRequest request){
73         super(request);
74         this.request = request;
75     }
76     //只对get请求方式进行改写
77     public String getParameter(String name) {
78         String value = request.getParameter(name);
79         if(value==null)
80             return value;
81         //得到请求方式
82         String method = request.getMethod();
83         if("get".equalsIgnoreCase(method)){
84             try {
85                 value = new String(value.getBytes("ISO-8859-1"),"UTF-8");
86             } catch (UnsupportedEncodingException e) {
87                 e.printStackTrace();
88             }
89         }
90         return value;
91     }
92     
93 }
View Code

相关文章:

  • 2022-12-23
  • 2021-08-11
  • 2021-12-20
  • 2022-01-02
  • 2021-12-04
  • 2021-10-25
  • 2022-02-24
  • 2021-11-21
猜你喜欢
  • 2021-12-17
  • 2021-05-16
  • 2022-02-03
  • 2021-06-10
  • 2022-12-23
  • 2022-12-23
  • 2021-11-05
相关资源
相似解决方案