一、前言

最近有个小面试需要复习以前用到的SSH框架,忘得差不多了当然当时也差不多就是不会的状态,现在花了三四天的时间进行一个简单的学习,总结一些概念性的东西放在这儿。

二、参考链接

ssh框架:https://baike.baidu.com/item/ssh%E6%A1%86%E6%9E%B6/8882453?fr=aladdin

SSH三大框架的概述:https://blog.csdn.net/ycclydy/article/details/80451571

SSH 框架简介​​​​​​​:https://www.jb51.net/article/123403.htm

浅谈Java三大框架SSH是否已经过时 :https://www.sohu.com/a/226103987_99948066

新手学习SSH三大框架的几点建议:https://baijiahao.baidu.com/s?id=1593174345369404841&wfr=spider&for=pc

SSH三大框架理解:https://blog.csdn.net/qq_28143647/article/details/79459004

三、基础概念

3.1 背景

传统的Java Web应用程序是采用JSP+Servlet+Javabean来实现的,实现了最基本的MVC分层,使的程序结构分为几层,其中JSP负责前台展示 、Servlet负责流程逻辑控制、Javabean负责数据封装。但这种结构存在问题:如JSP页面中需要使用符号嵌入很多的Java代码,造成页面结构混乱;Servlet和Javabean负责了大量的跳转和运算工作,耦合紧密,程序复用度低等等。

MVC:Web应用开发常用的一种开发模式,其中视图层通过提取用户的输入信息,提交到控制器之后,控制器根据某种选择来决定这个请求交由给模型层来处理,模型层根据业务逻辑的代码处理用户请求并返回数据,并最终用视图层展示给用户。

后对数据库操作进行封装出现Hibernate,对业务跳转进行封装出现Struts,结合Spring框架,出现SSH框架。

Struts、Spring、Hibernate(或SpringMVC、Spring、Hibernate)Struts进行流程控制、Spring进行业务流转、Hibernate进行数据库操作的比较

3.2 Struts

Struts是一个基于MVC模式的应用框架(和Servlet本质差不多),主要作为控制器来建立模型和视图的数据交互(控制逻辑判断加页面跳转),目前主要使用Struts2,通过拦截器处理客户的各种请求。

技术基于MVC框架,实现依赖Servlet和JSP实现;EJB和JavaBean两个组件是其框架业务功能实现的基础部件;Action和ActionServlet是实现控制功能的重要部件;视图部分是由若干个存在内在联系的JSP文件有机构成来实现系统功能

EJB有3种类型:Session, Entity和Message-driven,运行一般需要EJB容器(即应用服务器,如JBoss/Weblogic/Websphere等 ,在J2EE中包括会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)

JavaBean实体类,在大部分情况下和POJO是同义词,基本构成就是一些字段和与之对应的setter、getter方法,如果一个JavaBean需要在不同的JVM的进程中进行传递,还需要实现Serializable接口(JavaBean是一个组件,而EJB就是一个组建框架

J2EE:Java 2 Platform Enterprise Edition,企业级分布式应用程序开发规范,是市场上主流的企业级分布式应用平台的解决方案

Struts的工作流程:

客户端发送请求(HttpServletRequest)到服务器,服务器接收到请求就先进入web.xml配置文件看看有没有配置过滤器,发现有struts2的过滤器,然后就找到struts.xml配置文件,struts.xml配置文件里有定义一个action,然后就去找到类名叫XXXAction这个类(此action类必须是继承ActionSupport接口),并且实现了execute()方法,返回一个字符串为"success"给struts.xml配置文件,struts.xml配置文件的action会默认调用XXXAction类的execute()方法,result接收到了返回的字符串,然后查找结果字符串对应的(Result),result就会调用你指定的jsp页面将结果呈现,最后响应回给客户端。

Struts的优点:

  • 开源框架,结构清晰

  • MVC的经典实现

  • 处理异常机制

  • 标签库强大

  • 解决JSP页面存在大量Java代码,维护方便

  • 在formBean中提交,不会使用传统的get、set方法得值、取值

Struts的缺点:

  • 配置复杂

  • 测试不方便

  • 依赖Web容器

  • action为单例模式(貌似也可以配成多例模式,通过加注释@scope("prototype"))

3.3 Spring

Spring使用基本的JavaBean完成以前只能EJB完成的事情,主要控制翻转IOC和面向切面AOP,是一种分层的轻量级开源框架,更像是一个容器,将所有配置的Struts和Hibernate中的东西都放置进来,只要做好配置即可找到相应位置并进行处理。

IOC:Inversion of Control,轻量级的反向控制。基本思想:通过外部的配置文件反过来调用应用程序来替代原有程序调用的控制功能

在框架中进行控制功能的创建工作就实现了轻量级控制反转,这样就能使控制功能的编写从应用程序的编写中分离出来。在使用组件调用容器时,在框架中的控制功能创建中只需要给出调用组件所用到的对象。(SSH中Spring主要使用这种方式,通过action的调用反向调用service)

工作过程:首先创建程序中以后所用到的所有对象,并进行对象属性设置,对相关的属性和惯性进行连接配置,最后再确定调用的方法和时间点即可。

AOP:日志记录,性能统计,安全控制,事务处理、异常处理等。针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果

3.4 Hibernate

Hibernate是开源代码的对象映射框架,根据JDBC技术基础衍生而来,将直接操作原来的数据库变为直接操作数据表后生成的Java类,实现对象编程思维来操纵数据库。 即实现数据库表及属性与POJO的相互映射。

通过hibernate.cfg.xml文件来取代以往的JDBC连接数据库的一大串代码,通过XXX(实体Bean的类名).hbm.xml文件来与数据库的具体表进行映射。

POJOPlain Ordinary Java Object,即简单的Java对象

ORMObject Relational Mapping,对象关系映射

Hibernate的核心接口:

  • SessionFactory

    配置对象被用于创造一个SessionFactory对象,使用提供的配置文件为应用程序依次配置Hibernate,并允许实例化一个会话对象。SessionFactory是一个线程安全对象并由应用程序所有的线程所使用。

    SessionFactory是一个重量级对象所以通常它都是在应用程序启动时创造然后留存为以后使用。每个数据库需要一个SessionFactory对象使用一个单独的配置文件。所以如果你使用多种数据库那么你要创造多种SessionFactory对象。

  • Session

    一个会话被用于与数据库的物理连接。Session对象是轻量级的,并被设计为每次实例化都需要与数据库的交互。持久对象通过 Session 对象保存和检索。

    Session 对象不应该长时间保持开启状态因为它们通常情况下并非线程安全,并且它们应该按照所需创造和销毁

一般可通过sessionFactory.getCurrentSession()方法获得

  • Transaction

    事务对象指定工作的原子单位,它是一个可选项.org.hibernate.Transaction接口提供事务管理的方法。

  • Query

    Query对象使用SQL或者Hibernate查询语言(HQL)字符串在数据库中来检索数据并创造对象。一个查询的实例被用于连结查询参数,限制由查询返回的结果数量,并最终执行查询。

  • Configuration

    在任何Hibernate应用程序中创造的第一个Hibernate对象,并且经常只在应用程序初始化期间创造。它代表了Hibernate所需一个配置或属性文件,配置对象提供了两种基础组件。

    数据库连接:由Hibernate支持的一个或多个配置文件处理。这些文件是hibernate.properties和hibernate.cfg.xml。

Hibernate的工作原理:

  1. Configuration.config() 来读取XXXbean.hbm.xml配置文件

  2. Configuration.config()来读取配置文件里面的映射信息

  3. 创建sessionFactory

  4. 打开Session

  5. 开启事务transaction

  6. 持久化到数据库

  7. 关闭session

  8. 关闭sessionFactory

3.5 SSH

SSH框架中,Struts对应着前台的控制层,而Spring则负责实体bean的业务逻辑处理,至于Hibernate则是负责数据库的交接以及使用Dao接口来完成操作

SSH从系统职能上可分三层:

  • 表示层

    主要涉及Struts的功能,在这一层,首先通过JSP页面实现交互界面,负责传送用户请求和接收响应,然后Struts根据配置文件将接收到的用户请求委派给相应的Action处理。

  • 业务逻辑层

    主要涉及Spring的功能,在这一层,管理服务组件负责向Struts配置好的对应Action提供业务模型(Service类和Dao类),该组件的对象数据处理组件完成业务逻辑,并提供事务处理等容器组件以提升系统性能和保证数据的完整性。

  • 数据持久层

    主要涉及Hibernate的功能,实现了数据持久化功能,使得程序员可以通过面向对象的编程思维来操作数据库。在这一层中,依赖于Hibernate的对象化映射和数据库交互,处理Spring中的DAO组件请求的数据,并返回处理结果。

SSH的优点:

实现了视图、控制器与模型的彻底分离,而且还实现了业务逻辑层与数据持久层的分离。这样无论前端如何变化,逻辑层只需很少的改动,并且数据库的变化也不会对前端有所影响,大大提高了系统的可复用性,提高了开发效率。

四、总结

目前主流的Java Web开发框架就是SSH(Struts2、Spring、Hibernate)和SSM(Spring、SpringMVC、MyBatis),SSH虽然能实现M、V、C三层的完全分离,最大程度的对每个模块进行封装,但是每一个框架都需要很多繁琐的配置(web.xml、application.properties、struts.xml、hibernate.cfg.xml、spring-XXX.xml以及项目本身的需要添加多个依赖的pom.xml[如果使用的是Maven项目/Spring项目]),学习难度较大。同时又有相同封装高效率性能的SSM面世,相对SSH来讲,SSM的配置要少很多,对开发者较为友好,后续会进行继续学习。

基本确定以后的职业发展路线是大数据数据存储+后端开发,而对于后端开发来讲,在努力学习去熟练掌握一门编程语言类似Java之外,还需要了解流行的集中常用的开发框架,毕竟学的东西都是要实践的嘛(配置也算一种磨炼吧:) )

SSH学习(一)—— 基础概念篇相关推荐

  1. 【软件测试】基础-概念篇

    软件测试基础-概念篇 记录 - 慕课网 imooc 软件测试基础-概念篇 简介:系统介绍什么是软件测试,从软件测试的定义.原则以及测试阶段.测试模式.测试手段和测试类型分别详细说明软件测试中的各种测试 ...

  2. 模型推理部署——基础概念篇

    模型推理部署--基础概念篇 训练(training)vs推理(inference) 训练是通过从已有的数据中学习到某种能力,而推理是简化并使用该能力,使其能快速.高效地对未知的数据进行操作,以获得预期 ...

  3. 漫谈深度强化学习之基础概念

    漫谈深度强化学习之基础概念 原创:  张泽旺  深度学习每日摘要  2017-02-23 当下,深度强化学习(Deep Reinforcement Learning)的应用已经铺天盖地般出现了.为什么 ...

  4. Hadoop学习笔记—15.HBase框架学习(基础知识篇)

    Hadoop学习笔记-15.HBase框架学习(基础知识篇) HBase是Apache Hadoop的数据库,能够对大型数据提供随机.实时的读写访问.HBase的目标是存储并处理大型的数据.HBase ...

  5. C++面试题(一)——基础概念篇

    https://blog.csdn.net/worldwindjp/article/details/18909079 C++面试题--基础概念篇 唐璐 http://blog.csdn.net/wor ...

  6. 经典再现,看到就是赚到。尚硅谷雷神 - SpringBoot 2.x 学习笔记 - 基础入门篇

    SpringBoot 2.x 时代 – 基础入门篇 视频学习地址:https://www.bilibili.com/video/BV1Et411Y7tQ?p=112&spm_id_from=p ...

  7. Python+Dash快速web应用开发——基础概念篇

    作者:费弗里 来源:Python大数据分析 ❝本文示例代码与数据已上传至https://github.com/CNFeffery/DataScienceStudyNotes ❞ 1 简介 这是我的新系 ...

  8. 深度学习:基础概念陈述及P-R曲线绘制案例(Python)

    文章目录 @[toc] 一.概念陈述 1.1引例 1.2机器学习与深度学习 1.3基础概念 1.4机器学习与统计学的对比 二.数据集(dataset) 2.1数据集的数学表示 2.2训练集和测试集 2 ...

  9. 数据结构与算法——从零开始学习(一)基础概念篇

    系列文章 第一章:基础知识 第二章:线性表 第三章:栈和队列 第四章:字符串和数组 第五章:树和二叉树 第六章:图 第七章:排序算法 前言 数据结构:是指相互之间存在一种或多种特定关系的数据元素的集合 ...

  10. 设计模式学习笔记-基础知识篇

    1. 设计模式的重要性 1.1 设计模式解决的是在软件过程中如何来实现具体的软件功能.实现同一个功能的方法有很多,哪个设计容易扩展,容易复用,松耦合,可维护?设计模式指导我们找到最优方案. 1.2 设 ...

最新文章

  1. android开发 获取父控件的高宽
  2. 673. 最长递增子序列的个数
  3. PGpool 编译出错
  4. 扎心!七夕刚过“玫瑰花是什么垃圾”就成热搜 支付宝都看不下去了...
  5. Python BeautifulSoup和Requests爬虫爬取中关村手机资料
  6. android内存占用分析,Android App性能评测分析-内存篇
  7. .NET中的加密类(对称加密)
  8. 谷歌chrome 71 flash 添加问题的解决方案(chrome禁用添加允许flash的选项)
  9. 三菱触摸屏通讯错误_s7-200和三菱触摸屏通讯的问题
  10. 老路《用得上的商学课》学习开篇(自序)
  11. 线段树+平衡树(STL) 勤快的love 枫
  12. 网络唤醒的原理原来是这样的,GET!
  13. jnz和djnz_求汇编语言指令,最好详细些
  14. Linux Alsa声卡驱动(1):简介
  15. vue2.0 渲染列表在苹果手机加载不出来的问题
  16. qq免费透明FLASH式漂浮物代码
  17. ch340t电路_CH340T模块的程序下载电路故障及解决方法
  18. 机器人学笔记(改进)
  19. 12(PHP图像的制作,例如验证码)
  20. 出差!出差!!又是烦人的出差!!!奋斗史无奈暂缓更新~

热门文章

  1. 将g++编译器集成到VC2005中
  2. 转http://www.anyliz.com/blog/article/Software/favorites-software-official-download-url.htm
  3. Html5下载功能实现
  4. EPUB电子书专用阅读软件
  5. 计算机网络考试系统考试终端学号,万维全自动网络考试系统
  6. 天锐绿盾加密软件如何制作外发文件
  7. java集合框架小结
  8. 解决主页被劫持的dos脚本
  9. 网站源码获取工具 Teleport Ultra
  10. 数学建模编程用c语言,C程序设计一百例--用c语言解决数学建模问题.doc