Struts2主要是由拦截器来实现的
首先客户端通过HttpServletRequest来向servlet容器,也就是tomcat发送请求。
这个请求会经过一系列的过滤器,诸如ActionCtontextCleanUpdeng等等其他过滤器,
最终会被我们struts的核心过滤器FilterDispather过滤到,不过从struts2.3以后核心的控制器发生了变化,变成了StrutsPrepareAndExecuteFilter这个过滤器,也就是我们的核心控制器,核心控制器会访问ActionMapper来决定是否需要决定调用某一个action,如果用户请求的是jsp页面或者其他的web资源,只要不是action请求,那么他就不会去访问我们的action。
反之,如果我们的ActionMapping决定要调用我们的某一个Action,那么核心控制器会将我们的控制权临时委派给我们的ActionProxy,也就是我们的Action代理,这个时候我们的代理会通过 一个叫做ConfigurationManager的配置管理器来加载Struts的核心配置文件,struts.xml,通过前面的学习我们认知到struts的action都配置在strus.xml文件中,所以我们需要去加载这个文件,找到需要调用的action,
如果在struts.xml文件中我们找到了需要调用的action以后,我们的ActionProxy会创建一个叫做ActionInvocation的实例,在ActionInvacition里面他包括了创建的action的实例,同时它里面也包含了一些非常重要的东西,我们称之为拦截器---Interoptor,
在调用action之前以及调用action之后他还要调用非常多的拦截器,在调用action之前会依次调用所配置的拦截器,直到action之前的所有拦截器都调用完成后他会调用我们的action中的业务处理方法,进行相应的业务的处理。同时这个方法会返回一系列结果,------实际上会返回一系列字符串,然后我们根据这些字符串去调用相应的视图
资源-------jsp页面等。当返回视图以后,并没有立刻去响应用户,他还需要把之前执行过的拦截器再次反过来再执行一遍。(先前最后执行的这下最先执行),---故而又称之为拦截器栈。当这些拦截器都执行完以后,才会进行最终的请求的响应。通过HttpServletResponse去完成对客户端的响应。