过滤器
引入
在servlet中获取用户参数数据 : request.getParameter(“参数名”) 遇到参数内容中文乱码问题
post提交:
request.setCharacterEncoding(“utf-8”);
get提交:
手动解码:* name = new String(name.getBytes(“iso-8859-1”),”utf-8”)*
问题: 如何把这些重复的操作抽取出来呢?
这时就可以用到过滤器,把重复的操作代码写在过滤器中!!!
什么是过滤器
过滤器就是一个Filter接口,在javax.servlet.Filter;过滤器是servlet的三大组件之一:
servlet的三大组件:
(servlet) Servlet接口: javax.servlet.Servlet; 作用:用于开发动态网页
(过滤器)Filter接口: javax.servlet.Filter;
(监听器)Listener接口: javax.servlet.*
servlet组件的特点:
1.把组件配置到web.xml文件中
2.组件就可以交给tomcat服务器运行!!!!
作用:
过滤器的作用,就是一个实现了Filter接口的对象,这个对象可以在请求资源(可能是动态网页或者静态网页)时,或者在响应资源时,或者在请求和响应资源时,执行过滤任务。
过滤器的生命周期
构造方法: 创建过滤器对象的时候调用。在加载当前项目的时候加载过滤器,只调用1次。单实例的多线程。
init方法: 在创建完过滤器对象之后调用。只调用1次。
doFilter方法: 过滤任务方法。会调用n次。每次访问目标资源的时候,doFilter就会被调用。
destory方法:在销毁过滤器对象的时候调用。在web项目重新部署或tomcat服务器停止的时候销毁过滤器对象。
在web.xml文件中配置过滤器
<!-- 配置一个过滤器 -->
<!-- 过滤器配置 -->
<filter>
<!-- 内部名称 -->
<filter-name>FirstFilter</filter-name>
<filter-class>gz.itcast.a_filter.FirstFilter</filter-class>
</filter>
<!-- 过滤器映射配置 -->
<filter-mapping>
<!-- 也是内部名称,但是和上面的名称保持一致!!! -->
<filter-name>FirstFilter</filter-name>
<!--过滤器的url-pattern代表的是过滤的路径,而不是访问过滤器的路径 -->
<url-pattern>/target</url-pattern>
</filter-mapping>
注意: servlet的url-pattern指的是访问servlet的路径,而过滤器的url-pattern指的是需要过滤的路径。而这个过滤的路径,可以是任意资源路径(可以是静态网页路径,页可以是动态网页路径)。
FilterConfig对象
和servletconfig对象类似,这个FilterConfig对象加载初始化参数内容
FilterChain对象
什么是过滤器链? 当一个资源被多个过滤器所过滤,那么就形成了一个过滤器链.注意,多个过滤器执行的顺序,取决于web.xml中filter的顺序,从上之下执行.