`
ilikeido
  • 浏览: 26757 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

从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提供了执行环境。 )Struts 2 中的Action对象为每一个请求产生一个实例,因此没有线程安全问题。在与spring集成时,应设置作用域scope为prototype。

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


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics