大家好,又见面了,我是你们的朋友全栈君。
一、前言
最近有个小面试需要复习以前用到的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文件来与数据库的具体表进行映射。
POJO:Plain Ordinary Java Object,即简单的Java对象
ORM:Object 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的工作原理:
-
Configuration.config() 来读取XXXbean.hbm.xml配置文件
-
Configuration.config()来读取配置文件里面的映射信息
-
创建sessionFactory
-
打开Session
-
开启事务transaction
-
持久化到数据库
-
关闭session
-
关闭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之外,还需要了解流行的集中常用的开发框架,毕竟学的东西都是要实践的嘛(配置也算一种磨炼吧:) )
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152648.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...