这里写目录标题
今天,面试官看到自己做的项目后,突然问了我一个让人两眼发懵的问题,那就是,
为什么使用SSH ?
- 为什么使用?想用就用呗,那有为什么!
- 哈哈,上面虽然是自己心中所想,但对于面试官来说,当然不是他想要的啦。
- 下面就把问题的正解留给大家,以供参考。
1. 为什么使用SSH?
1.1 首先,基于现实考虑
当时我们软件工作室刚成立,熟悉开发的人不多,在学习黑马程序员课程时,只有很少人学到了 Struts2 + Hibernate
。大部分人的进度只学到了Struts,甚至还要往后,所以,以当时我们的开发能力来说,我们选择的开发框架就只能是SSH。
1.2 为什么使用Struts2?
Struts2核心就是核心控制器(StrutsPrepareAndExecuteFilter)
和业务控制器(Action类)
- 通过JSP、Servlet、JavaBean这些技术构建的系统非常的繁乱。Struts2
结构层次分明
,高可重用性等优点,增加了程序的健壮性和可伸缩性,便于开发与设计分工
。 - 可以减少重复代码的开发,提高工作效率
- 它对其他技术和框架显示出很好的融合性,如:Spring
1.3 为什么使用Hibernate?
Hibernate框架技术最关键是数据持久化
,是将数据保存到持久层的过程
- 对JDBC访问数据库的代码做了封装,大大
简化了数据访问层繁琐的重复性代码
。 - Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的orm实现,它很大程度的
简化了dao层编码
工作。session.save(User)
- Hibernate 中
提供了两级Cache
,降低了应用程序对数据库访问的频次,从而提高应用程序的运行性能。
1.4 为什么使用Spring?
Spring的核心是IoC
和AOP
核心容器:beans(管理bean
),core(核心
),context(上下文
),expression(SpEL
,表达式)
1. 方便解耦,简化开发
- 通过Spring提供的
loC容器
,我们可以将对象之间的依赖关系交由Spring进行控制
,避免硬编码所造成的过度程序耦合。 - 有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以
更专注于上层的应用
。
2. AOP编程的支持
- 通过Spring提供的AOP功能,
方便进行面向切面的编程
,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
3. 声明式事务的支持
- 在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式
灵活地进行事务的管理
,提高开发效率和质量。
4. 方便程序测试
- 可以用非容器依赖的编程方式进行几乎所有的测试工作,在Spring里,测试不再是昂贵的操作,而是随手可做的事情。
5. 方便集成各种优秀框架
- Spring提供了对各种优秀框架(如Struts,Hibernate、Hessian、Quartz)等的直接支持。
2. Mybatis和Hibernate区别
- Mybatis 技术特点:
- 通过直接编写 SQL 语句,
可以直接对 SQL 进行性能的优化
;学习门槛低, 学习成本低
。 只要有 SQL 基础, 就可以学习 mybatis, 而且很容易上手;- 由于直接编写 SQL 语句, 所以灵活多变,
代码维护性更好
。不能支持数据库无关性
, 即数据库发生变更, 要写多套代码进行支持, 移植性不好。
- Hibernate 技术特点:
优点
- 标准的 ORM 框架,
程序员不需要编写 SQL 语句
。具有良好的数据库无关性
, 即数据库发生变化的话, 代码无需再次编写。
缺点
学习门槛高
, 需要对数据关系模型有良好的基础, 而且在设置 OR 映射的时候, 需要考虑好性能和对象模型的权衡。- 框架中使用ORM原则,
导致配置过于复杂
,一旦遇到大型项目,配置文件和内容是非常庞大的,性能和维护问题随之而来,因此适用于业务固定的项目
。- 由于对持久层封装过于完整,导致开发人员
无法对SQL进行优化
,无法灵活使用JDBC的原生SQL。- 如果项目中各个表中关系复杂,表之间的关系很多,在很多地方把lazy都设置false,会导致数据查询和加载很慢,尤其是级联查询的时候。
- Hibernate在批量数据处理时有弱势,对于批量的修改,删除,不适合用Hibernate,这也是ORM框架的弱点。
Hibernate不适用于小型项目
。针对单一对象简单的增删查改,适合于Hibernate
,而对于批量的修改,删除,不适合用Hibernate,这也是OR框架的弱点;要使用数据库的特定优化机制的时候,不适用于Hibernate
。
- Mybatis 应用场景:
需求多变
的互联网项目, 例如电商项目。
- Hibernate 应用场景:
- 需求明确、
业务固定的项目
, 例如 OA 项目、 ERP 项目等。
- 需求明确、
3. 有了struts2,为什么还需要 SprigMVC
- 实现机制:
- Struts2 是基于过滤器实现的。
- Springmvc 基于servlet 实现。Servlet 比过滤器快。
Filter在容器启动之后即初始化
;服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化
,先于Filter调用,服务停止后销毁。
- 与Spring整合
- Springmvc 是Spring 的一部分。与 Struts2更利于和 Spring 的整合。
- 运行速度:
Struts2 是多例
:请求来了以后,struts2 创建多少个对象
- ActionContext,valuestack,UserAction,
ActionSuport
,ModelDriven userAction 里面属性:User 对象,userlist 集合等Springmvc 是单例
。
- 参数封装来分析:
- Struts 基于属性进行封装。
- Springmvc 基于方法封装。
- 集成方面
- SpringMVC集成了Ajax,使用非常方便,只需注解@ResponseBody、@RequestBody 就可以实现。
- Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
3.1 知识拓展
@responseBody 把后台pojo 转换json 对象,返回到页面。
@RequestBody 接受前台json 数据,把json 数据自动封装javaBean。
文章参考
作者:我是司
springMVC和struts2有什么不同?
为什么要用springMVC或者struts2?
让你实现一个MVC框架大概如何设计?
感谢两位博主的好文与感悟,想要更进一步了解详情的,欢迎大家进入两位博主大大的空间进行阅读。