我接触java web从三层模式开始的,记得当时讲师讲解java基础做demo的时候就是以三层模式的思想阐述的,这样对于初学者来说可能带来一定的困难,但这样做的好处就是可以让学习者可以很自然的由本地端过渡到 web,因为web的思想正是以三层模式为基础的。
所谓三层是指,视图层,服务逻辑层和数据持久层。这三层将web分化,利用分而治之的思想实现了对web的驾驭。视图层负责与用户交互,服务层接管用户以及来自其他进程的请求并在有需要的时候调用数据持久层完成一整套流程的操作。
我们所熟知的mvc模式是对人类现实中的事务处理流程的抽象。可以设想这样一个流程,食客去餐馆吃饭,首先面对的是服务员,服务员接收到菜单后将菜单交给厨师,厨师配料取材料理后将做好的饭菜交给服务员,再由服务员呈现给食客。在这里服务员可以抽象为view视图层,他的作用就是与用户直接交互,厨师既作为控制中转又作为逻辑实现把他抽象为control控制层,而配料材料是固定存在仓库的可以抽象为model。这就是一个mvc模式的大概场景,也是程序设计与人类活动最近距离的抽象。
那么三层和mvc的关系该如何理解呢,可以这样认为,三层模式比较全面的覆盖web,并且更加详细的实现其中的功能,mvc模式却是比较粗放的描述一个web流程,他们之间拥有共同的属性,但又不尽相同,视图层与v可以理解为同一种,之前的web中 视图层包含了服务逻辑代码,几经进化后这些服务逻辑代码才从视图逻辑中抽离出来,当然v视图层并不能简单理解为jsp或html这种界面的东西。他还包含了视图模板以及后台参数显示的东西。c 控制部分是独立在三层模式之外的,他的作用只是负责对请求的正确分配以及对结果的正确发放。控制逻辑是mvc框架的核心,比如struts2的StrutsPrepareAndExecuteFilter组件,利用java反射的特性对配置文件的解析实现控制分发这样的策略,最后的Model则是包含服务逻辑层与数据持久层的,model是对一切java可使用组件的描述,服务逻辑层和数据持久层仅为java逻辑概念上的划分,他们都是javabean,也是都符合model概念的描述。
以上的理论说了一堆,下面直接来看例子吧。这张图是三层框架的文件结构,很清楚的列出了层的架构,action属于控制层,service属于服务层,dao则是数据持久层,在此基础上扩展的为transation事务部分,rowmaper数据库与java实体类的映射部分等等都是为了更加完美的实现web的功能。
以上的项目仅仅用到了一个struts2的mvc框架,对与mvc这个框架有能力的也可以自己书写,这样一来就完全可以不依赖与他人的架构,除此之外本项目还包含了国际化,代理模式处理事务,工厂模式,对jdbc的封装,自定义异常的实现以及orm的简单实现,附带nouse源文件夹是对strut1的简单实现,总之一系列与web相关的重点都包含了,这里不再一一的介绍。项目源代码下载115.28.8.74/ziliao/ums.zip,有兴趣的可以自行下载查看。