struts2是基于Webwork的基础上做了进一步的改进,而不是在原有struts1做更新的,struts2的出现弥补了struts1的不足之处.struts2的体系结构实现了model-view-controller(MVC)设计模式的概念,它将这些概念映射到web应用程序的组件和概念中.
1.控制器层(controller)
与struts1使用ActionServlet作为控制器不同,struts2使用了Filter技术,FilterDispatcher是struts框架的核心控制器,该控制器负责拦截和过滤所有的用户请求,如果用户请求以action结尾,该请求将被转入struts框架来进行处理.struts框架获取了*.action请求后,将根据*.action请求的前面名称部分决定调用哪个业务控制action类.
struts应用中的action都定义在struts.xml文件中,在该文件中配置action时,主要定义了该action的name属性和class属性,其中name属性决定了该action处理哪个用户请求,而class属性决定了action的实现类.
用于处理用户请求的action实例,并没有与Servlet API耦合,所以无法直接处理用户的请求,为此,struts框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到action中,并回调Action的execute方法来处理用户请求.
2.显示层(view)
struts2框架改变了struts1只能使用jsp作为视图技术的现状,它还允许使用其他的视图技术,如(FreeMarker\Velocity)等作为显示层.
当struts2的控制层调用业务逻辑组件处理完用户请求后,会返回一个字符串,该字符串代表逻辑视图,它并未与任何的视图技术关联.
3.模型层(model)
模型层指的是后端业务逻辑处理,它会被action调用来处理用户请求,当控制器需要获许得业务逻辑组件实例时,通常并不会直接获取业务逻辑组件实例,而是通过工厂模式来获得业务逻辑组件的实例;或者利用其他IoC容器(如Spring容器)来管理业务逻辑组件的实例.