Filter也即是过滤器,是javax.sevlet.Filter下的。Filter是处于服务端的,在服务端与web资源之间起到一个过滤的作用。
在进行服务请求的过程中,如果filter没有满足特定的需求,那么可以不请求到Servlet,而是直接返回。
配置filter:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>myfilter</filter-name>
<filter-class>cn.itcast.filter.MyFilterTest</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<!-- url-pattern 代表的是当前Filter要过滤的路径 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
类只要实现javax.servlet.Filter接口就可以进行filter的开发,在web.xml文件中进行配置,通知web服务需要过滤的资源。如果访问了Filter后想要继续访问web资源,那么需要调用FilterChain对象的doFilter方法。
Filter链—多个Filter的集合叫做Filter链,web应用中可以存在多个Filter;多个Filter执行的顺序与其在web.xml中的<filter-mapping>
中的声明顺序有关,先声明的先执行。
Filter的生命周期:
方法执行顺序—
- 1.执行无参构造方法、
- 2.init()方法 (加载时被执行)
- 3.web请求符合url-pattern路径,Filter中的doFilter方法被执行(可执行多次)
- 4.当重新部署或启动时,destroy会被执行。
在部署时创建和初始化过滤器,只执行一次。
web服务只创建一个实例,是单例的。
Filter工作原理:当部署web应用时,web服务器端解析web.xml,通过反射机制创建Filter实例,执行无参构造,将Filter放置到Filter实例吃当中。
在一个web项目下,有很多的页面,浏览器是有缓存的,对于像html、js、css这些文件如果可以直接将其存在缓存中,在下次访问时就不用访问web资源,可以直接从缓存中取了。
设置不缓存
response.setDataHeader("expires",-1);
response.setHeader("cache-control","no-cache");
response.setHeader("pragma","no-cache");