这几天一直在学习使用SSH2框架。对于框架本身的使用并非非常困难。相信经过多锻炼就行熟练的掌握框架的使用,让我匪夷所思的是在使用框架的时候感觉非常熟悉,好像在哪里用过似得。

就在某次查看代码的时候突然闪现了一个想法,SSH2框架和经典三层非常相似。当然经过翻阅资料发现我的想法还是有理论根据的,接下来将会证实该猜想。

一、SSH2初识

我们通常所说的SSH2框架事实上是有三种框架集成的。它们各自是基于MVC模式的Struts2框架和基于IoC模式的 Spring框架以及对象/关系映射框架Hibernate,之所以会产生这么框架是由于J2EE的诟病,由于J2EE的多层结构过于复杂,想要更加效率的开发大型的J2EE项目就必须运用其他的框架和设计模式来整合这样的多层结构提高软件的质量。

Note:框架一般具有即插即用的可重用性、成熟的稳定性以及良好的团队协作性。

想要深入了解SSH框架就必须来看看它的框架图。从它的框架图上来讨论分析它的运行过程。例如以下图为SSH框架的基本结构图。

系统的基本业务流程:在表示层中。首先通过JSP页面实现交互界面,负责接收请求(Request)和传送响应(Response)。然后Struts依据配置文件(struts-config.xml)将ActionServlet接收到的Request委派给对应的Action处理。在业务层中,管理服务组件的Spring IoC容器负责向Action提供业务模型(Model)组件和该组件的协作对象数据处理(DAO)组件完毕业务逻辑,并提供事务处理、缓冲池等容器组件以提升系统性能和保证数据的完整性。而在持久层中。则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据。并返回处理结果。
具体的内部框架的请求过程会在下篇博客中具体讨论。

二、SSH2 Vs 经典三层

先来回想下经典的三层架构,在开发时为了实现程序解耦的目的,我们把程序分成了三个层次。各自是显示层(User Show Layer)、业务逻辑层(Business
Logic Layer)、数据持久层(Data Access Layer)。这是最基础的开发架构,也就是将程序依照我们通常理解的那样拆分开,每一层仅仅专注一种事物,这样每一层仅仅要实现对应的接口就能非常好的减少了程序集之间的耦合。

Note:在有的教程中三层架构可能会有实体层(Entity
Layer),事实上它是三层中的參数。各层之间进行參数传递时须要採用的即为实体层中的表实体。

联系经典的三层我们不难看出SSH2框架的实现事实上就是经典的三层结构。仅仅只是在三层结构中的每一层中集成的是单独的框架,尤其是在表示层中採用的是基于MVC模式的Struts2来配置,当页面进行请求后Struts会依据配置文件(Struts2中为Struts2.xml)将ActionServlet接收到的Request请求托付给对应的Action处理。

然后在业务层中,管理服务组件的Spring IoC负责向Action提供业务模型(Model)组件等来完毕业务逻辑。

而在持久层中,则依赖于Hibernate的对象化映射和数据库交互,处理DAO组件请求的数据,并返回处理结果。

结语

通过上面的对照不难发现事实上SSH2框架採用的是经典的三层模式。将J2EE分层结构进行了良好的整合,在开发时非常方便。可是对于每一个框架的内部运行机制没有做过多的讨论。相信在理解上可能会有非常多疑惑。为了解决疑惑,将会在下篇文章中重点讨论Struts、Spring、Hibernate框架的内部运行机制。

【SSH2框架(理论篇)】--SSH2 Vs 经典三层的更多相关文章

  1. 【SSH2(理论篇)】--Struts2配置具体解释

    上篇博客讨论了SSH2框架模型,在开发过程中发现SSH2的开发模型事实上类似于经典的三层模式,在每一层中分别加入了不同的框架,显示层使用的是Struts2进行配置的,业务逻辑层使用的是Spring配置 ...

  2. 【SSH2(理论+实践)】--Hibernate步步(一个)

    前几个博客讨论SSH2该框架Struts,它代表层,集成封装.和使用WebWork作为核心处理,依赖映射是它的处理核心.在使用时需要Struts.xml配置相应Action和Interceptor够完 ...

  3. SSH2框架搭建 和 配置文件详解

    -----------补充说明----------- 文章中所列出的struts2的2.2jar包已经不是最新的了,这个版本有严重漏洞, 现在最新版本为2.3.15,所以.你懂的http://stru ...

  4. ssh2框架搭建

    原文:ssh2框架搭建 struts2+spring4.0+hibernate4.0 4.x版本与3.x版本有较大区别,要配置方法须要注意,用到的jar包如下 文件结构 src/application ...

  5. 游戏UI框架设计(一) : 架构设计理论篇

    游戏UI框架设计(一) ---架构设计理论篇 前几天(2017年2月)看到一篇文章,国内王健林.马云等大咖们看好的未来十大最有"钱途"产业中,排名第一的就是"泛娱乐&qu ...

  6. SSH2框架实现注冊发短信验证码实例

    这两天開始写程序了,让用SSH2框架,曾经没有接触过Java项目更没有接触过SSH2框架,所以用注冊開始了我Java之旅.后来发现,后台代码挺easy理解的,跟.net的差点儿相同.就是层与层之间的调 ...

  7. MVC框架模式和Javaweb经典三层架构

    一.MVC设计模式 1.MVC的概念 首先我们需要知道MVC模式并不是javaweb项目中独有的,MVC是一种软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(Vie ...

  8. 【PHPsocket编程专题(理论篇)】初步理解TCP/IP、Http、Socket.md

    前言 我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API).那TCP/IP又是什么呢?TCP/IP是ISO/OS ...

  9. RabbitMQ学习总结 第一篇:理论篇

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

随机推荐

  1. luogu2441 角色属性树

    题目大意:维护一个可查询.修改的树,查询的是一个节点的:离它距离最近的.组成两个节点Key值的质因数存在交集的.祖先节点:修改是修改一个节点的key值. 如果组成两个Key值的质因数存在交集,则两个数 ...

  2. bzoj1081: [SCOI2005]超级格雷码(dfs)

    1081: [SCOI2005]超级格雷码 题目:传送门 题解: 又是一道水题... 因为之前做过所以知道规律: 如n=2 B=3: 00 10 20    21 11 01    02 12 22 ...

  3. [HTML5] 让IE支持HTML5的方法

    越来越多的站点开始使用 HTML5 标签,但是目前的情况是还有很多人在使用IE6.IE7.IE8.为了让所有浏览者都可以正常的访问,解决方案有下面两个: 1.为网站创建多套模板,通过程序对User-A ...

  4. WCF WEB HTTP请求 WCF REST FUL

    首先上点概念WCF 很好的支持了 REST 的开发, 而 RESTful 的服务通常是架构层面上的考虑. 因为它天生就具有很好的跨平台跨语言的集成能力,几乎所有的语言和网络平台都支持 HTTP 请求, ...

  5. 单件模式(Singleton)C++实现

    意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 实用性:1.当类只能有一个实例而且客户可以从一个众所周知的访问点访问它. 2.当这个唯一的实例应该是通过子类可扩展的,并且客户应该无需更改 ...

  6. jquery 获取及设置input各种类型的值

    获取选中的值 获取一组radio被选中项的值 var item = $(“input[@name=items]:checked”).val(); 获取select被选中项的文本 var item = ...

  7. Spring boot application.properties 配置

    原文链接: http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.ht ...

  8. jQuery 父级,祖先,兄弟,等选择性操作

    jQuery.parent(expr) 找父亲节点,可以传入expr进行过滤,比如$("span").parent()或者$("span").parent(&q ...

  9. let var const

    eslint要求变量声明使用const的,而不是let和var如果可能的话. 如果一个变量只有在声明时才被赋值一次,那么应该使用'const' 'use strict';(function() { v ...

  10. Nginx全局变量

    一.全局变量 $args #请求中的参数值 $query_string #同 $args $arg_NAME #GET请求中NAME的值 $is_args #如果请求中有参数,值为"?&qu ...