1 SSM框架 J2EE-MVC分层及常用词解释(1)

               

在学习j2EE过程中,尤其是学习框架过程,对许多出现的名词和词汇并不了解,因此造成了很多的时间上的浪费,为了给后来学习的人做个总结,也为了给自己做个备忘录,因此将我自己学习过程中遇到的一些词汇进行汇总

1.MVC框架


MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。

MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:

Model(模型)表示应用程序核心(比如数据库记录列表)。

View(视图)显示数据(数据库记录)。

Controller(控制器)处理输入(写入数据库记录)。

MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。

Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。

View(视图)是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。

Controller(控制器)是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。

MVC分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。

在web应用开发过程中,后端程序员的重点任务应该在MC两个层面上,即用户交互控制和数据模型处理。

1.Model层面主要的任务是与数据库建立链接,与数据库中的表单数据进行交互,在Web开发中,一般将model层分为Entity块,Dao块和service块(下一章将进行详细讲解)。

2.Controller层主要负责用户需求的转发以及各个页面的业务逻辑关系,具体的处理方式为servlet,通过不同的Action在不同的服务间进行跳转。很简单的例子就是,登陆过程中,当我们向web应用提交数据时,由Controller负责选择采取的不同action调用不同的Service进行数据的处理,当Service返回处理结果后根据不同的结果调用不同的页面返回给用户。


2.常用的分层关系

在开发项目的时候,我们常常听到我们的程序分成action层、service层、dao层、entity层来进行开发,究竟这四个层次是什么关系,很多人都不甚了解,我也在这个问题上遇到了很多的问题。现在来系统的梳理一番。
上面讲过Controller通过控制不同的action层来组织不同的service层来完成任务,而一个service层需要调用多个dao层组合在一起,dao层直接跟数据库打交道,通过sql语句执行增删改查的操作,entity层是保存用户类与数据库中不同的列进行一一对应。其中Action层属于Controller层的内容,而service层、dao层和entity层共同组成了model层。
来具体的用实例解释一下,比如现实生活中的网上银行的操作,数据库中保存着个人用户的名字、余额以及ID。
这时候entity的作用就在于实现一个User类,在类中生命成员属性名字、余额以及ID,与数据表中的数据一一对应; Dao层中有建立数据库连接的功能,同时有着向数据库发送sql语句的功能,实现了增删改查的基本操作;而service是增删改查的应用,比如转账操作就要调用Dao层改的方法增加对方账户的余额,同时减少自己账户的余额,再调用查询指令,完成整个操作。再比如存款操作,就只需要调用改方法中的增加功能,同时发送查询指令得到结果。接着是Action层,Action是负责对用户请求的导向,View层中用户点击了存款功能,即向web后台发送了一个请求,Controller拦截到这个请求之后,分发给特定的Action调用存款的Service,存款Service调用Dao层完成数据库的操作,并返回结果给Controller,这样一个流程就完成了。
形象一点讲,Controller就是饭店里的总调度,Action像是服务员,顾客点什么菜,菜上给几号桌,都是ta的职责;Sevice是大厨,Action送来的菜单上的菜全是ta做的;Dao是厨房的小工,做些细碎的零活比如摘菜,洗菜,切菜,和原材料(数据库和Entity)打交道的事情全是ta管。所以小工(Dao)的工作是要满足厨师(Service)的要求,厨师要满足服务员(Action)转达的客户(页面用户)的要求,服务员自然就是听总调度的指挥。

3.与主流框架的对应关系

以主流的SSH框架为例,总结一下与上述层次的关系。SSH包括Spring+Struts2+Hibernate。

   MVC三层架构:模型层,控制层和视图层。模型层,用Hibernate框架让来JavaBean在数据库生成表及关联,通过对JavaBean的操作来 对数据库进行操作;控制层,用Struts框架来连接数据层和视图层的,接收、处理、发送数据并控制流程;视图层,用JSP模板把页面展现给用户以及提供 与用户的交互。而Spring框架粘合了Hibernate和Struts,透明的管理了整个架构,提供IOC容器使代码松耦合以及AOP框架的切面功能 等等。

   接着上面饭店的例子,Struts是完整的Controller功能,即饭店的前台调度,客人点什么菜,要什么口味都是struts负责传达调度。Hibernate类似于饭店的厨房后台,给整个Web应用提供与原材料即数据库的直接沟通,把原材料都放到厨房空间,让Struts选择哪个菜系的厨师(Service层)去烹调(Dao层)这些原材料。而Spring更像是整个饭店的老板,厨房需要刀就给一把刀(Ioc),并且规范前台服务员要统一装束,每次点餐之后要给客人报以微笑(AOP),维持前后台的独立工作,都安心做自己的事。

借用 itao_o的例子

1.JavaBean类(Model,称为小白菜原料,这里就是Spring给的材料,与数据库中对应)

public class Building { private String code; public String getCode() { return code; } public void setCode(String code) { this.code = code; } }


2.用Hibernite把对象持久化到数据库中(Model,还是小白菜,只不过换个说法,你可以给它随便起个名字,比如说实体小白菜,但其实还是一样的东西)

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="Building" table="building"> <id name="id" column="id"> <generator class="uuid"/> </id> <property name="code"/> </class> </hibernate-mapping> 


3.把对数据的访问封装成一个面向对象的接口(Model,洗菜,切菜):

public interface BuildingManager { List findEntity(); } 

4.控制层的处理(Controller,开始炒菜了):

public class BuildingAction extends Action { public ActionForward execute(ActionMapping actionMapping, ActionForm actionForm, HttpServletRequest req, HttpServletResponse servletResponse) throws Exception { List results = entityManager.findItems(); req.setAttribute("buildings",page); return actionMapping.findForward("list"); } } 

5.jsp视图(View,端上桌的油淋小白菜,这里我就不写示例代码了)。


总结
以上即为我个人对MVC分层的理解,日后随着我学习的深入,可能会有别的感受,我也会一直保持对博客的更新,下一步的计划为SSM框架的分述与整体架构的搭建。学习框架最重要的事是学会怎么去用,而最根本的是理解框架的思想,我将在博客中记录自己框架搭建的步骤,日后给自己留个备忘,容易捡起来,并且把自己搭建过程中遇到的问题做个随笔,给自己备忘,也让有同样问题的人能找到解决的方法。
           
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值