Spring MVC 笔记之:工作流程

遇到过的问题

总结知识点

我个人了解一样东西习惯先从大概上搞清楚它是怎么回事,它的体系结构是怎样的,它的运作流程是怎样的入手。不弄清楚这些总感觉前后左右无法产生联系,知识点总是孤立的,总有一种此路不通的感觉,强迫症了。Orz...
因此先将Spring MVC的工作流程梳理了一下,以下仅是一个刚学习者的的个人的初步理解,部分内容可能存在出于理清、归类的需要而产生的个人猜测,待我理解更深入了再来更新此文章,希望在此之前没人看到,没人看到,哈哈。。
如有错误欢迎指出,非常感谢。


Spring MVC概貌:
Sping MVC概览

其中1 、2、3、4按照次序执行。下面将依据这张图,举例梳理一次最简单的请求的大概流程


HTTP Request
 <servlet-mapping>
      <servlet-name>HelloWeb</servlet-name>
      <url-pattern>*.jsp</url-pattern>
 </servlet-mapping>
  • 然后请求被转发到DispatcherServlet:
<servlet>
      <servlet-name>HelloWeb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <load-on-startup>1</load-on-startup>
</servlet>

DispatcherServlet

下面的四个工作流程都归DispatcherServlet来调度


1、HandlerMapping

HandlerMapping开始工作:根据映射配置找到dispatcher

  • servlet-mapping映射到的HelloWeb确定,下一步将要去同级目录下的HelloWeb-servlet.xml文件中去找更多的配置
  • DispatcherServlet查找到HelloWeb-servlet.xml中的<context:component-scan base-package="com.tutorialspoint">,将开始从这个包下面去寻找加了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中的<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">找到配置的ViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
</bean>

3、ViewResolver

下面ViewResolver开始工作

  • Controller中的处理结果中,方法返回了一个字符串"hello",根据规则,在"hello"上加前缀(prefix)"/WEB-INF/jsp/"和后缀(suffix)".jsp",拼成"/WEB-INF/jsp/hello.jsp"
  • 根据此路径,找到对应的jsp文件:
<html>
   <head>
   <title>Hello Spring MVC</title>
   </head>
   <body>
   <h2>${message}</h2>
   </body>
</html>

4、View

View开始工作了:创建JSP页面,并将之前Spring在Controller中传递给hello()方法的参数message取出来,传递到页面的${message}中。


HTTP Response

DispatcherServlet将渲染好的View返回给浏览器


至此,一次请求-响应完成。


Reference:
Spring - MVC Framework Overview

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,283评论 6 342
  • 1.Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spri...
    七弦桐语阅读 11,999评论 2 38
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,680评论 19 139
  • 前言 对于Spring MVC项目搭建相信大家按照网上教程来做基本都会,但更多时候我们应该多问几个为什么,多思考实...
    九风萍舟阅读 2,835评论 0 12
  • 学习资料源:慕课网 - Spring MVC起步 内容概要 一、前端控制器(Front Controller) 二...
    拾壹北阅读 2,086评论 0 22

友情链接更多精彩内容