springMVC的生命周期详解

  

springMVC的生命周期,听到的时候都没有反应过来,springMVC还有生命周期?现在看来生命周期就是springMVC的流程,springMVC是MVC思想的一种实现,下面看一下MVC思想的流程图:

  

 springMVC的生命周期详解

  

MVC的核心思想如上图,那么springMVC是如何实现MVC的思想的呢?

  

 springMVC的生命周期详解

  

第一步:发起请求到前端控制器(DispatcherServlet)
  

  

第二步:前端控制器请求HandlerMapping(处理器映射器)查找处理
  

  

可以根据xml配置,注解进行查找
  

  

第三步:处理器映射器HandlerMapping向前端控制器返回处理
  

  

第四步:前端控制器调用处理器适配器去执行处理
  

  

第五步:处理器适配器去执行处理
  

  

第六步:处理程序执行完成给适配器返回ModelAndView
  

  

第七步:处理器适配器向前端控制器返回ModelAndView
  

  

ModelAndView是springmvc框架的一个底层对象,包括模型和视图
  

  

第八步:前端控制器请求视图解析器去进行视图解析
  

  

根据逻辑视图名解析成真正的视图(jsp)
  

  

第九步:视图解析器向前端控制器返回视图
  

  

第十步:前端控制器进行视图渲染
  

  

视图渲染将模型数据(在ModelAndView对象中)填充到请求域
  

  

第十一步:前端控制器向用户响应结果

  

代码示例

  

(1)在web - inf/web . xml中加入如下代码:

        & lt; servlet>   & lt; servlet-name> dispatcherServlet   & lt; servlet-class> org.springframework.web.servlet.DispatcherServlet   & lt; init-param>   & lt; param-name> contextConfigLocation   & lt; param-value>   classpath *: spring-servlet.xml   & lt;/param-value>   & lt;/init-param>   & lt; load-on-startup> 1 & lt;/load-on-startup>   & lt;/servlet>      & lt; servlet-mapping>   & lt; servlet-name> dispatcherServlet   & lt; url-pattern> * .html   & lt;/servlet-mapping>      

上述的配置的就是前端控制器DispatcherServlet,在servlet映射配置了* . html,意味着所有以. html结尾的请求多会通过这个servlet。当DispatcherServlet启动时,会默认在网络信息目录下查找一个spring-servlet.xml的配置文件,上面我们通过显示指定了这个文件的位置,即在类路径底下的spring-servlet.xml。如果我们没有指定配置文件的名称春天会在web应用的- inf文件夹下寻找名为[servlet-name] -servlet.xml的配置文件如dispatcher-servlet。xml
  

  

(2)在类路径底下添加spring-servlet.xml文件

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;豆类xmlns=" http://www.springframework.org/schema/beans "比;   & lt;上下文:component-scan基础包=" com.pango.spring.helloworld。控制器”/比;   & lt; bean id=皏iewResolver”类=皁rg.springframework.web.servlet.view.UrlBasedViewResolver”比;   & lt;属性名=" viewClass " value=" https://www.yisu.com/zixun/org.springframework.web.servlet.view.JstlView "/比;   & lt;属性名="前缀" value=" https://www.yisu.com/WEB-INF/jsp/"/比;   & lt;属性名="后缀" value=" https://www.yisu.com/zixun/.jsp "/比;   & lt;/bean>   & lt;/beans>之前      

上面这个文件,我们定义了一个上下文标签,这样的标签定义了以后,当春天在启动时,会加载com.pango.spring.helloworld。控制器这个包下及子包下的所有的组件(这是包的自动扫描机制,即弹簧会将标有@ controller @ component等类加载到春容器管理中)。

  

后面配置了bean标签,ViewResolver是一个试图解析器,就是springMVC生命周期中的第五步,当我们从后端控制器中返回的视图时,前端控制器就根据这一段配置来返回一个具体的视图,如后端控制返回的是一个你好,根据上面的配置,最后前端控制器会组并成这样的一个址:/web - inf/jsp/hello.jsp,然后从/web - inf/jsp/这个目录下面查找一个你好。jsp返回客户端。
  

  

(3)在包底下写一个HelloWorldController的类

        @ controller   公开课HelloWorldController {   @RequestMapping (value=" https://www.yisu.com/hello ")   公共字符串sayHello (ModelMap ModelMap) {   modelMap。把(“sayHello”、“hello world”);   返回"/hello”;   }   }

springMVC的生命周期详解