Spring|Spring MVC 笔记之(工作流程)

遇到过的问题

  • mysql无法修改密码
  • sql文件执行里面的`被我写成了'()
  • 启动tomcat500
  • 其他照着教程做却无法运行起来的问题(试过了2次)
    • Java springmvc web项目,基于maven的hello world入门级项目使用IntelliJ IDEA 2017版本)
    • 开源中国的系列教程
总结知识点 我个人了解一样东西习惯先从大概上搞清楚它是怎么回事,它的体系结构是怎样的,它的运作流程是怎样的入手。不弄清楚这些总感觉前后左右无法产生联系,知识点总是孤立的,总有一种此路不通的感觉,强迫症了。Orz...
因此先将Spring MVC的工作流程梳理了一下,以下仅是一个刚学习者的的个人的初步理解,部分内容可能存在出于理清、归类的需要而产生的个人猜测,待我理解更深入了再来更新此文章,希望在此之前没人看到,没人看到,哈哈。。
如有错误欢迎指出,非常感谢。
Spring MVC概貌: Spring|Spring MVC 笔记之(工作流程)
文章图片
Sping MVC概览
其中1 、2、3、4按照次序执行。下面将依据这张图,举例梳理一次最简单的请求的大概流程
HTTP Request
  • 浏览器发起请求:http://localhost:8080/HelloWeb/hello.jsp
  • 根据web.xml配置,通过*.jsp找到HelloWeb这个servlet-mapping
HelloWeb *.jsp

  • 然后请求被转发到DispatcherServlet:
HelloWeborg.springframework.web.servlet.DispatcherServlet1

DispatcherServlet 下面的四个工作流程都归DispatcherServlet来调度
1、HandlerMapping HandlerMapping开始工作:根据映射配置找到dispatcher
  • servlet-mapping映射到的HelloWeb确定,下一步将要去同级目录下的HelloWeb-servlet.xml文件中去找更多的配置
  • DispatcherServlet查找到HelloWeb-servlet.xml中的,将开始从这个包下面去寻找加了Spring注解@Controller的类来处理这个请求
  • 找到了一个这样的类:
@Controller @RequestMapping("/hello") public class HelloController{ @RequestMapping(method = RequestMethod.GET) public String printHello(ModelMap model) { model.addAttribute("message", "Hello Spring MVC Framework!"); return "hello"; }}

2、Controller 到这一步,Controller开始工作了,可以看到类名上加了 @Controller注解,以及一个@RequestMapping注解,这个注解表明,所有的/hello请求都在这里处理
  • 其中方法printHello()返回了字符串"hello",参数中的ModelMap是Spring框架传递过来给你加处理,以后是要被传递到view中用来渲染的。
  • Spring框架定位到HelloWeb-servlet.xml中的找到配置的ViewResolver

3、ViewResolver 下面ViewResolver开始工作
  • Controller中的处理结果中,方法返回了一个字符串"hello",根据规则,在"hello"上加前缀(prefix)"/WEB-INF/jsp/"和后缀(suffix)".jsp",拼成"/WEB-INF/jsp/hello.jsp"
  • 根据此路径,找到对应的jsp文件:
Hello Spring MVC - 锐客网 ${message}

4、View View开始工作了:创建JSP页面,并将之前Spring在Controller中传递给hello()方法的参数message取出来,传递到页面的${message}中。
HTTP Response 【Spring|Spring MVC 笔记之(工作流程)】DispatcherServlet将渲染好的View返回给浏览器
至此,一次请求-响应完成。
Reference:
Spring - MVC Framework Overview

    推荐阅读