为了账号安全,请及时绑定邮箱和手机立即绑定

百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide

标签:
Java

Spring MVC 一种 Web 开发的设计模式

实现了不同业务层面的解耦,隔离。

Model:

​ 将传输数据封装成一个完成的载体。把很多参数传成一个Model。就是一种设计模式,你也可以不封装。

View:

​ 视图,用来展示或者输出的模块(HTML、JSP、JSON、String、Swing、XML…)

Control:

​ 控制交互的一个中间组件,由它来根据用户请求分发不同任务从而得到不同的结果。

DTO,POJO 就是一个 Model

MVC :基于项目开发的设计模式。用来解决用户和后台交互的问题。

J2EE标准

JSP 页面是一个万能的组件,可以写 HTML、写 JS、写 JAVA 逻辑、写 SQL 语句

MVC 框架应运而生: Struts1、Struts2、Webwork、Spring MVC

SpringMVC: 只是 MVC 设计模式的应用典范。给 MVC 的实现制定了一套标准

M:支持将 URL 参数自动封装成一个 Object 或者 Map

V:自己只有一个默认的 template、支持扩展、自定义 View,能够自定义解析

C:做到把限制放宽了,任何一个类,都有可能是一个 Controller

Struts 对用户的要求太高了,Spring MVC 对应用户的要求几乎没有。写几个 annotation 就好了

  • DispatcherServlet
    • FrameworkServlet
      • HttpServletBean
      • ApplicationContextAware - setContextInitializers
    • FrameworkServlet - refresh() - onRefresh()
@Override
protected void onRefresh(ApplicationContext context) {
   // Strategy 策略
   initStrategies(context);
}

protected void initStrategies(ApplicationContext context) {
   // 有九个策略
   // 针对于每个用户请求,都会经过一些处理的策略之后,最终才能会有结果输出。
   // 每种策略可以自定义敢于,但是最终的结果都是一致
   // ModelAndView

   // ==========这里就是传输中的 Spring MVC 中的九大组件=========

   initMultipartResolver(context); // 文件上传解析,如果请求类型是 multipart 将通过 MultipartREsolver
   initLocaleResolver(context);// 本地化解析
   initThemeResolver(context);// 主题解析

   /** 我们自己会实现  */
   initHandlerMappings(context);// 通过 HandlerMapping,将请求映射到处理器
   /** 我们自己会实现*/
   initHandlerAdapters(context);// 通过 HandlerAdapter 继续进行多类型的参数的动态匹配

   initHandlerExceptionResolvers(context);// 如果执行过程中遇到异常,将交给 HandlerExceptionResolvers
   initRequestToViewNameTranslator(context); // 直接解析请求到视图名
   /** 我们自己会实现*/
   initViewResolvers(context);// 通过 viewResolver 解析逻辑试图到具体试图实现
   initFlashMapManager(context); // flash 映射管理器
}
请求过程:

SpringMVC请求过程

FrameworkServlet.processRequest()

  • doService()
    • DispatcherServlet.doService()

抽象方法调用子类实现,叫做模板方法模式。

MVC 的基本原理:

SpringMVC基本原理

Spring url 是可以支持正则表达式的。

Spring MVC 讨论

HandlerMapping 是模范了 Struts ActionMapping

严格地说是 Spring MVC 还支持 Ant Pattern

马哥,那你认为它能够干掉 struts 是因为它的哪一点优点呢?

主要是非 Spring MVC,获取 Bean 的方式比较麻烦

需要通过 Spring 应用上下文获取

并且对于 REST 支持,其他框架相对薄弱

Spring MVC 是 Struts 2 + JAX-RS 的混合体

JAX-RS: Java API for RESTful Web Services

微信公众号:不止极客

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消