ssh框架被淘汰的原因
SSH就是Struts2+Spring+Hibernate。
三个组件的简单介绍
Struts2:通俗的讲就是为了完成MVC模型中的C的功能,也就是编写具体的业务逻辑的地方。从他的设计上来看就是请求到了web容器,然后经过了一系列的过滤器,再通过请求FilterDispatcher询问ActionMapper是否需要调用某个Action,如果要调用的话, 然后执行先前配置好的拦截器,就到了我们的具体逻辑,执行完之后,还会继续执行对应的拦截器和过滤器逻辑,最后返回给调用方。
Spring:通俗的讲只是通过它的核心IOC来管理我们编写逻辑中间的一些bean。我们通过IOC来减少耦合和简化对象的操作。
Hibernate: 是对象关系映射框架,简单的说,它就是对JDBC进行了非常轻量级的对象封装,目的是让操作数据库像操作对象一样简单。
这个就是SSH三者最开始的目的,他们各司其职,在缺乏框架的年代,很好的配合着,以至于一直流传了下来。
三个组件现在的发展情况
介绍完了SSH的本质,接下来介绍一下这三个组件现在的发展情况。
首先Struts2框架爆出了很多高危漏洞,使得应用的安全有了很大程度的隐患。然后很多做法也不够优雅,特别是JSR-311标准出台之后,随着Restful方式的流程程度普及开来,Struts2越来越被大家所抛弃,虽然struts2也加入了一些plugin来进行支持REST,但是还是过于繁琐。所以导致了现在Struts2的没落。
然后spring以IOC为核心,然后进行大力扩展,先后推出了SpringMVC来完成逻辑层的编写逻辑,现在SpringMVC基本已经完成了替代struts2的工作(一些很老的项目可能没有进行改造)。然后在SpringMVC大获成功之后,基于SpringMVC和web容器,把他们两者进行结合,推出了SpringBoot,经过几年的发展和酝酿,现在后端基本被Spring系列所统一。所以现在要我来讲,后端框架的王者就只有一个Spring系列了。
最后Hibernate只是一个对操作数据库进行映射的ORM框架,有很多也可以替代,比如Ibatis, Mybatis, JPA等等,因为ORM框架有自己的优点也有自己缺点,就看使用者如何进行权衡了。
从我个人的意见来看,简单的业务逻辑直接用JPA(Spring基于Hibernate的封装)就可以了,如果是复杂的,还不如直接写SQL来得简单,调优也方便。
三个组件淘汰的原因
现在提倡和流行的是前后端分离(这里指的分离是完全分离,而不是之前通过模版进行分离,前后端数据交互是根据HTTP进行的)。
并且后端设计的接口趋向于Restful的架构。为什么有这种变化,因为现在前端不仅仅是Web浏览器端,在移动互联网时代,APP也是很大一部分。所以从后端的角度来看,他们都是客户端。APP是没办法通过模版进行渲染的,只能通过HTTP传输数据。这也是后端服务发展的趋势。
Java后端技术有很多,如果想要提高,最好的捷径就是踏踏实实的进行学习,对于刚工作不久的人来说,可以把学习SSH框架的时间用来学习SpringMVC,然后掌握Spring的核心,然后学习什么是Restful概念,最后可以了解JDBC的一些概念(前期不推荐学习ORM框架)。
另外的有SSM框架,老一点项目Spring+Struts2+Mybatis,现在主流是Spring+SpringMVC+Mybatis。
Mybatis是半自动的,Mybatis自动化的地方在于它把数据给我们封装后返回给我们,手动的部分在于我们自己来写sql,这样的方式很灵活,我们可以根据需求写最优的sql语句。
Hibernate是全自动的,sql都帮我们写好了,但是这也是Hibernate一个很大的缺点,有时候它给的sql语句并不是最优的,就极大的影响了我们的效率。
"当我们失去的时候,才会知道自己曾经拥有。"
ssh框架被淘汰的原因的更多相关文章
- SSH框架整合
SSH框架整合 一.原理图 action:(struts2) 1.获取表单的数据 2.表单的验证,例如非空验证,email验证等 3.调用service,并把数据传递给service Service: ...
- 基于SSH框架的学生公寓管理系统的质量属性
系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信 ...
- SSH框架简化(struts2+spring+hibernate)
目的: 通过对ssh框架有了基础性的学习,本文主要是使用注解的方式来简化ssh框架的代码编写. 注意事项: 1.运行环境:Windows 8-64位,Eclipse(开发工具),jdk1.8.0_91 ...
- 转 SSH框架搭建详细图文教程
原址:http://blog.sina.com.cn/s/blog_a6a6b3cd01017c57.html 什么是SSH? SSH对应 struts spring hibernatestruts ...
- 关于SSH框架设计的一些理解
近期在学习企业开发领域非常流行的SSH框架(Struts.Hibernate.Spring).因为之前有做过原生的Servlet+JSP的项目,所以在学习过程中我会跟原生开发模式进行对照,在这里我把自 ...
- javaWeb项目(SSH框架+AJAX+百度地图API+Oracle数据库+MyEclipse+Tomcat)之一 基础Struts框架搭建篇
即将开始着手写这个项目,所以希望通过这篇博客来记录自己学习的过程 今天开学第一天,就上了软件工程实践课,自己也开始着手做这个大作业了.首先我的项目名称叫做智能班车管理系统. 项目的概况: 该软件产品是 ...
- SSH框架搭建最终版【测试、log4j、baseDao】
最详细搭建SSH框架环境 本博文主要是讲解如何搭建一个比较规范的SSH开发环境,以及对它测试[在前面的搭建中,只是整合了SSH框架,能够使用SSH实现功能],而这次是相对规范的. 导入开发包 在Str ...
- Maven 整合 SSH 框架
前面的一系列文章中,我们总结了三大框架:Struts2,Hibernate,Spring 的基本知识.本篇就姑且尝试着使用 Maven 这个项目构建工具来将这三个框架整合一起.说到这里,如果有对 Ma ...
- SSH框架完全整合
大三学期渐末,事情也挺多的,上周就开始着手整合SSH框架,到现在才真正的完成,过程中碰到了许多小问题(小问题大折腾,哭脸.jpg).本着善始善终的原则,最终把它给完成了. 本篇文章就在: win7 6 ...
随机推荐
- pandas 学习 第3篇:Series - 数据处理(应用、分组、滚动、扩展、指数加权移动平均)
序列内置一些函数,用于循环对序列的元素执行操作. 一,应用和转换函数 应用apply 对序列的各个元素应用函数: Series.apply(self, func, convert_dtype=True ...
- route 相关设置
Debian系统 查看路由表: root@debian:~# ip route default via 192.168.6.1 dev enp4s0 10.0.0.0/24 dev br0 proto ...
- 调试接口你还在用postman吗
作者 | 陈凯玲 来源 | my.oschina.net/keking/blog/3104972 接口调试是每个软件开发从业者必不可少的一项技能,一个项目的的完成,可能接口测试调试的时间比真正开发写代 ...
- C# Mutex to make sure only one unique application instance started
static void MutexDemo2() { string assName = Assembly.GetEntryAssembly().FullName; bool createdNew; u ...
- xml解析-jaxp遍历结点
jaxp遍历结点 把xml中所有的结点都打印出来 // 遍历结点把所有元素名称打印出来 / 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得 ...
- 配置VS Code+React开发环境
1.安装node+npm 2.安装VS Code 3.选择工作区文件夹——右键点击在终端中打开 4.按照Using React in Visual Studio Code的文档进行操作 npm ins ...
- VectorMap.js 矢量地图库 – 快速入门
VectorMap.js是一个开源地图渲染JavaScript库, 可以使用WebGL或者HTML5两种方式进行交互式矢量地图 (包括“矢量瓦片地图”,一般性矢量数据地图)和 栅格瓦片地图的渲染. W ...
- 登录界面storyboard的一种布局方法
布局思想:三个大点的背景视图宽高相等间距一定(30),左右距父视图距离一定(50),则宽度确定,水平方向位置确定 竖直方向:高度与宽度成一定比例,上边距父视图距离一定,竖直方向的位置和大小也确定了.输 ...
- [20191010]bash行计算器.txt
[20191010]bash行计算器.txt --//写一个bash行计算器,为了避免冲突,函数命名为2个=,1个=感觉不是很好(心里上^_^).--//使用bc计算器,里面函数不能使用圆括号,使用中 ...
- [日常] gocron源码阅读-go语言的变量
变量的声明形式是这样的 var 变量名字 类型 = 表达式var ( AppVersion = "1.5" BuildDate, GitCommit string)类型可以被省略, ...