一、Filter过滤器
1.Filter:Servlet技术规范描述三种技术:Servlet(服务小程序)、Filter(过滤器)、Listener(监听器)之一,运行在服务器端,对服
务器端web资源的访问进行拦截,起到过滤的作用
2.过滤器实现过程:
1).编写一个类实现Filter接口
生命周期:Filter对象在服务器启动web应用加载后,立即创建Filter对象,调用init方法执行初始化,一直驻留在内
存中为后续的过滤服务,当有请求被过滤器拦截到时,都会导致doFilter方法执行,在这个方法中可以控制是
否允许访问资源,当服务器关闭或web应用移除出容器时,随着web应用的销毁而销毁,销毁之前调用destroy
方法完成销毁
init初始化方法:
FilterConfig:代表当前Filter在web.xml中的配置信息,可以用来获取Filter的初始化参数,获取代表当前
web应用的ServletContext对象
doFilter方法:
FilterChain:代表过滤器链,一个资源有可能被多个过滤器所拦截到,过滤器拦截的顺序和过滤器的FilterMaping
在web.xml中的配置顺序相同,所有拦截当前访问的过滤器就组成一个过滤器链。过滤器的最后一个节点
就是要访问的资源。通过执行doFilter方法,表示当前过滤器通过,执行过滤器链的下一个节点
destroy方法:用于Filter过滤器的销毁
2).在web.xml中注册过滤器
<filter>
<filter-name>FirstFilter</filter-name> ---Filter的名字
<filter-class>com.itheima.filter.FirstFilter</filter-class> ---Filter处理类
<init-param> ---可选的配置filter的初始化参数,可以配置多个
<param-name>param3</param-name>
<param-value>value3</param-value>
</init-param>
</filter>
<filter-mapping> ---为Filter配置拦截那些资源,一个Filter可以有多个FilterMapping
<filter-name>FirstFilter</filter-name> --- Filter的名字
<url-pattern>/*</url-pattern> --- 拦截哪些路径,filtermapping中可以有多个url-parrtern标签
<servlet-name>Demo1Servlet</servlet-name> ---也可以配置拦截哪个名称的Serlvet,servlet-name也可以配置多个
<dispatcher>REQUST</dispatcher>
--用来指定当前过滤器拦截哪种类型的对资源的访问,这里可以写REQUEST、FORWARD、INCLUDE、ERROR这四个
值之一,如果不配置dispatcher选项,则默认是REQUEST方式,也可以配置多个dispatcher,指定一个过滤器拦
截多种类型的访问
</filter-mapping>
二、Filter的应用场景:
1.全站乱码解决
POST提交:request.setCharacterEncoding("utf-8")
GET提交:需要操作三种方法:request.getParameter(...);
request.getParameterValues(...);
request.getParameterMap();
2.自动登录
结合cookie方面的只是,来实现过滤器的编写
3.控制禁止缓存动态资源的过滤器
在过滤器中设置头信息:
response.setDateHeader("Expires",-1);
response.setHeader("Cache-control","no-Cache");
response.setHeader("Pragma","no-Cache");
4.控制缓存静态资源的过滤器
在过滤器中设置头信息:
response.setDateHeader("Expires",System.currentTimeMillis()+1000*3600*24*30);
5.使用Filter实现URL级别的权限认证
6.压缩响应
1.Filter:Servlet技术规范描述三种技术:Servlet(服务小程序)、Filter(过滤器)、Listener(监听器)之一,运行在服务器端,对服
务器端web资源的访问进行拦截,起到过滤的作用
2.过滤器实现过程:
1).编写一个类实现Filter接口
生命周期:Filter对象在服务器启动web应用加载后,立即创建Filter对象,调用init方法执行初始化,一直驻留在内
存中为后续的过滤服务,当有请求被过滤器拦截到时,都会导致doFilter方法执行,在这个方法中可以控制是
否允许访问资源,当服务器关闭或web应用移除出容器时,随着web应用的销毁而销毁,销毁之前调用destroy
方法完成销毁
init初始化方法:
FilterConfig:代表当前Filter在web.xml中的配置信息,可以用来获取Filter的初始化参数,获取代表当前
web应用的ServletContext对象
doFilter方法:
FilterChain:代表过滤器链,一个资源有可能被多个过滤器所拦截到,过滤器拦截的顺序和过滤器的FilterMaping
在web.xml中的配置顺序相同,所有拦截当前访问的过滤器就组成一个过滤器链。过滤器的最后一个节点
就是要访问的资源。通过执行doFilter方法,表示当前过滤器通过,执行过滤器链的下一个节点
destroy方法:用于Filter过滤器的销毁
2).在web.xml中注册过滤器
<filter>
<filter-name>FirstFilter</filter-name> ---Filter的名字
<filter-class>com.itheima.filter.FirstFilter</filter-class> ---Filter处理类
<init-param> ---可选的配置filter的初始化参数,可以配置多个
<param-name>param3</param-name>
<param-value>value3</param-value>
</init-param>
</filter>
<filter-mapping> ---为Filter配置拦截那些资源,一个Filter可以有多个FilterMapping
<filter-name>FirstFilter</filter-name> --- Filter的名字
<url-pattern>/*</url-pattern> --- 拦截哪些路径,filtermapping中可以有多个url-parrtern标签
<servlet-name>Demo1Servlet</servlet-name> ---也可以配置拦截哪个名称的Serlvet,servlet-name也可以配置多个
<dispatcher>REQUST</dispatcher>
--用来指定当前过滤器拦截哪种类型的对资源的访问,这里可以写REQUEST、FORWARD、INCLUDE、ERROR这四个
值之一,如果不配置dispatcher选项,则默认是REQUEST方式,也可以配置多个dispatcher,指定一个过滤器拦
截多种类型的访问
</filter-mapping>
二、Filter的应用场景:
1.全站乱码解决
POST提交:request.setCharacterEncoding("utf-8")
GET提交:需要操作三种方法:request.getParameter(...);
request.getParameterValues(...);
request.getParameterMap();
2.自动登录
结合cookie方面的只是,来实现过滤器的编写
3.控制禁止缓存动态资源的过滤器
在过滤器中设置头信息:
response.setDateHeader("Expires",-1);
response.setHeader("Cache-control","no-Cache");
response.setHeader("Pragma","no-Cache");
4.控制缓存静态资源的过滤器
在过滤器中设置头信息:
response.setDateHeader("Expires",System.currentTimeMillis()+1000*3600*24*30);
5.使用Filter实现URL级别的权限认证
6.压缩响应