知识巩固:SpringMVC框架源码学习

SpringMVC源码学习

MVC由来

  1. 早期的mvc模型,JSP既负责展示数据,也负责处理数据
  2. 所有代码逻辑编写在JSP中
  3. 代码重用性低,维护难度高,后来被淘汰
  4. 后期进行改良或,JSP纯粹负责展示数据
  5. 处理请求交给控制器,也就是Servlet来处理
  6. 控制器只负责前端简单逻辑处理
  7. 负责逻辑依然靠后端JavaBean实现

SpringMVC执行过程分析

三大核心组件

1. 处理器映射器

  1. spring3.1后引入
  2. 配置方式:
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappin gHandlerMapping"/>
or:
<mvc:annotation‐driven></mvc:annotation‐driven>

2. 处理器适配器

  1. 可以理解为对控制器的抽象
  2. 将控制器的公共功能都定义在适配器中实现
  3. 适配器类型有多种
  4. 不同handle类型也对应不同的处理器适配器类型
Handler类别 对应适配器 描述 
Controller SimpleControllerHandlerAdapter 标准控制器,返回ModelAndView 

HttpRequestHandler HttpRequestHandlerAdapter 业务自行处理 请求,不需要通过 modelAndView 转到视图 

Servlet SimpleServletHandlerAdapter 基于标准的servlet 处理 

HandlerMethod RequestMappingHandlerAdapter 基于@requestMapping对应方法处理

3. 视图解析器

  1. 作用是渲染模型数据,将模型里的数据以某种形式呈现给客户
  2. 视图模型与具体实现技术进行了解耦
  3. 顶层有一个高度抽象的View接口
  4. View接口是无状态化的,也就说每个请求都会产生一个view实例,因此不存在线程安全问题
  5. 常用视图类型有
    • URL视图(JSP/Freemarker)
    • 文档类型视图(PDF/EXCEL)
    • JSON视图(JACKSON/FastJSON)
    • XML视图(xml)
  6. 可理解为其作用是将逻辑视图转为物理视图

控制器返回参数三种类型

  1. String,通常为view路径或重定向路径
  2. void,直接使用原始SerlvetAPI进行转发或重定向
  3. ModelAndView,实际说返回String时,也会创建mav

请求参数的实现原理

  1. 利用原生ServletAPI配合反射机制而实现
  2. RequestParam/RequestBody/PathVariable

拦截器的实现原理

  1. 一句话,就是利用AOP的机制
  2. 自定义拦截器的三个方法:
    • preHandler 控制器方法执行之前执行
    • postHandler 控制方法执行之后,视图创建之前
    • afterCompletion 视图创建之后,展示到浏览器之前
  3. afterCompletion无法控制相应结果,一般用于做一些清理操作

Spring整合SpringMVC

  1. 注意SpringIOC容器不应该扫描SpringMVC中的bean
  2. 同样,SpringMVC也不要扫描SpringIOC中的bean
  3. 否则bean会被创建2次
  4. 为啥?因为Spring容器与SpringMVC容器是父子关系
  5. MVC容器是Spring的子容器,因此MVC中的bean可引用Spring中的bean
  6. 而Spring中的Bean无法引用MVC容器中的bean
  7. 可以试试在Service中注入Controller看看

手写SpringMVC思路

  1. 创建准备自定义注解,准备SpringMVC核心配置文件
  2. 编写前端控制器:创建一个Servlet,在web.xml声明该总控
  3. 创建Spring容器,通过DOM4J解析SpringMVC的xml文件
  4. 扫描控制器及service,将其放入容器中
  5. 实现容器中对象的注入,将服务层对象注入到控制层
  6. 建立请求地址与控制器方法之间的映射关系
  7. 接收用户请求并进行分发
  8. 处理用户请求参数
  9. 控制器方法调用,并处理不同返回值数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问。我会依次回答您的每一个问题: 1. SpringSpringMVC的区别: Spring是一个框架,它提供了依赖注入和面向切面编程等功能,可以用来简化Java应用程序的开发。 SpringMVCSpring框架的一个模块,它提供了一个基于MVC的Web应用程序开发框架,使开发人员可以更容易地开发Web应用程序。 2. 我使用过的一些MVC提供的拦截器包括: - HandlerInterceptor:在控制器方法执行前后拦截请求。 - LocaleChangeInterceptor:用于拦截请求中的区域设置参数,并将其应用于当前线程的Locale。 - ThemeChangeInterceptor:用于拦截请求中的主题参数,并将其应用于当前线程的主题。 3. SpringMVC的调用过程: - 浏览器发送一个请求到DispatcherServlet。 - DispatcherServlet根据请求的URL找到对应的HandlerMapping,得到对应的Controller。 - HandlerAdapter调用Controller处理请求,并将处理结果返回给DispatcherServlet。 - DispatcherServlet选择一个ViewResolver来解析Controller返回的逻辑视图名。 - ViewResolver解析逻辑视图名,得到View对象。 - DispatcherServlet将模型数据传递给View,View使用模型数据渲染视图。 - 返回响应给浏览器。 4. IoC是Java基础的哪个点: IoC(Inversion of Control,控制反转)是一种设计模式,它是Java基础中面向对象编程的一部分。 5. 我对SpringMVC源码进行过一些研究,但并不是专业的开发者,所以我的理解可能不够深入。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值