过滤器只是服务器端的组件,它可以截取客户端的请求和响应信息
过滤器的生命周期:
实例化:在web容器启动时,通过web.xml进行配置,然后就会加载过滤器,实例化只进行一次。
初始化:过滤器加载成功,初始化一些初始化信息,会调用过滤器的init(),进行初始化相关操作,初始化也只执行一次。
过滤方法:是针对过滤器中的doFilter()方法;过滤方法执行n多次,因为每次客户端请求都会执行过滤方法。
销毁生命周期:它执行的是过滤器的destroy()方法,该方法在web容器关闭时进行使用,做一些处理工作。
创建一个过滤器类
package com.great.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class FirstFilter implements Filter {
@Override
public void destroy() {
// 销毁实例
}
@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的配置
FirstFilter com.great.filter.FirstFilter FirstFilter /index.jsp 多个过滤器的情况下,会先执行第一个过滤器chain.doFilter()前的代码,然后doFilter()到达第二个过滤器。第二个过滤器也会先执行chain.doFilter()前的代码,然后doFilter()到达Servlet.service()方法。之后在返回过滤器2 doFilter()之后的代码,在返回过滤器1doFilter之后的代码,最后才返回用户。过滤器的分类:request,forward,include,error 默认是request
1.forward 与request 的区别:forward 指的是使用了服务器跳转时需要经过过滤器(在请求转发时,服务器的内部转发),而request表示使用客户端跳转时需要经过过滤器(重定向时,客户端的地址改变),
服务器跳转采用jsp:forward动作标签和request.getRequestDispatcher(“login.jsp”).forward(request,response)方式进行跳转
客户端跳转表示使用response.sendRedirect()方式进行跳转