由于这几天在学习Struts2框架,自己有点体会,写下来以便自己复习,同时也整理下学习框架的思路。个人感觉学习struts2框架,应该先了解struts2的整体构架。

上图是strut2官网上的整体构架。

struts2工作流程大致如下:

(1)浏览器客户端发送HttpServletRequest请求。

(2)经过servlet组件中的一系列的过滤,比如ActionContentCleanUp,SiteMesh等这些过滤器是可选的,对struts2和其他框架集成时有帮助。FilterDispatcher是Struts2的核心控制过滤器,一般只需要在web.xml中配置FlterDispatcher这个过滤器就可以了。

(3)当经过FilterDispatcher过滤器时,FilterDispatcher会调用doFilter方法,通过该方法询问ActionMapper,ActionMapper根据请求的url找到相应的Action类返回给FilterDispatcher。

(4)FilterDispatcher将控制权交给ActionProxy,ActionProxy通过ConfigurationManger读去Struts.xml中内容找到所需调用的Action实例并获取拦截器链等信息,并实例化ActionInvocation类。

(5)ActionInvocation类,根据自身持有的拦截器链,按照拦截器链来调用各个拦截器,比如Exception拦截器、params拦截器等,拦截器主要完成一些参数的解析、数据验证等功能,执行拦截器后,开始执行Action类的excute方法,根据excute方法返回的结果,调用相应的视图,然后再经过拦截器的拦截后,将数据写到HttpServletResponse中,返回给浏览器客户端。注拦截器的调用采用类似递归调用的方式,ActionInvocation会调用invoke方法,该方法会判断拦截器是否调完,如没有调完会继续调用拦截器。

框架的大致流程就是这样,但是在struts2.2.1中StrutsPrepareAndExecuteFilter替代的FilterDispatcher类,但是struts2的大致流程是没有变化的。

以上内容是参考网上部分教程写的,由于是新手可能某些地方说的不对,欢迎大家的指正。

posted on 2013-03-08 19:40  在异乡  阅读(218)  评论(0编辑  收藏  举报