一、什么是过滤器?
含义:用于拦截数据源和目的数据之间的消息,并且过滤二者之间的传递的数据
举例:比如过滤某一个格式的文件,然后对这个文件做一些修改
二、什么时候要用到过滤器?
1、 认证过滤:对用户的请求进行统一认证
2、登陆和审核过滤:对用户的访问请求进行记录和审核
3、图像转换过滤
4、数据压缩过滤
当然还有:
1、 过滤字符编码
2、 进行网站访问人数的统计
三、如何使用过滤器?
1、首先需要在web.xml中进行配置
<filter><display-name>Afilter</display-name><filter-name>Afilter</filter-name><filter-class>过滤器类所在的全路径 </filter-class></filter><filter-mapping><filter-name>Afilter</filter-name><url-pattern>/*</url-pattern><!-- 拦截所有请求 --></filter-mapping>
2、然后直接编写一个实现过滤器接口的类,就是一个过滤器
例如:如下是统计某一个网站被访问的次数的代码
package com.kgc.filter;import java.io.IOException;import java.util.Map;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class Afilter implements Filter {FilterConfig fConfig;public void destroy() {// TODO Auto-generated method stub }public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {//获得与天地同寿的applicationServletContext app = fConfig.getServletContext();//取出application中的mapMap<String,Integer> map = (Map<String, Integer>) app.getAttribute("map");//获取访问者的ipString ip = request.getRemoteAddr();//判断这个ip是否曾经来过if(map.containsKey(ip)){//来过,次数加1Integer count = map.get(ip);count+=1;map.put(ip, count);}else{//没来过,次数赋值为1map.put(ip, 1);}//map再次存到application中app.setAttribute("map", map);chain.doFilter(request, response);//放行 }public void init(FilterConfig fConfig) throws ServletException {this.fConfig=fConfig;}}
理解:
实现了Filter接口的类,需要实现三个方法,分别是init、doFilter、destroy
1、init方法:用于过滤器的初始化
2、doFilter方法:用于对请求进行过滤处理
3、destory方法:用于销毁方法用于释放资源
其中,doFilter方法有三个参数,分别是:ServletRequest request, ServletResponse response, FilterChain chain
四、这三个参数分别有什么用?
1、request对象用于获取请求
2、response对象用于在调用chain.doFilter(request, response);时传入
3、chain对象就是用来调用doFilter方法的。
FilterChain接口中只有一个方法,就是doFilter(request, response),用于将过滤后的请求传递给下一个过滤器,如果当前过滤器就是最后一个过滤器,那么就把请求传递给目标资源。
五、如何读取配置文件中的初始化参数?
FilterConfig接口中定义的getInitParameter方法,可以用于读取配置文件,在init方法中使用
public void init(FilterConfig fConfig) throws ServletException {String encoding = fConfig.getInitParameter("encoding");}
六、过滤器是如何运行的?
前文提到的在web.xml中配置好了拦截的请求路径,访问该路径,然后请求被发送到对应的过滤器进行处理
如果觉得《什么是过滤器?什么时候使用过滤器?如何使用过滤器?过滤器的原理?》对你有帮助,请点赞、收藏,并留下你的观点哦!