Struts(表示层)+Spring(业务层)+Hibernate(持久层)

SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层)

  Struts:Struts是一个表示层框架,主要作用是界面展示,接收请求,分发请求。

      在MVC框架中,Struts属于VC层次,负责界面表现,负责MVC关系的分发。

      (View:沿用JSP,HTTP,Form,Tag,Resourse ;Controller:ActionServlet,struts-config.xml,Action)

  Hibernate:Hibernate是一个持久层框架,它只负责与关系数据库的操作。

  Spring:Spring是一个业务层框架,是一个整合的框架,能够很好地黏合表示层与持久层。

       我们知道,传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,这种模式实现了最基本的MVC分层,

       使的程序结构分为几层,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的Javabean。

  但是这种结构仍然存在问题:

    如JSP页面中需要使用符号嵌入很多的 Java代码,造成页面结构混乱,

    Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

  Struts 为了解决这些问题,出现了Struts框架,

    它是一个完美的MVC实现,它有一个中央控制类(一个 Servlet),针对不同的业务,

    我们需要一个Action类负责页面跳转和后台逻辑运算,一个或几个JSP页面负责数据的输入和输出显示,

    还有一个 Form类负责传递Action和JSP中间的数据。JSP中可以使用Struts框架提供的一组标签,就像使用HTML标签一样简单,但是可以完成非常复杂的逻辑。

    从此JSP页面中不需要出现一行包围的Java代码了。 可是所有的运算逻辑都放在Struts的Action里将使得 Action类复用度低和逻辑混乱,

    所以通常人们会把整个Web应用程序分为三层,Struts负责显示层,它调用业务层完成运算逻辑,业务层再调用持久层完成数据库的读写。

    使用JDBC连接来读写数据库,我们最常见的就是打开数据库连接、使用复杂的SQL语句进行读写、关闭连接,获得的数据又需要转换或封装后往外传,这是一个非常烦琐的过程。

  

  Hibernate 这时出现了 Hibernate框架,它需要你创建一系列的持久化类,

    每个类的属性都可以简单的看做和一张数据库表的属性一一对应,当然也可以实现关系数据库的各种表件关联的对应。

    当我们需要相关操作是,不用再关注数据库表。我们不用再去一行行的查询数据库,只需要持久化类就可以完成增删改查的功能。

    使我们的软件开发真正面向对象,而不是面向混乱的代码。

    我的感受是,使用Hibernate比JDBC方式减少了80%的编程量。

    现在我们有三个层了,可是每层之间的调用是怎样的呢?比如显示层的Struts需要调用一个业务类,

    就需要new一个业务类出来,然后使用;业务层需要调用持久层的类,也需要new一个持久层类出来用。

    通过这种new的方式互相调用就是软件开发中最糟糕设计的体现。

    简单的说,就是调用者依赖被调用者,它们之间形成了强耦合,

    如果我想在其他地方复用某个类,则这个类依赖的其他类也需要包含。

    程序就变得很混乱,每个类互相依赖互相调用,复用度极低。

    如果一个类做了修改,则依赖它的很多类都会受到牵连。 为此,出现Spring框架。

  Spring Spring的作用就是完全解耦类之间的依赖关系,

    一个类如果要依赖什么,那就是一个接口。

    至于如何实现这个接口,这都不重要了。

    只要拿到一个实现了这个接口的类,就可以轻松的通过xml配置文件把实现类注射到调用接口的那个类里。

    所有类之间的这种依赖关系就完全通过配置文件的方式替代了。

    所以 Spring框架最核心的就是所谓的依赖注射和控制反转。

    现在的结构是,Struts负责显示层,Hibernate负责持久层,

    Spring负责中间的业务层,这个结构是目前国内最流行的Java Web应用程序架构了。

    另外,由于Spring使用的依赖注射以及AOP(面向方面编程),所以它的这种内部模式非常优秀,

    以至于Spring自己也实现了一个使用依赖注射的MVC框架,叫做Spring MVC,同时为了很好的处理事物,Spring集成了Hibernate,

    使事物管理从Hibernate的持久层提升到了业务层,使用更加方便和强大。

转至:http://www.cnblogs.com/Seven-cjy/p/6264124.html

SSH三种框架及表示层、业务层和持久层的理解(转)的更多相关文章

  1. SSH三种框架及表示层、业务层和持久层的理解

    Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts:Struts是一个表示 ...

  2. 国内常用的三种框架:ionic/mui/framework7对比

    国内常用的三种框架:ionic/mui/framework7对比 原文连接:http://zhihu.com/question/19558750/answer/91179040

  3. 流式大数据处理的三种框架:Storm,Spark和Samza

    许多分布式计算系统都可以实时或接近实时地处理大数据流.本文将对三种Apache框架分别进行简单介绍,然后尝试快速.高度概述其异同. Apache Storm 在Storm中,先要设计一个用于实时计算的 ...

  4. [转载]流式大数据处理的三种框架:Storm,Spark和Samza

    许多分布式计算系统都可以实时或接近实时地处理大数据流.本文将对三种Apache框架分别进行简单介绍,然后尝试快速.高度概述其异同. Apache Storm 在Storm中,先要设计一个用于实时计算的 ...

  5. 大数据处理的三种框架:Storm,Spark和Samza

    许多分布式计算系统都可以实时或接近实时地处理大数据流.下面对三种Apache框架分别进行简单介绍,然后尝试快速.高度概述其异同. Apache Storm 在Storm中,先要设计一个用于实时计算的图 ...

  6. JavaEE中表现层、持久层、业务层的职责分析(转载)

    表现层.持久层.业务层 注:本文转载于:http://www.blogjava.net/jiabao/archive/2007/04/08/109189.html 为了实现web层(struts)和持 ...

  7. Java工程师高薪训练营-第一阶段 开源框架源码解析-模块一 持久层框架涉及实现及MyBatis源码分析-任务一:自定义持久层框架

    目录 任务一:自定义持久层框架 1.1 JDBC回顾及问题分析 1.2 自定义持久层框架思路分析 1.3 IPersistence_Test编写 1.3.1 XXXMapper.xml详解 1.3.2 ...

  8. 【笔记】拉勾Java工程师高薪训练营-第一阶段 开源框架源码解析-模块一 持久层框架涉及实现及MyBatis源码分析-任务一:自定义持久层框架

    以下笔记是我看完视频之后总结整理的,部分较为基础的知识点也做了补充,如有问题欢迎沟通. 目录 任务一:自定义持久层框架 1.1 JDBC回顾及问题分析 1.2 自定义持久层框架思路分析 1.3 IPe ...

  9. 【SSH三个框架】Hibernate第七基金会:不少下属业务

    相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系,但也有许多关系.但,只知道它是不够的,Hibernate它是一种面向对象 ...

随机推荐

  1. React实战之60s倒计时按钮(发送短信验证按钮)

    React实战之60s倒计时按钮——短信验证按钮 导入:(antd组件——Form表单) import { Button, Form, Input } from 'antd'; const FormI ...

  2. 377 Combination Sum IV 组合之和 IV

    Given an integer array with all positive numbers and no duplicates, find the number of possible comb ...

  3. js一键导出Excel

    HTML: 1 <div class="container"> 2 <table id="backViewTable" class=" ...

  4. JavaScript(十三)面向对象

    面向对象 面向对象的过程 通过new 构造函数 生成的对象来执行, 类似于事件的执行  this指向函数,然后再把这个函数赋值给一个实例  所以在函数内的this  就指到了实例上 function ...

  5. Chromium浏览器编译成功庆祝

     1.什么是Chromium     Chromium 是Google公司的开源项目     Google浏览器  最新版360浏览器 都是在Chromium的基础上重新编译的. 2.什么是双核浏览器 ...

  6. JS高级——监听浏览器的返回事件

    https://www.cnblogs.com/Easty/p/7820055.html https://www.cnblogs.com/zhengyan/p/6912526.html http:// ...

  7. Vue指令7:v-model

    可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值. 因为它会选择 Vue 实例数据来作为 ...

  8. 微服务网关从零搭建——(九)网关部署到linux服务器

    环境准备 公司电脑已安装core环境所以此处略过core环境安装 可参看此处 consul安装 如果没有wget命令 执行以下命令 yum install wget 下载consul wget htt ...

  9. 简单了解jdbcTemplate的queryForList是如何查询

    queryForList方法会调用query方法,同时会传入一个新的ColumnMapRowMapper对象 ArgumentPreparedStatementSetter对象只有一个Object[] ...

  10. 还没更换RubyGems镜像?

    相信用过Ruby的人都知道 gem install 命令,但是在国内该命令安装的速度甚是不稳定(你懂的),导致尝试数次便是等待数时,记得之前在安装redmine的时候便是如此,之前不懂什么意思,还以为 ...