简单了解Struts与Struts2

一、概念

 

       Struts通过采用JavaServlet/JSP技术,实现了基于JavaEEWeb应用的MVC设计模式的应用框架,是MVC经典设计模式中的一个经典产品

 

       对于Struts1框架而言,由于与JSP/Servlet耦合非常紧密,因而导致了一些严重的问题。首先,Struts1支持的表现层技术单一。由于Struts1出现的年代比较早,那个时候没有FreeMarker、Velocity等技术,因此它不可能与这些视图层的模版技术进行整合。其次,Struts1与ServletAPI的严重耦合,使应用难于测试。最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。所以为了适应时代的需要,Struts2升级出现。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。

 

         Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架。Struts 2是Struts的下一代产品,是在 struts 和WebWork的技术基础上进行了合并的全新的Struts 2框架。全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大

 

        其实这两个概念都是一样的,无论是Struts还是Struts2,都是基于MVCWeb应用程序框架

 

二、Struts与Struts2的比较

 

相同点:

两者都是基于MVC模式的,也是动作驱动的

 

不同点:

1、核心控制器

        struts1以ActionServlet作为核心控制器,由ActionServlet负责拦截用户的所有请求。Struts1框架有3个重要组成部分:Action、ActionForm和ActionForward对象。ActionForm必须实现ActionForm的基类,设计上并不是真正的POJO。并且与servlet API严重耦合,难于测试,而且还是单例,就造成了一定的限制。资源必须为线程安全或者同步

       struts2核心控制器是FilterDispatcher,Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与ServletAPI耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action的execute方法来处理用户请求。显然,上面的处理过程是典型的AOP(面向切面编程)处理方式。

 

2、依赖性

       struts1的Action类依赖于servlet API   属于侵入式设计 。struts2的Action与容器无关

 

3、执行过程

Struts1执行过程

 

 

  • Web容器启动的时候,ActionServlet被初始化,加载struts-config.xml配置文件。 
  • 当客户端浏览器发起请求到ActionServlet时,ActionServlet对请求进行处理。根据请求的路劲和配置信息找到对应的Action和ActionForm。 
  • 在确定将要调用的Action和对应的ActionForm后,就讲请求中包含的值填充到ActionForm中。在调用Action的execute方法前,ActionServlet还需要准备好ActionMapping参数。 
  • Action调用业务逻辑方法,得到返回值,并返回ActionForward对象。 
  • 控制权重新回到ActionServlet,ActionServlet根据Action返回的ActionForward对象转发到相应的页面。 
  • 处理结果返回给浏览器。

 

 Struts2执行过程

 

  • 客户端初始化一个指向Servlet容器(例如Tomcat)的请求 
  • 这个请求经过一个的过滤器链(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin)
  •  接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action 
  •  如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 
  • ActionProxy通过Configuration Manager(配置管理器)从配置文件读取配置信息,找到需要调用的Action类  6 ActionProxy创建一个ActionInvocation的实例。 
  • ActionInvocation实例(创建时填充所有的对象和信息)使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 
  • 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper

 

4、其他

 struts1struts2还有很多不同点可以拿出来对比,在这里就不一一陈述了,网上有很多,在这里推荐给大家两篇这两者对比的博客:

Struts2与Struts的区别(详细,易懂)》;《struts1和struts2原理以及区别


三、小结

 

        无论是struts1还是struts2,自己都不是很熟悉,作为入门的一个学习,不断的深入吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值