聊一聊Filter
1.什么是过滤器:
1、过滤器是一个运行在服务器端的程序,先于与之相关的servlet或JSP页面之前运行,实现对请求资源的过滤的功能
2、过滤器可附加到一个或多个servlet或JSP页面上,可以检查请求信息,也可以处理响应信息。
3、Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 执行前后实现一些特殊的功能。
2.常用实例:
自动登录,解决全站乱码,屏蔽非法文字,进行响应数据压缩,等等
3.编写流程:
1、实现类,需要实现接口 javax.servlet.Filterpublic class HelloFilter implement Filter{
public void init(FilterConfig filterConfig )throws ServletException{
}
public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain)throws IOException,ServletException{
//放行
chain.diFilter(request,response);
}
public void destroy(){
}
}
2、配置,在web.xml使用<filter>和<filter-mapping>进行配置
<!--注册通知tomcat过滤器的实现类-->
<filter>
<filter-name>自定义过滤器类名</filter-name>
<filter-class>自定义过滤器类的全路径</filter-class>
</filter>
<!--那些程序使用过滤器>
<filter-mapping>
<filter-name>已经注册的过滤器类名</filter-name>
<url-pattern>对那些路经过滤(/*所有)</url-pattern>
</filter-mapping>
4.生命周期:
4.1、实例化(new) : Web 容器启动时,即会根据 web.xml 中声明的 filter 顺序依次实例化这些 filter
4.2.1、实例化和初始化的操作只会在容器启动时执行,而且只会执行一次。
4.2.2、 Web 容器调用 init(FilterConfig) 来初始化过滤器。
4.2.3、容器在调用该方法时,向过滤器传递 FilterConfig 对象,
4.2.4、利用 FilterConfig 对象可以得到 ServletContext 对象,以及在 web.xml 中配置的过滤器的初始化参数
4.2.5、在这个init(FilterConfig)方法中,可以抛出 ServletException 异常,通知容器该过滤器不能正常工作。
此时的 Web 容器启动失败,整个应用程序不能够被访问
4.3、过滤: 每次访问被拦截目标资源,过滤器中的doFilter的方法就会执行
4.4、销毁: 当服务器关闭(或应用卸载)的时候,服务器就会销毁Filter对象.
5.过滤器链
过滤器在执行过程中是一个一个过滤器去执行的,其中执行的顺序和<filter-mapping>中配置的顺序有关,
5.1 : 过滤器的配置
url-pattern 的配置和servlet中的配置一样
* 完全路径匹配 以 / 开始 /aaaa/bbbb/cccc
* 目录匹配 以 / 开始 /* /aa/*
* 扩展名匹配 不能以 / 开始 *.do *.action *.jsp
servlet-name 配置 通过url-pattern拦截一个Servlet资源 也可以通过servlet-name标签进行拦截
dispatcher 的配置
* REQUEST : 默认值
* FORWARD: 拦截转发
* ERROR : 拦截跳转到错误界面,全局错误界面
* INCLUDE : 拦截在一个页面中包含另一个界面
上一篇: HackerRank Time Delta(python)
下一篇: 添加到sudo组