关于struts2的请求流程在网上百度就可以看到,百度图片里面就有,是非常流行的图,在struts2.0.x到struts2.1.2中是这样。我把原图贴出来。
最上面是三个过滤器,并且这三个过滤器也已经被改了。
StrutsPrepareAndExecuteFilter是struts2的核心控制器,它负责拦截由/*指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求,默认情况下,如果用户请求的路径不带后缀或者后缀以.action结尾,这时,请求将被转入struts2框架处理,否则struts2框架忽略该请求的处理。当请求转入struts2框架处理时,会先经过一系列的拦截器,然后到达action。与struts1不同,struts2对用户的每一次请求都会创建一个Action,所以Struts2中的Action是线程安全的。流行的三大框架SSH都是基于MVC模式的,Struts2的控制器C是基于过滤器的,而spring和Hibernate的控制器都是基于Servlet的,其中spring是完整的MVC实现。
请求经过过滤器之后会交给struts2框架处理,这其中的ActionMapper就是要生成对应的action,那么是如何生成的呢?其实是用了一下ActionMapper的代理对象ActionProxy,这个代理对象会调用ConfigurationManager(构造器对象)生成对应的action,ConfigurationManager会根据解析读取Struts.xml文件配置信息,根据相应的信息生成需要的action,前面已经说过,因为每次请求都会创建一个Action,所以说线程是安全的。然后就是经过一系列的拦截器之后执行Action的execute方法,完成我们需要的功能,得到我们想要的结果。基于StrutsPrepareFilter和StrutsExecuteFilter这两个过滤器,中间可以加入我们自己的过滤器和第三方的插件。
在以下地址中有一张请求的流程图,个人觉得是比较好的,分享一下。
http://blog.csdn.net/redarmy_chen/article/details/7342289