从MVC的角度看Struts1和Struts2的区别

Struts1和Struts2都是优秀的MVC框架,MVC模式的目的是实现web的职能分离。MVC即模型、视图、控制器,模型层实现业务逻辑,视图层用于用户交互,控制器担当模型的视图的桥梁,它分发用户的请求并选择视图显示给用户,同时也解释用户的输入并映射成模型层可执行的操作。

Struts1的控制层由ActionServlet和ActionMapping构成,ActionServlet继承自Servlet,它包含一组基于配置的ActionMapping对象,每个ActionMapping对象实现了一个请求到模型层中的一个Action之间映射,ActionServlet接收并分发用户的请求。

Model部分由Action和ActionForm对象构成,Strut1中所有的Action处理器对象都是必须继承Action类,Action处理器对象用于封装了具体的处理逻辑,调用业务逻辑模块,并且把响应提交到合适的View组件以产生响应。通过ActionForm组件对象实现了对View和

Model之间交互的支持。在Strut1中Action处理器是单例的,所以有线程安全的问题。

View部分是通过JSP技术实现的,并且提供了一套自定义的标记库。

Struts2是Strut和webwork的整合,它的控制层由FilterDispatcher和Interceptor构成,FilterDispatcher根据请求调用相应的业务逻辑控制器(Action)并根据配置加载Action相关的所有Interceptor。

Strut2中的Action可以是一个pojo,通常包含了一个execute方法,该方法返回一个字符串,当业务控制器处理完用户请求后,根据处理结果不同,execute方法返回不同字符串——每个字符串对应一个视图名,。(实际上Action是个被代理的对象,ActionProxy为Interceptor、Action和Result提供了执行环境。)Struts2中的Action对象为每一个请求产生一个实例,因此没有线程安全问题。在与spring集成时,应设置作用域scope为prototype。

Struts2并不强制View层的表现形式,可以是JSP、Freemarker模板、二进制流输出等等。也有自己的一套标签,并支持OGNL表达式。

相关推荐