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 }