当我们使用Struts2的时候,其中有个重要的类org.apache.struts2.dispatcher.

FilterDispatcher;

当用户通过一个浏览器提交请求后 ,请求被web.xml定义的过滤器FilterDispatcher进行拦截,主要是要经过3层过滤器的处理,分别是ActionContextCleanUp,其他过滤器和Dispatcher。

在FilterDispatcher中首先询问ActionMapping是否需要调用某个Action来处理请求,如果ActionMapping决定需要调用某个Action,FilterDispatcher则把请求处理交给ActionProxy,ActionProxy通过配置文件struts.xml找到需要用到的Action类,然后他会创建一个ActionInvocation实例并调用该Action,但在调用之前,ActionInvocation会根据配置加载Action相关的所有Interceptor,等Action执行完毕ActionInvocation负责根据struts.xml中的配置找到对应的返回结果resut

过滤器提供的是一种面向对象的模块化机制,用已将公共任务封装到可插入的组建中,这些组建通过一个配置文件来声明并且动态的处理信息,实现过滤器要经过3个步骤:首先编写过滤器实现类的程序,然后把该过滤器配置到web.xml文件中声明,最后把过滤器于应用程序一起打包并部署。

过滤器一共包含3个接口他们分别是Filter,FilterChain,FilterConfig,过滤器必须实现如下Filter接口

init(),doFilter(),destroy(); 如下是Filter源码:

 

同时我们也可以配置多个过滤器,多个过滤器通过配置顺序依次执行

关于过滤器的配置请参考下文