Spring MVC的前世今生

区分三层架构和Spring MVC

三层架构:

  • 1. Dao数据访问层
  • 2. Service业务处理层
  • 3. Web层(J2EE的内容,一般指封装了Request,Response的)

Spring MVC:

  • 1. M:Model,一般指Entity、Pojo、Model具体的看习惯了
  • 2. V:View,一般指视图层,主要的交互种类有JSP、Freemark等
  • 3. C:Controller,Em…这个就是我们接受前端发过来请求的J2EE接收器了(我是这么认为的,一般都会有个基类BaseConbtroller去处理这个请求,之后将Request里面的参数进行封装—AJAX请求)

Spring MVC的前世

对于Java程序员Servlet这个概念可能并不陌生,对的,说到这里我就很暴躁,以前在面试的时候会跟面试官得意洋洋的说:Jsp与Servlet的关系,那个JSP有一个Jasper解析器会将JSP解析成Servlet…然后,JSP里面也可以嵌套Java代码,吧啦吧啦。。。我对自己过去的行为感到抱歉,竟然还去认真的研究了下,甚至去找到了.class文件看一下,现在接触的都输Restful风格的编程,哇真是服,前端是前端的,后端是后端的前后端完全按照规范化走 JSP么? 姥姥不亲,舅舅不爱的~ 基本上被彻底抛弃了吧,下面说重点,以前在JSP+Servlet编程中,是如何实现信息交互的

  • 1. 还是要从web.xml开始(以前偷偷查过,貌似这个文件会被Tomcat解析)
  • 2. 这个文件里面配置了N个Servlet,一般而言一个Servlet对应一个URL(想想去吧,配置太多了)
  • 3. 要增加功能,增加URL每次都要去修改配置文件,增加Servlet配置 —> 结果不言而喻,导致配置膨胀、代码膨胀
  • 4. 前面说过,后端掺杂前端代码,前端掺杂后端代码,搅屎棍界的爸爸~

Spring MVC的今生

咳咳,我是一个被Java耽搁的段子手我这无处安放的灵魂阿说到了Spring MVC我们就需要说说它的有点在哪里?我们就拿传统的JSP + Servlet做对比

  • 1.脏:前端掺杂后端,后端掺杂前端,说句不好听的,你自己写的代码,过了半个月,你自己都不知道半个月前写的什么玩意?

  • 2.乱: 为什么说它乱呢?因为需要一个方法对应一个Servlet,每一个Servlet都需要在web.xml中进行配置

  • 3.差: 耦合度极高,前端代码都掺杂里面去了,难以维护,三流程序员的标配。

个人喜欢,先阅读下源码的注释:
e2iuwQ.png

简单解释下:这是处理Http请求的,假定一个web的UI或者一个基于Http的远程服务请求,去注册中心List(我这么称呼的,好理解,后面代码会详细展现出来的)去瞅瞅,有没有关于这个请求的映射,更便于我们去处理方法与请求之间的映射与异常的处理

我说的: 在Spring中寻找是否有当前请求的映射,有的话就处理

Spring MVC的初始化

  • 1. web.xml配置了一个DispatcherServlet(启动入口,这个DispatcherServlet后面我们会把主干的功能实现出来)
    • 1). 这里面留存一个疑问: 为什么要配置DispatcherServlet以及为什么要配置如下参数

       <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>application.properties</param-value>
      </init-param>
      

这个问题我们先放在这里

  • 2.默认加载我们的IOC容器(AppliationContext)

    • 1).从上面看来,SpringMVC是依赖于IOC这个容器的,那么他们具体的细致到底是什么呢?这里继续留下一个大大的问号
  • 3.开始扫描SpringMVC的配置,一般来说就是扫描注解(新生代的我是这样子的,很少接触配置xml)、View的配置、插件(拦截器、转换器(JSON格式转换)、视图解析器),其中扫描的注解包括(Controller、RequestMapping、ResponseBody、Repository等)

  • 4.解析成一个HandlerMapping的List,主要保存了url和具体的执行方法的对应关系(这一步为了验证前三步,别急接着看,妈蛋,今天七夕,人家去约会!我特么写博客,蛋蛋的)

Spring MVC的处理流程

e2Jrad.png

先说下上面这张图

  • 1. 当一个web请求过来之后,先走 “1”,这一步进行了什么处理呢?,细节较多,先当成前端控制器,后面会有代码进行详细描述。
  • 2. HandlerMapping 是SpringMVC中完成Url到Controller映射的组件,DispatcherServlet接收Request,然后从HandlerMapping中插在处理request的Controller
  • 3. Controller处理request并返回ModelAndView对象,Controller是SpringMVC中负责处理Request的组件
  • 4. ModelAndView是封装结果视图的组件。

下次说SpringMVC的细节,今天七夕,要出去吃饭

发布了32 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_27416233/article/details/98492340
今日推荐