首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2019Java面试宝典 -- JavaWeb框架篇

2019Java面试宝典 -- JavaWeb框架篇

作者头像
浩Coding
发布2019-07-12 15:10:18
9960
发布2019-07-12 15:10:18
举报
文章被收录于专栏:浩Coding浩Coding浩Coding

前言 框架综合篇

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面试题很多代码来自网络,后加上作者的修改。如有侵权,联系作者(公众号后台留言即可)马上删除。

参考文章:

SSM框架初解(三)请求到响应的过程?

https://blog.csdn.net/qq_36957681/article/details/92798146

ssm框架执行流程?

https://www.xianjichina.com/news/details_89753.html

Java面试宝典 -- 黑马程序员

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 浩Coding 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • SSM框架初解(三)请求到响应的过程?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档