`
hyx26
  • 浏览: 9481 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

SSH 各层作用及好处(个人收集,有点旧)

阅读更多
简单的说:
struts 控制用的
hibernate 操作数据库的
spring 用解耦的
详细的说:
struts 在 SSH 框架中起控制的作用 , 其核心是 Controller, 即 ActionServlet, 而 ActionServlet 的核心就是 Struts-confi g.xml. 主要控制逻辑关系的处理 .
hibernate 是数据持久化层 , 是一种新的对象、关系的映射工具 , 提供了从 Java 类到数据表的映射,也提供了数据查询和恢复等机制 , 大大减少数据访问的复杂度。把对数据库的直接操作 , 转换为对持久对象的操作 .
spring 是一个轻量级的控制反转 (IoC) 和面向切面 (AOP) 的容器框架 , 面向接口的编程 , 由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓 “ 控制反转 ” 的概念所在:(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中
起到的主要作用是解耦

Struts 、 spring 、 Hibernate 在各层的作用
1 ) struts 负责 web 层 .
ActionFormBean 接收网页中表单提交的数据,然后通过 Action 进行处理,再 Forward 到对应的网页。
在 struts-config.xml 中定义 <action-mapping>, ActionServlet 会加载。
2 ) spring 负责业务层管理,即 Service (或 Manager).
1 . service 为 action 提供统计的调用接口,封装持久层的 DAO.
2 .可以写一些自己的业务方法。
3 .统一的 javabean 管理方法
4 .声明式事务管理
5. 集成 Hiberante
3 ) Hiberante ,负责持久化层,完成数据库的 crud 操作
hibernate 为持久层,提供 OR/Mapping 。
它有一组 .hbm.xml 文件和 POJO, 是跟数据库中的表相对应的。然后定义 DAO ,这些是跟数据库打交道的类,它们会使用 PO 。
在 struts+spring+hibernate 的系统中,
对象的调用流程是: jsp-> Action - > Service ->DAO ->Hibernate 。
数据的流向是 ActionFormBean 接受用户的数据, Action 将数据从 ActionFromBean 中取出,封装成 VO 或 PO,
再调用业务层的 Bean 类,完成各种业务处理后再 forward 。而业务层 Bean 收到这个 PO 对象之后,会调用 DAO 接口方法,进行持久化操作。

使用SSH框架的好处

典型的J2EE三层结构,分为表现层、中间层(业务逻辑层)和数据服务层。三层体系将业务规则、数据访问及合法性校验等工作放在中间层处理。客户端不直接与数据库交互,而是通过组件与中间层建立连接,再由中间层与数据库交互。

表现层是传统的JSP技术,自1999年问世以来,经过多年的发展,其广泛的应用和稳定的表现,为其作为表现层技术打下了坚实的基础。

中间层采用的是流行的Spring+Hibernate,为了将控制层与业务逻辑层分离,又细分为以下几种。

Web层,就是MVC模式里面的“C”(controller),负责控制业务逻辑层与表现层的交互,调用业务逻辑层,并将业务数据返回给表现层作组织表现,该系统的MVC框架采用Struts。

Service层(就是业务逻辑层),负责实现业务逻辑。业务逻辑层以DAO层为基础,通过对DAO组件的正面模式包装,完成系统所要求的业务逻辑。

DAO层,负责与持久化对象交互。该层封装了数据的增、删、查、改的操作。

PO,持久化对象。通过实体关系映射工具将关系型数据库的数据映射成对象,很方便地实现以面向对象方式操作数据库,该系统采用Hibernate作为ORM框架。

Spring的作用贯穿了整个中间层,将Web层、Service层、DAO层及PO无缝整合,其数据服务层用来存放数据。

一个良好的框架可以让开发人员减轻重新建立解决复杂问题方案的负担和精力;它可以被扩展以进行内部的定制化;并且有强大的用户社区来支持它。框架通常能很好的解决一个问题。然而,你的应用是分层的,可能每一个层都需要各自的框架。仅仅解决UI问题并不意味着你能够很好的将业务逻辑和持久性逻辑和UI 组件很好的耦合。

不可否认,对于简单的应用,采用ASP或者PHP的开发效率比采用J2EE框架的开发效率要高。甚至有人会觉得:这种分层的结构,比一般采用JSP + Servlet的系统开发效率还要低。

笔者从一下几个角度来阐述这个问题。

— 开发效率:软件工程是个特殊的行业,不同于传统的工业,例如电器、建筑及汽车等行业。这些行业的产品一旦开发出来,交付用户使用后将很少需要后续的维护。但软件行业不同,软件产品的后期运行维护是个巨大的工程,单纯从前期开发时间上考虑其开发效率是不理智的,也是不公平的。众所周知,对于传统的ASP和 PHP等脚本站点技术,将整个站点的业务逻辑和表现逻辑都混杂在ASP或PHP页面里,从而导致页面的可读性相当差,可维护性非常低。即使需要简单改变页面的按钮,也不得不打开页面文件,冒着破坏系统的风险。但采用严格分层J2EE架构,则可完全避免这个问题。对表现层的修改即使发生错误,也绝对不会将错误扩展到业务逻辑层,更不会影响持久层。因此,采用J2EE分层架构,即使前期的开发效率稍微低一点,但也是值得的。

— 需求的变更:以笔者多年的开发经验来看,很少有软件产品的需求从一开始就完全是固定的。客户对软件需求,是随着软件开发过程的深入,不断明晰起来的。因此,常常遇到软件开发到一定程度时,由于客户对软件需求发生了变化,使得软件的实现不得不随之改变。当软件实现需要改变时,是否可以尽可能多地保留软件的部分,尽可能少地改变软件的实现,从而满足客户需求的变更?答案是——采用优秀的解耦架构。这种架构就是J2EE的分层架构,在优秀的分层架构里,控制层依赖于业务逻辑层,但绝不与任何具体的业务逻辑组件耦合,只与接口耦合;同样,业务逻辑层依赖于DAO层,也不会与任何具体的DAO组件耦合,而是面向接口编程。采用这种方式的软件实现,即使软件的部分发生改变,其他部分也尽可能不要改变。

注意:即使在传统的硬件行业,也有大量的接口规范。例如PCI接口、显卡或者网卡,只要其遵守PCI的规范,就可以插入主板,与主板通信。至于这块卡内部的实现,不是主板所关心的,这也正是面向接口编程的好处。假如需要提高电脑的性能,需要更新显卡,只要更换另一块PCI接口的显卡,而不是将整台电脑抛弃。如果一台电脑不是采用各种接口组合在一起,而是做成整块,那将意味着即使只需要更新网卡,也要放弃整台电脑。同样,对于软件中的一个个组件,当一个组件需要重构时,尽量不会影响到其他组件。实际上,这是最理想的情况,即使采用目前最优秀的架构,也会有或多或少的影响,这也是软件工程需要努力提高的地方。

技术的更新,系统重构:软件行业的技术更新很快,虽然软件行业的发展不快,但小范围的技术更新特别快。一旦由于客观环境的变化,不得不更换技术时,如何保证系统的改变最小呢?答案还是选择优秀的架构。

在传统的Model 1的程序结构中,只要有一点小的需求发生改变,将意味着放弃整个页面。或者改写。虽然前期的开发速度快,除非可以保证以后永远不会改变应用的结构,否则不要采用Model 1的结构。

采用Hibernate作为持久层技术的最大的好处在于:可以完全以面向对象的方式进行系统分析、系统设计。

DAO模式需要为每个DAO组件编写DAO接口,同时至少提供一个实现类,根据不同需要,可能有多个实现类。用Spring容器代替DAO工厂

通常情况下,引入接口就不可避免需要引入工厂来负责DAO组件的生成。Spring实现了两种基本模式:单态模式和工厂模式。而使用Spring可以完全避免使用工厂模式,因为Spring就是个功能非常强大的工厂。因此,完全可以让Spring充当DAO工厂。

由Spring充当DAO工厂时,无须程序员自己实现工厂模式,只需要将DAO组件配置在Spring容器中,由 ApplicationContext负责管理DAO组件的创建即可。借助于Spring提供的依赖注入,其他组件甚至不用访问工厂,一样可以直接使用 DAO实例。

优点:
Struts跟Tomcat、Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点。使开发者能更深入的了解其内部实现机制。
除此之外,Struts的优点主要集中体现在两个方面:Taglib和页面导航。Taglib是Struts的标记库,灵活动用,能大大提高开发效率。另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点。
关于页面导航,我认为那将是今后的一个发展方向,事实上,这样做,使系统的脉络更加清晰。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。尤其是当另一批开发者接手这个项目时,这种优势体现得更加明显。
缺点:
Taglib是 Struts的一大优势,但对于初学者而言,却需要一个持续学习的过程,甚至还会打乱你网页编写的习惯,但是,当你习惯了它时,你会觉得它真的很棒。
Struts 将MVC的Controller一分为三,在获得结构更加清晰的同时,也增加了系统的复杂度。
Struts从产生到现在还不到半年,但已逐步越来越多运用于商业软件。虽然它现在还有不少缺点,但它是一种非常优秀的J2EE MVC实现方式,如果你的系统准备采用J2EE MVC架构,那么,不妨考虑一下Struts。
分享到:
评论
1 楼 wangkeheng 2010-03-17  
[img src="dsafdsa.jpg"][/img]

相关推荐

    SSH各层作用及好处

    SSH 各层作用及好处 SSH 框架是一种基于 Java 语言的开源框架,主要由 Struts、Spring 和 Hibernate 三个部分组成。Struts 负责 Web 层,Spring 负责业务层管理,Hibernate 负责持久化层。下面是对每个层的详细解释...

    WEB开发-SSH三层框架

    1. **MVC模式**:理解模型-视图-控制器的设计模式,了解各层的作用。 2. **Struts2**:学习Struts2的配置、Action类的编写、结果映射、拦截器和国际化。 3. **Spring**:理解依赖注入和AOP,学会配置Bean,实现事务...

    一个简单的ssh3层架构实例

    下面我们将详细探讨SSH框架的各层及其作用,以及如何在MyEclipse中设置和运行这个示例。 **Struts** 是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架,主要负责处理用户请求和展现视图。在...

    SSH三层架构java

    SSH三层架构是Java Web开发中常见的一种架构模式,它由Struts2、Spring和Hibernate三个框架组成,分别负责表现层、业务逻辑层和数据访问层。这个架构模式旨在提高代码的可维护性、可扩展性和模块化。 Struts2作为...

    用图形解析SSH框架的作用

    ### 用图形解析SSH框架的作用 #### 一、引言 在现代软件开发领域,尤其在Java Web应用开发中,SSH框架(Struts + Spring + Hibernate)被广泛应用于构建复杂的企业级应用程序。本文将通过一系列直观的图形来解析SSH...

    ssh离线升级版本,不用卸载旧版本ssh直接替换历史版本,迁移密钥重启ssh

    记录一下ssh离线升级版本(有openssh8.8安装包和依赖),redhad的ssh7.4升级到8.8,不用卸载旧版本ssh直接替换历史版本,迁移密钥重启ssh。有一定危险,我这有安全限制不能用telnet连接,需要多开几个ssh连接已被...

    SSH中 struts hibernate spring 各起什么作用

    ### SSH框架:Struts、Hibernate、Spring的作用解析 #### Struts **Struts** 是一个基于MVC(Model-View-Controller)设计模式的开源框架,主要用于构建动态Web应用程序。在SSH架构中,Struts主要负责处理用户界面...

    SSH中spring的作用

    总结来说,SSH框架通过Spring的IoC和AOP机制,实现了各层之间的松耦合,增强了系统的灵活性和可维护性。Struts负责请求的控制,Hibernate处理数据持久化,而Spring则作为整体的协调者,管理和注入依赖,以及提供事务...

    SSH个人信息管理系统

    SSH个人信息管理系统是一个基于Java Web开发的综合应用,主要利用了Struts、Spring和Hibernate这三大框架,即我们常说的SSH框架。这个系统旨在提供一个集个人信息管理、通讯录管理、日程安排以及文件上传下载等功能...

    ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架 ssh框架

    ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ssh shhs ssh ...

    SSH个人博客系统

    SSH个人博客系统是一款基于Java技术开发的轻量级博客平台,主要由Struts、Spring和Hibernate这三个核心框架组成,这就是所谓的SSH(Struts + Spring + Hibernate)架构。这个项目是作者在课余时间完成的,虽然规模较...

    SSH完整资源代码

    SSH协议分为两层:**SSH transport layer**(传输层)和**SSH application layer**(应用层)。传输层负责加密通信,而应用层则处理实际的命令执行、文件传输等任务。 3. **身份验证** SSH支持多种身份验证方式,...

    SSH工作原理及流程

    SSH 工作原理及流程 SSH(Secure Shell)是一种安全的网络协议,用于提供安全的远程访问和文件传输。SSH 协议具有广泛的应用场景,如远程登录、文件传输、网络管理等。下面是 SSH 工作原理及流程的详细说明: 一、...

    ssh三层开发实例

    "采用注解的方式进行实例开发; struts2+hibernate+spring开发实例,这是一个项目开发框架,内容为人员管理系统,通过人员注册页面进行人员添加,对人员进行增删改查的操作;后台采用mysql数据库进行后台数据交互;...

    基于ssh2开发的个人博客

    在个人博客项目中,Spring可以用于管理数据库连接、事务控制、服务层对象和DAO(数据访问对象)等,确保了各组件间的松耦合和高效协作。 Struts2作为SSH2中的控制器,负责处理HTTP请求,调度应用逻辑,将用户界面与...

    SSH三层架构整合

    SSH整合的关键在于各层之间的通信和协作。例如,Struts的Action会通过Spring的依赖注入获取Service实例,Service再通过Hibernate的SessionFactory创建Session,进而进行数据库操作。完成后,Service将处理结果返回给...

    在SSH框架Spring的作用

    在探讨SSH框架中Spring的作用之前,我们先简要回顾一下SSH框架的基本构成。SSH框架,即Struts+Spring+Hibernate框架,是Java Web开发中的一种流行架构,它将三种技术结合在一起,各自承担不同的职责,共同构建出稳定...

    SSH个人通讯录系统

    SSH个人通讯录系统是一种基于SSH(Struts2、Spring、Hibernate)框架开发的应用程序,用于管理个人联系人信息。SSH框架是Java Web开发中的经典组合,它提供了模型-视图-控制器(MVC)设计模式的实现,使得开发人员...

    基于SSH的个人博客

    5. **系统架构**:SSH框架组合使得系统结构清晰,各组件职责明确。Struts2处理前端交互,Spring管理业务逻辑和服务,Hibernate处理数据持久化。这样的架构有利于项目的维护和扩展,比如添加新的功能如评论回复、用户...

Global site tag (gtag.js) - Google Analytics