查看文章
 
Struts中的MVC模式
2010-07-12 21:46

MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。在MVC体系中,模型通常被称为"业务逻辑",是真正完成任务的代码,视图就是使用界面,反映数据的变化。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型在MVC中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。

  

Struts framework是一种基于java的技术,Web应用程序开发人员通过struts framework即可充分利用面向对象设计、代码重用以及"编写一次、到处运行"的优点。Struts提供了一种创建Web应用程序的框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。Struts采用jsp作为MVC的视图,由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。

struts 中的MVC架构如下:

struts_mvc.JPG

View :由JSP、Struts自定义标记库、资源文件(MessageResources.properties)共同组成,通过ActionForm实现JSP表单的封装,并映射到Model部分中JavaBean的相应属性中,完成用户数据的封装。


注意:关于ActionForm,有些人认为它属于Model层(仁者见仁,智者见智)。 事实上它不是Model,真正的Model应该是一个封装了业务逻辑的的对象。而ActionForm仅仅是一个form-bean,封装了用户提交的表单数据(物理View),可以在其中进行一些非业务逻辑的验证,并没有真正的映射到模型数据,因为与层的关系比较密切,所以实际上它应该算是View层(逻辑View)。Action 处理器对象可以直接ActionForm进行读写,而不再需要和request、response对象进行数据交互。通过ActionForm组件对象实现了对View和Model之间交互的支持。M模型层,原则上来说和业务逻辑有关的东西都在这里处理。


Controller :接收客户端的request,进行业务逻辑处理,response到客户端。在Struts中Controller功能由图中ActionServlet和ActionMapping对象构成:核心是一个Servlet类型的对象ActionServlet(在struts-config.xml中配置),实际上是一个前端控制器(Front Controller)。ActionServlet根据ActionMapping对象的定义跳转到不同的Action,每个ActionMapping对象实现了一个request到Action对象之间的映射。注 :Controller层负责流程的控制,在处理Model层与View层之间的交互的同时,又将两者分离开来,从而实现了MVC模式。Model层包含了应用的核心部分,业务逻辑和数据存取。View层负责应用的界面。在上面的图中看到Action位于Controller层,但也有很多人把它归于Model层,实际上 Action 仅仅描述"做什么",与"如何做"(Model)关系不大,把它归于 Controller 层比较合适。


Model :一般Model层可以划分为三部分:公共入口,业务逻辑(Bussiness Logic),数据持久化(DAO+JavaBean)。在Spring+Hibernate的架构中,M可以用 Spring (Bussiness Interface + Bussiness Implement)表示业务逻辑,Hibernate实现数据持久化。

  

Struts的处理流程:
1 控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModulConfig对象。
2 控制器接收Http请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。
3 在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的ActionErrors对象。
4 执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。


类别:Struts||添加到搜藏 |分享到i贴吧|浏览(209)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu