过滤器
定义:过滤器是一个服务器端的组件,他可以截取用户端的请求与相应信息,并对这些信息过滤。
过滤器用来过滤用户请求
常用用途:过滤未登录的用户,跳转错误页面
工作原理
1、过滤器在web容器启动时就已存在
2、用户发送请求,过滤器接收请求
3、过滤器判断后发送给web资源
4、web资源响应发送至过滤器
5、过滤器将web资源的响应发送给用户
生命周期
实例化操作:在web.xml里配置,在web容器启动时实例
初始化操作:调用过滤器的init()方法,和实例化一样只执行一次
过滤操作:调用过滤器的doFilter()方法,会执行多次
销毁操作:调用过滤器的destroy()方法,在web容器关闭时执行一次
//继承接口Filter
public class FirstFilter implement Filter{
@Override
public void destroy(){
//web容器在销毁过滤器实例前调用的方法,释放过滤器占用的资源(多数情况下用不到)
}
@Override
public void doFilter(ServletRequest arg0,ServletResponse arg1,FilterChain arg2)throws IOException,ServletException{
//这个方法完成实际的过滤操作。是过滤器的核心方法。当用户请求访问与过滤器关联的URL时,web容器将先调用doFilter方法。FilterChain参数可以调用chain.doFilter方法,将请求传给下一个过滤器(或目标资源),或利用转发,重定向将请求转发到其他资源。
}
@Override
public void init(FilterConfig arg0) throws ServletException{
//这是初始化方法,Web容器创建过滤器实例后将调用这个方法,这个方法中可以读取web.xml文件中过滤器的参数
}
}
web.xml
<filter>
<filter-name>Filter的名字</filter-name>
<filter-class>Filter的类名称</filter-class>
<init-param><description>描述信息可以省略或者放在此处</description>
<param-name>参数名称</param-name>
<param-value>参数的值</param-vlaue>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter的名字</filter-name>
<url-pattern>URL</url-pattern>
<-- 当用去请求与URL匹配时,触发过滤器工作 -->
<dispatcher></dispatcher>
<-- 可以是没有或多对值:REQUEST,INCLUDE,FORWARD,ERROR未设定时默认值为REQUEST -->
</filter-mapping>