1.过滤器的概述和入门案例
发送请求到目标资源,在请求道目标资源之前进行过滤。
在javaweb中的三大主件:servlet,监听器,过滤器
2.实现过滤器的方式
servlet和监听器都是实现响应的接口
实现过滤器,也是实现一个接口,Filter
在web.xml中进行配置,让服务器知道这不是普通的类(和监听器一样)
在这个包里面import javax.servlet.Filter;
filter-name:过滤器名称,不一定是类名,/*:表示过滤所有
<filter>
<filter-name>testFilter1</filter-name>
<filter-class>cn.itcast.filter.TestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>testFilter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
访问项目里面的jsp,过滤器启动了,过滤了,可是没有放行,可是没有显示,所以页面是空白的。
chain.doFilter(request, response);做的就是放行。
2.FilterChain对象
1.是一个接口,在javax.servlet包里面
doFilter(ServletRequest request, ServletResponse response)
2.放行操作
过滤链:可以多次过滤,其实就是多个过滤器,
3.过滤器的生命周期
servlet的生命周期:init方法:在servlet在第一次访问的时候创建,service方法请求一次执行一次执行多次,destory方法:servlet销毁的时候执行一次
init():过滤器创建的时候执行,服务器启动的时候创建的,执行一次
doFilter():过滤器执行到匹配的过滤路径的时候,会执行多次
destory():服务器关闭的时候,销毁执行
4.FilterConfig对象的介绍
和servlet里面的ServletConfig比较相似,获取初始化参数,获取当前servlet名称,获取servletContext对象
在servlet标签下配置:<init-param><param-name></param-value></init-param>
servletConfig对象,
第一个获取过滤器的名称,getFilterName()
获取初始化参数,getInitParameter():根据初始化参数的值 Enumeration<java.lang.>
获取servletContext对象,getServletContext()
5.过滤器的配置
关于<url-pattern>的配置:有三种:
第一种:完全路径匹配
第二种:目录匹配,比如/*,所有的路径都能匹配到
第三种:扩展名配置
在过滤器里面还有其他的一些配置都是在filter-mapping里面设置
只过滤一个servlet
<filter-mapping><servlet-name></servlet-name></filter-mapping>
第二个<dispatcher>
REQUEST:默认情况下的值
FORWARD:过滤转发的操作。
INCLUDE:过滤包含
ERROR:过滤错误
如果在web.xml中配置了多个过滤器,都会执行,多个过滤的执行顺序,和我们的filter-mapping的配置顺序有关系,
关闭浏览器不会消除session,而是因为cookie没有了,没法找到他。
案例一:统一网站字符集编码过滤器
案例二:登录