一、过滤器
1.1.过滤器概念
过滤器(filter),在We开发中,通过Filter,可以对We的JSP,Servlet,静态图片等文件进行拦截,也可以在We请求到达Servlet之前或响应返回给客户端之前对请求和响应做预处理和后处理,从而实现一些特殊的功能
1.2.过滤器工作原理
过滤器是基于函数回调实现的
过滤器(filter)对We请求进行预处理(如:过滤敏感词汇,设置字符编码等),预处理后将请求交给Servlet进行处理并生成响应,最后filter再对响应进行后处理(如:压缩响应信息等)
1.3.过滤器生命周期
实例化:We在部署We应用时对所有过滤器进行实例化。We回调无参构造方法
初始化:We启动时,会创建Filter对象,然后调用init方法,进行初始化工作。We回调init()方法,且只调用一次,用于加载资源
过滤:We根据每一次的We请求去校验应用配置文件设置的过滤规则,若满足过滤规则,则对请求/响应进行拦截。We回调doFilter()方法,可调用多次
销毁:We在关闭后,Filter对象被销毁,在正常关闭的情况下,在关闭前会调用destroy方法,进行销毁工作。We回调destroy()方法,且只调用一次,用于释放资源
1.4.过滤器应用场景
1.5.过滤器使用示例
//We.xml配置
<filter>
<filter-name>Encoding</filter-name>
<filter-class>org.springframework.we.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Encoding</filter-name>
<l-pattern>/</l-pattern>
</filter-mapping>
//代码示例
importjax.servlet.*;
importja.io.IOException;
pulicclassDemoFilterimplementsFilter{
@Override
pulicvoidinit(FilterConfigfilterConfig)throwsServletException{
//初始化
}
@Override
pulicvoiddoFilter(ServletRequestrequest,ServletResponseresponse,FilterChainchain)throwsIOException,ServletException{
longstartTime=System.crentTimeMillis();
chain.doFilter(request,response);
longendTime=System.crentTimeMillis();
System.out.println("Requestprocessedin"+(endTime-startTime)+"ms");
}
@Override
pulicvoiddestroy(){
//销毁
}
}
(Interceptor),这里指的是Spring中的,是对过滤器更加细化的应用,是Spring框架提供的一种更加灵活的机制,他不依赖于Servlet容器,依赖于Spring框架,是AOP的一种体现,底层基于Ja的实现,不仅可以在Serv方法前后还可以应用到方法的前后进行拦截,并且一个应用中可以同时存在多个,一个请求也可以触发多个,每个会根据它被声明的顺序依次被调用