up:: 过滤器的两种开发形式
字符集过滤器:解决web应用中的中文乱码问题。
(1)这是一个过滤器完整案例;
(2)展示使用过滤器的方式解决中文乱码的问题;
(3)可以发现,过滤器的作用不仅仅局限于“拦截,筛查”,过滤器也可以完成很多其他种类的功能,即过滤器可以在“拦截”一个请求(或响应)后,对这个请求(或响应)进行其他的处理后再予以放行 。
一:问题阐述
对于中文乱码问题:在请求中文乱码这篇博客中有详细介绍。
上面几种解决方案中,都需要按照一定的规则去配置或者编写代码;而万一代码写错了,都会出现中文乱码问题,所以,为了应对这种可能出错的问题,字符集过滤器应运而生。
字符集过滤器作用就是对所有请求进行前置处理,将请求与响应中的字符集进行一个统一的设置,如此一来,在使用Servlet开发的时候就不需要再写上图中2、3两句话,这样可以极大降低程序员出错的风险。
二:开始开发
1.编写CharacterEncodingFilter类,实现Filter接口,编写doFilter方法,作为字符集过滤器:
CharacterEncodingFilter :
注:
(1)因为这个过滤器是基于HTTP请求来进行的,所以在编写doFilter()方法体的时候,需要将ServletRequest这个顶层接口强制转成HttpServletRequest;
(2)get请求的中文乱码,Tomcat8.x已经解决了,所以doFilter()方法中没有处理;doFilter()方法中只处理了post请求和响应的编码方式;
(3)这个例子也印证了过滤器简介这篇博客中,“过滤器执行过程”部分中所说的: 请求会走一遍过滤器,响应也会走一遍过滤器 !
那么,为什么,doFilter方法中的参数不直接设置成HttpServletRequest呐?
当每一个从客户端向服务器发来的请求数据,由RequestFacade类进行解析;所以,只要使用的是Tomcat,见到HttpServletRequest接口的时候,就需要明白,底层是由RequestFacade类来进行的处理;如果使用的不是Tomcat,自然底层实现HttpServletRequest接口的就是其他类了;
ServletResponse接口和HttpServletResponse接口同理。
2.配置过滤器(和以前介绍的一样啦)
3.字符集过滤器编写完成,开始测试:
启动应用后,访问这个Servlet,浏览器显示结果:发现编写的字符集过滤器解决了中文乱码问题。