springMVC执行流程——SSM框架

Servlet执行流程

springmvc技术的源头servlet,要了解springmvc必须先了解HttpServlet的执行过程,servlet是程序粘合剂,将前端的发送的信息和后端业务联系起来。一次典型的web请求执行过程。

springMVC执行流程——SSM框架_第1张图片
传统的servlet主要存在问题

  1. 程序员必须熟悉HTTP协议,servlet接口是根据http协议特点进行定义,因此使用者对http协议特点不是特别熟悉,都会碰到或多或少令人迷惑的问题
  2. http协议传输都是文本形式,web容器解析后也是文本类型,有些数据类型(如:数字、日期等)需要根据实际情况进行转化,如果页面传送的信息非常多,就需要做大量类型转化,工作没有什么技术含量,是个体力活而且很容易导致程序错误
  3. 浏览器不仅仅显示文字,还是包括图片、视频等多媒体的显示。资源的不同就会导致http响应报文的差别,如果我们使用servlet开发就要根据资源的不同在java程序里用硬编码的形式处理,这样的程序很难复用,而且如果程序员对某种资源的处理理解不到位,就会导致问题的出现

SpringMVC执行流程

SpringMVC的核心是DispatcherServlet,它的功能类似servlet,完成与web端通讯,DispatcherServlet是SpringMVC框架中唯一一个完成HttpServlet功能的,是整个web系统的调度站,此时DispatcherServlet类似设计模式中介者模式,同时也是一个单例模式,即每个系统只有一个实例。同时封装servlet底层的一系列操作,简化了开发者的使用。其执行过程如下图所示
springMVC执行流程——SSM框架_第2张图片
上图来源于https://blog.csdn.net/zero__007/article/details/88650174

DispatcherServlet工作流程:

  1. tomcat 启动,对 DispatcherServlet 进行实例化,调用它的 init() 方法进行初始化,具体内容包括对 web.xml 中初始化参数的加载;对进行组件的初始化。
  2. tomcat接收到请求后,将此请求转交给DispatcherServlet 进行处理,DispatcherServlet根据URL在HandlerMapping实例中寻找合适的Handler,将handler对象及其拦截器组成一个叫作HandlerExecutionChain的对象。
  3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter,提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller),执行完成得到 ModelAndView。
  4. 利用 ViewResolver 将 ModelAndView 解析成 View,然后 View 会调用 render() 方法再根据 ModelAndView 中的数据渲染出页面
  5. 完成一次完成的请求

SpringMVC和SpringIOC容器无缝集成,SpringMVC 中提供了一个非常简便的定义Controller 的方法,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等注解用以定义URL请求和Controller方法之间的映射,可以灵活的使用Controller 的方法参数灵活的获取到前端传入的数据,将开发人员的精力更加关注具体的业务实现。

SpringMVC常用注解

@Controller:标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象。
@RestController:Rest风格控制器,Spring4之后加入的注解,@RestController替代@Controller就不需要再配置@ResponseBody,默认返回json格式
@RequestMapping:定义控制器指定可以处理那些URL、
@RequestBody:接收的参数是来自requestBody中,即请求体。可以用于处理非 Content-Type: application/x-www-form-urlencoded编码格式的数据,比如:application/json、application/xml等类型的数据.使用注解@RequestBody可以将body里面所有的json数据传到后端,由后端再进行解析。
@RequestParam:在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法,@RequestParam用来处理 Content-Type 为 application/x-www-form-urlencoded 编码的内容。RequestParam可以接受简单类型的属性,也可以接受对象类型。@RequestParam也可用于其它类型的请求,例如:POST、DELETE等请求。Content-Type 为application/json时,不建议使用@RequestParam进行接收,推荐使用@RequestBody
@PathVariable:绑定 URL 占位符到入参
@ResponseBody:注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区

你可能感兴趣的:(SSM框架,java,spring)