Java 框架(SSH、SSM、Springboot)

本文由 简悦 SimpRead 转码, 原文地址 http://www.freesion.com/article/7279267626/

本系列用来记录常用 java 框架的基本概念、区别及联系,也记录了在使用过程中,遇到的一些问题的解决方法,方便自己查看,也方便大家查阅。

欲速则不达,欲达则欲速!

一、SSH

1、基本概念

SSH 框架是 JAVA EE 中三种框架所集成,分别是 Struts,Spring,Hibernate 框架所组成,是当前比较流行的 java web 开源框架。

集成 SSH 框架的系统从职责上分为(Struts2-- 控制;spring-- 解耦;hibernate-- 操作数据库),以帮助开发人员在短期内搭建结构清晰、可服用好、维护方便的 web 应用程序。使用 Struts 作为系统的整体基础框架,负责 MVC 的分离,在 Struts 框架的模型部分,控制业务跳转,利用 hibernate 框架对持久层提供支持,spring 做管理,管理 Struts 和 hibernate。

2、Struts2

(1)基本概念

Struts2 是一个基于 MVC 设计模式的 web 应用框架,相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器(controller)来建立模型与视图的数据交互。Struts2 在 Struts1 融合 webwork。struts2 以 webwork 为核心,采用拦截器的机制来处理用户的请求,这样的设计使得业务逻辑控制器能够与 servletAPI 完全脱离。

(2)Struts2 框架的运行结构

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

(3)Struts2 的优势

  • 实现了 MVC 模式,层次结构清晰,使程序员只需要关注业务逻辑的实现。
  • 丰富的标签库,大大提高了开发的效率。
  • Struts2 提供丰富的拦截器实现。
  • 通过配置文件,就可以掌握整个系统各个部分之间的关系。
  • 异常处理机制,只需在配置文件中配置异常的映射,即可对异常做响应的处理。
  • Struts2 的可扩展性高。
  • 面向切面编程的思想在 Struts2 中也有了很好的体现。
  • 体现了拦截器的使用,拦截器是一个一个的小功能模块,用户可以将这些拦截器合并成一个大的拦截器,这个合成的拦截器就像单独的拦截器一样,只要将它配置到一个 Action 中就可以。

(4)Struts2 的缺点:

  • 校验较繁琐,多字段出错返回不同。
  • 安全性太低
  • 获取传参时较麻烦

2、Spring

(1)基本概念

spring 是一个开源开发框架,是一个轻量级控制反转 (IoC) 和面向切面 (AOP) 的容器框架。

spring 主要用来开发 java 应用,构建 J2EE 平台的 web 应用。其核心就是提供一种新的机制管理业务对象及其依赖关系。

(2)spring 的流程图

解析:上面是在 Struts 结构图的基础上加入了 spring 流程图,在 web.xml 配置文件中加入了 spring 的监听器,在 struts.xml 配置文件中添加

“<constant  />”

是告知 Struts2 运行时使用 spring 来管理对象,spring 在其中主要做的就是注入实例,所有需要类的实例都由 spring 管理。

(3)spring 的优点

  • 容器:spring 是一个容器,包含并管理对象的生命周期和配置。可以配置每个 bean 如何被创建,基于一个可配置原型 prototype,你的 bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例。
  • 支持 AOP:spring 提供对 AOP 的支持,它允许将一些通用任务,如安全、事物、日志等进行集中式处理,从而提高了程序的复用性。
  • 轻量级框架:spring 是轻量级框架,其基本的版本大约 2M。
  • 控制反转:spring 通过控制反转实现松耦合。对象们给他们依赖,而不是对象本身,方便解耦,简化开发。
  • 方便程序测试:spring 提供了 Junit4 的支持,可以通过注解方便的测试 spring 程序。
  • 降低 java EE API 的使用难度:spring 对 java EE 开发中非常难用的一些 API(比如 JDBC),都提供了封装,使这些 API 应用难度大大降低。
  • 方便集成各种优秀框架:spring 内部提供了对各种优秀框架(如 Struts、mybatis)的直接支持。
  • 支持声明式事务处理:只需要通过配置就可以完成对事务的管理,而无须手动编程。

(4)spring 的缺点

  • 依赖反射,反射影响进程。
  • 太过于依赖设计模式。
  • 控制器过于灵活。
  • 不支持分布式应用。

3、hibernate

(1)基本概念

Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,它将 POJO 与数据库表建立映射关系,是一个全自动的 orm 框架,hibernate 可以自动生成 SQL 语句,自动执行,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate 可以应用在任何使用 JDBC 的场合,既可以在 Java 的客户端程序使用,也可以在 Servlet/JSP 的 Web 应用中使用,最具革命意义的是,Hibernate 可以在应用 EJB 的 J2EE 架构中取代 CMP,完成数据持久化的重任。

(2)hibernate 的核心构成和执行流程图

(3)hibernate 的优点

  • 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
  • Hibernate 是一个优秀的 ORM 实现。他很大程度的简化 DAO 层的编码工作,将软件开发人员从大量相同的数据持久层相关编程工作中解放出来,使开发更对象化了。
  • 透明持久化(persistent)带有持久化状态的、具有业务功能的单线程对象,此对象生存期很短。这些对象可能是普通的 javabeans/POJO,(POJO 概念,plain ordinary java object,简单的 java 对象,可以简单理解为简单的实体类 entity。)这个对象没有实现第三方框架或接口,唯一特殊的是他们正与 session 关联。一旦这个 session 被关闭,这些对象就会脱离持久化状态,这样就可被应用程序的任何层自由使用。
  • 事务 transaction 应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。它通过抽象将应用从底层具体的 JDBC、JTA(java transaction API,JTA 允许应用程序执行分布式事务处理,在两个或多个网络计算机资源访问并且更新数据,JDBC 驱动程序的 JTA 支持极大地增强了数据访问能力)以及 CORBA(公用对象请求代理程序体系结构,common object request broker architecture,简而言之,CORB 允许应用程序和其它的应用程序通讯)事务隔离开。某些情况下,一个 session 之内可能包含多个 transaction 对象,事务边界的开启与关闭时必不可少的。
  • 它没有侵入性,是轻量级框架。
  • 移植性好,支持各种数据库,如果换个数据库只要在配置文件中变换配置就可以了,不用改变 hibernate 代码。
  • 缓存机制,提供一级缓存和二级缓存。

一级缓存:是 session 级别的缓存,一个 session 做了一个查询操作,它会把这个操作的结果放到一级缓存中,如果短时间内这个 session 又做了同一个操作,那么 hibernate 直接从一级缓存中拿出,而不会去连数据库取数据。

二级缓存:是 sessionFactory 级别的缓存,就是查询的时候会把结果缓存到二级缓存中,如果同一个 sessionFactory 创建的某个 session 执行了相同的操作,hibernate 就会从二级缓存中拿出结果,而不会再去连接数据库。

(4)hibernate 的缺点

  • 持久层封装过于完整,导致开发人员无法对 SQL 进行优化,无法灵活应用原生 SQL。
  • 批量数据处理的时候较为弱势。
  • 框架中使用 ORM 原则,导致配置过于复杂,遇到大项目,维护问题不断。

为什么很多人不愿意用 hibernate 了?

尚硅谷 Java 视频_SSH 整合 & 综合案例 视频教程

手动实现教程源码:

链接: https://pan.baidu.com/s/1BK0V1wxA-GQrWco10WEzeg 提取码: 2e3e 

二、SSM

SSM 架构,是三层结合所成的框架,分别是 Spring、SpringMVC、MyBatis 所组成。Spring 依赖注入来管理各层,面向切面编程管理事务,日志和权限。SpringMVC 代表了 model、view、controller 接收外部请求,进行开发和处理。mybatis 是基于 jdbc 的框架,主要用来操作数据库,并且将业务实体和数据表联系起来。

1、spring

详细介绍见 SSH 中 spring。

2、SpringMVC

(1)基本概念

属于 spring 框架的一部分,用来简化 MVC 架构的 web 应用程序开发。

(2)SpringMVC 的优点

  • 拥有强大的灵活性,非侵入性和可配置性
  • 提供了一个前端控制器 dispatcherServlet,开发者无需额外开发控制器对象
  • 分工明确,包括控制器、验证器、命令对象、模型对象、处理程序映射视图解析器,每一个功能实现由一个专门的对象负责完成
  • 可以自动绑定用户输入,并正确的转换数据类型
  • 可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。

(3)SpringMVC 的缺点

  • servlet API 耦合难以脱离容器独立运行
  • 太过于细分,开发效率低

3、mybatis

(1)基本概念

mybatis 是一个简化和实现了 java 数据持久层的开源框架,它抽象了大量的 JDBC 冗余代码,并提供了一个简单易用的 API 和数据库交互。

(2)mybatis 的优点

  • 与 JDBC 相比,减少了 50% 以上的代码量。
  • mybatis 是最简单的持久化框架,小巧并且简单易学。
  • mybatis 灵活,不会对应用程序或者数据库的限售设计强加任何影响,SQL 写在 XML 里,从程序代码中彻底分离,降低耦合度,便于统一管理和优化,可重用。
  • 提供 XML 标签,支持编写动态 SQL 语句(XML 中使用 if,else)。
  • 提供映射标签,支持对象与数据库的 ORM 字段关系映射(在 XML 中配置映射关系,也可以使用注解)

(3)mybatis 的缺点

  • SQL 语句的编写工作量较大,对开发人员的 SQL 语句编写有一定的水平要求。
  • SQL 语句过于依赖数据库,不能随意更换数据库。
  • 拼接复杂 SQL 语句时不灵活。

三、Springboot

1、springboot 基本概念

springboot 是一个全新的框架,简化 Spring 的初始搭建和开发过程,使用了特定的方式来进行配置,让开发人员不再需要定义样板化的配置。此框架不需要配置 xml,依赖于 maven 这样的构建系统。

2、Springboot 的优点

(1)减少了大量的开发时间并提高了生产力

(2)避免了编写大量的样板代码,注释和 XML 配置

(3)解决了 spring 的弊端

(4)代码少了、配置文件少了、不需要对第三方框架烦恼了、项目精简了,对整个团队的开发和维护来说,更大的节约了成本。

3、springboot 的缺点

(1)修复 bug 较慢,报错时难以定位。

(2)集成度较高,不易于了解底层。

4、springboot 总结

简单、快速、方便的搭建项目;对主流开发框架的无配置集成;极大提高了开发、部署效率。

5、springboot 和 spring 的区别

(1)springboot 可以建立独立的 spring 应用程序。

(2)内嵌了如 tomcat,Jetty 和 Undertow 这样的容器,也就是说可以直接跑起来,用不着再做部署工作。

(3)无需再像 spring 那样写一堆繁琐的 XML 配置文件

(4)可以自动配置 spring

(5)提供的 POM 可以简化 maven 的配置

6、springboot 和 springMVC 的区别

(1)SpringMVC 是基于 spring 的一个 MVC 框架。

(2)springboot 的基于 spring 的条件注册的一套快速开发整合包。

推荐博文

素小暖讲 Spring JdbcTemplate

为什么很多人不愿意用 hibernate 了?

【原创】纯干货,Spring-data-jpa 详解,全方位介绍。

猜你喜欢

转载自www.cnblogs.com/wangdaijun/p/12544580.html