Struts是如何实现MVC的

    下图为基本的MVC的流程,MVC的框架就是基于下图来做的。只是控制器这部分MVC做的比较强大,做成了可配置的,统一处理的等等。
   从MVC分类来看,Struts这种MVC明显的要处理request和response,其实做web开发的过程中都在处理,这种MVC框架,称为面向请求驱动的MVC框架。比如,struts,webwork。
   还有一种MVC框架,就是不知道request和response。把这些都封装起来了,这种框架是基于事件驱动的mvc框架,所以叫做面向事件的MVC框架(或者叫做事件驱动的MVC框架)。比如:JSF,Tapestry。
   以下图:是Struts1的流程图,Struts1还是比较重要的框架。
 
   说明:
   一个基本的MVC最基本的实现的核心的原理,它要通过一个控制器,这个控制器我们用的是servlet(其实可以用别的,像struts用的是filter,在struts1中是servlet)。这个servlet做的是什么事情呢?截取URL并分发。具体过程为:web客户端传来请求,需要遵循一定的规则,是.do还是.action,只有遵循了这个规则,才能到达servlet,servlet才能统一处理得到的请求。把请求URL拿到,截取下来,根绝截取下来的URL到配置文件中找到对应的Action,调用Action对应的excute方法。
   前端控制器其实是一种设计模式,我认为前端控制器更类似于外观模式,外观模式定义:为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
 
   采用UML时序图进一步讲解Struts对MVC的实现,图片不清,请点这里看大图
 
   Struts框架已经提供了ActionServlet,所以它不需要我们编写,需要我们编写的是ActionForm和Action。
Struts框架其他组件具体说明如下:
   1.ActionServlet类控制导航流
   2.ActionServlet根据URI来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层以便从数据库检索信息
   3.Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中,并传入Action
   4.Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应
   5.Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用、哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向有关Action、ActionForm、ActionForward等信息,Struts通过一个配置文件:struts-config.xml文件来定义。
 
    可见,Struts是基于我们最熟悉的MVC的,只不过它在一些具体的细节上做了较好的封装,成为框架,使我们灵活方便的使用。
 
 
原文地址:https://www.cnblogs.com/CharmingDang/p/9663936.html