前言 框架综合篇
1、SpringMVC 和 Struts2 的区别?
1、Struts2 是类级别的拦截,一个类对应一个 request 上下文,SpringMVC 是方法级别的拦截,一个方法对应一个 request 上下文,而方法同时又跟一个 url 对应,所以说从架构本身上 SpringMVC 就容易实现 restful url,而 struts2的架构实现起来要费劲,因为 Struts2 中 Action 的一个方法可以对应一个 url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。
2、由上边原因,SpringMVC 的方法之间基本上独立的,独享 request response 数据,请求数据通过参数获取,处理结果通过 ModelMap 交回给框架,方法之间不共享变量,而 Struts2 搞的就比较乱,虽然方法之间也是独立的,但其所有 Action 变量是共享的,这不会影响程序运行,却给我们编码 读程序时带来麻烦,每次来了请求就创建一个Action,一个 Action 对象对应一个 request 上下文。
3、由于 Struts2 需要针对每个 request 进行封装,把 request,session 等 servlet 生命周期的变量封装成一个一个 Map,供给每个 Action 使用,并保证线程安全,所以在原则上,是比较耗费内存的。
4、 拦截器实现机制上,Struts2 有以自己的 interceptor 机制,SpringMVC 用的是独立的 AOP 方式,这样导致Struts2 的配置文件量还是比 SpringMVC 大。
5、SpringMVC 的入口是 servlet,而 Struts2 是 filter(这里要指出,filter 和 servlet 是不同的。),这就导致了二者的机制不同,这里就牵涉到 servlet 和 filter 的区别了。
6、SpringMVC 集成了 Ajax,使用非常方便,只需一个注解@ResponseBody 就可以实现,然后直接返回响应文本即可,而 Struts2 拦截器集成了 Ajax,在 Action 中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。
7、SpringMVC 验证支持 JSR303,处理起来相对更加灵活方便,而 Struts2 验证比较繁琐,感觉太烦乱。
8、Spring MVC 和 Spring 是无缝连接的。从这个项目的管理和安全上也比 Struts2 高(当然 Struts2 也可以通过不同的目录结构和相关配置做到 SpringMVC 一样的效果,但是需要 xml 配置的地方不少)。
9、 设计思想上,Struts2 更加符合 OOP 的编程思想, SpringMVC 就比较谨慎,在 servlet 上扩展。
10、SpringMVC 开发效率和性能高于 Struts2。
11、SpringMVC 可以认为已经 100%零配置。
2、Hibernate 和 Mybatis 的区别?
Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,建立对象与数据库表的映射。是一个全自动的、完全面向对象的持久层框架。
Mybatis是一个开源对象关系映射框架,原名:ibatis,2010年由谷歌接管以后更名。是一个半自动化的持久层框架。
两者相同点:
1)Hibernate 与 MyBatis 都可以是通过 SessionFactoryBuider 由 XML 配置文件生成 SessionFactory,然后由SessionFactory 生成 Session,最后由 Session 来开启执行事务和 SQL 语句。其中 SessionFactoryBuider,SessionFactory,Session 的生命周期都是差不多的。
2)Hibernate 和 MyBatis 都支持 JDBC 和 JTA 事务处理。
Mybatis 优势:
1)MyBatis 可以进行更为细致的 SQL 优化,可以减少查询字段。
2)MyBatis 容易掌握,而 Hibernate 门槛较高。
Hibernate 优势:
1)Hibernate 的 DAO 层开发比 MyBatis 简单,Mybatis 需要维护 SQL 和结果映射。
2)Hibernate 对对象的维护和缓存要比 MyBatis 好,对增删改查的对象的维护要方便。
3)Hibernate 数据库移植性很好,MyBatis 的数据库移植性不好,不同的数据库需要写不同 SQL。
4)Hibernate 有更好的二级缓存机制,可以使用第三方缓存。MyBatis 本身提供的缓存机制不佳。
3、SSM框架一个请求到响应再到数据库过程?
用户在浏览器写入数据,浏览器发送请求给服务器中的Dispatcher(前端控制器),前端控制器依据HandleMapping(处理映射),调用Controller(处理器),处理器中使用Service接口的ServiceImpl类,最后调用实现BlogMapper接口Dao接口,返回响应,再依据视图解析器调用相应的视图对象(如:jsp)将响应返回给浏览器。
以一个简单的博客平台为例,当用户通过浏览器发送请求到服务端后,先由BlogController类中的方法处理,然后调用使用BlogService接口的BlogServiceImpl类,最后调用实现BlogMapper接口的BlogMapper.xml文件。
一 SpringMVC
1、简述SpringMVC 的工作原理/流程?
a. 用户向服务器发送请求,请求被 springMVC 前端控制器 DispatchServlet 捕获;
b. DispatcherServle 对请求 URL 进行解析,得到请求资源标识符(URL),然后根据该 URL 调用 HandlerMapping将请求映射到处理器 HandlerExcutionChain;
c. DispatchServlet 根据获得 Handler 选择一个合适的 HandlerAdapter 适配器处理;
d. Handler 对数据处理完成以后将返回一个 ModelAndView()对象给 DisPatchServlet;
e. Handler 返回的 ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet 通过ViewResolver 试图解析器将逻辑视图转化为真正的视图 View;
h. DispatcherServle 通过 model 解析出 ModelAndView()中的参数进行解析最终展现出完整的 view 并返回给客户端;
2、SpringMVC 常用注解都有哪些?
@requestMapping 用于请求url 映射。
@RequestBody 注解实现接收 http 请求的 json 数据,将 json 数据转换为 java 对象。
@ResponseBody 注解实现将 controller 方法返回对象转化为 json 响应给客户。
本系列Java面试题很多代码来自网络,后加上作者的修改。如有侵权,联系作者(公众号后台留言即可)马上删除。
参考文章:
https://blog.csdn.net/QQ_36957681/article/details/92798146
ssm框架执行流程?
https://www.xianjichina.com/news/details_89753.html
Java面试宝典 -- 黑马程序员
Spring-Boot-+-Flowable-快速实现工作流