java面试:SSH和SSM

以下为博主整理网络资料而成,如有错误望请指正,感谢!

SSH(Struts2+Spring+Hibernate)和SSM(SpringMVC+Spring+MyBatis)

Struts和SpringMVC异同

共同点:
	1. 都是表现层框架,都是基于MVC模式编写的
	2. 处理请求的机制都是一个核心控制器
不同点:
	1. Struts2是基于类级别,SpringMVC是基于方法级别的。
	   即Struts的每次请求都会生成一个Action类去处理请求,一个Action对象对应一个Request上下文;
	   SpringMVC是每次请求都对应控制器中的一个方法,一个方法对应一个Request上下文。
	2 数据共享不一样。Struts2因为是类级别,数据在多个方法间共享;
	   SpringMVC因为方法直接基本独立,请求数据在方法间不共享。
	3. Struts2的入口是filter,SpringMVC的入口是servlet。
	4. 对AJAX的支持不同。Struts2一般由安装插件或自己写代码集成;
	   SpringMVC的话使用一个注解@ResponseBody就可以实现。
	5. 与Spring的搭配上,SpringMVC是无缝的,而Struts2的话需要一定的配置。
	6. SpringMVC开发效率和性能高于Struts2.

Hibernate和MyBatis异同

同:
	1. 都是可以通过SessionFactoryBuider有XML配置文件生成工厂类,
		然后由工厂类来生成session,最后由Session来开启执行事务和SQL语句
	2. 都支持JDBC和JTA(Java事务API)事务。
		1. JDBC事务都是基于Connection的,通过对Connection的管理,操纵事务相关方法:
		   自动提交(setAutoCommit),提交(commit),回滚(rollback),释放(close);
		   缺点是一个JDBC事务不能跨越多个数据库,所以涉及到多数据库的操作或者分布式场景,JDBC事务无能为力
		3. JTA事务是一个Java企业版的应用程序接口,在Java环境中,允许完成跨越多个资源的分布式事务
异:
	1. Hibernate是全自动,MyBatis是半自动的
		即Hibernate可以通过对象关系模型实现对数据库的操作(比如根据实体类自动建表),
		它还可以通过完整的JavaBean对象和数据库的映射结构来自动生成SQL语句;
		MyBatis只有基本的字段映射,对象的数据和对象与数据库的关系仍然需要通过定制SQL语句来实现和管理
	2. Hibernate数据库的移植性比MyBatis要好
		hibernate通过强大的映射结构和hql语言,大大降低了对象与数据库的耦合性;
		而MyBatis因为要手写sql语句,所有与数据库的耦合性就取决于程序员写SQL语句的方法
		如果SQL语句不具有通用性,那么移植性会降低很多,成本较高。
	3. 在SQL直接优化上,MyBatis比Hibernate方便很多
		因为MyBatis的SQL都是直接写在xml里面,所以优化比Hibernate方便。
		而且Hibernate里的很多SQL都是自动生成的,无法直接维护sql。
	4. 就入门使用来讲,MyBatis比Hibernate更容易上手,Hibernate的门槛较高

springMVC的优缺点:

1. 优点
	   1. springMVC是使用了MVC设计思想的轻量级web框架,对web层进行解耦,使得我们开发更简洁。
  2. 与Spring无缝衔接。
  3. 灵活的数据验证,格式化,数据绑定机制。

2. 缺点:
	1. Spring与MVC 的Servlet API 耦合,难以脱离容器独立运行

Mybatis的优缺点

1. 优点
	1. 易于上手和掌握
	2. sql写在xml里便于统一的管理和优化
	3. 解除了sql和程序代码的耦合
	4. 支持对象和数据库的ORM字段关系映射
	5. 支持动态SQL
2. 缺点
	1. sql工作量大,尤其是当字段多,关联表多时
	2. sql依赖数据库,所以数据库移植性较差
	3. 不支持级联更新,级联删除
	4. 二级缓存机制不佳,在多表查询过程中可能产生脏数据

简单介绍一下spring

Spring是一个轻量级框架,可以一站式构建你的企业级应用。

Spring的模块大概分为6个。分别是:	
	1. Core Container(Spring的核心)【重要】	
	2. AOP(面向切面变成)【重要】	
	3. Messaging(消息发送的支持)	
	4. Data Access/Integration(数据访问和集成)	
	5. Web(主要是SpringWeb内容,包括MVC)【重要】	
	6. Test(Spring测试支持,包含JUint等测试单元的支持) 

spring的优缺点

1. 优点
	1. spring的IOC还有DI将创建对象和维护对象之间的依赖关系交给了spring容器,降低了组件之间的耦合性,让程序员专注于逻辑
	2. 对AOP有良好的支持,方便面向切面编程
	3. 对主流的框架提供很好的集成支持,如Hibernate,MyBatis等等,给我们提供不同的技术实现的平台
	4. 提供编程式事务管理和声明式事务管理的支持
	5. Spring是一个非入侵式的框架,就是说它的目标是让应用程序代码对框架的依赖最小化
2. 缺点:
	1. 没有一个总的架构图,不利于初学者了解所有
	2. spring像一个胶水,将框架黏在一起,后面拆分的话就不容易拆分了

Spring MVC的工作原理/工作流程

1. 客户端的所有请求都交给前端控制器DispatcherServlet来处理,
	它会负责调用系统的其他模块来真正处理用户的请求。
2. DispatcherServlet收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)
	以及HandlerMapping的配置找到处理该请求的Handler(任何一个对象都可以作为请求的Handler)。
3. 在这个地方Spring会通过HandlerAdapter对该处理器进行封装。
4. HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用。
5. Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet,
 	ModelAndView顾名思义,包含了数据模型以及相应的视图的信息。
6. ModelAndView的视图是逻辑视图,DispatcherServlet还要借助ViewResolver完成从逻辑视图到真实视图对象的解析工作。
7. 当得到真正的视图对象后,DispatcherServlet会利用视图对象对模型数据进行渲染。
8. 客户端得到响应,可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件。

附:牛客java面经

发布了95 篇原创文章 · 获赞 43 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/lyxuefeng/article/details/101163974