SpringMVC的执行流程

SpringMVC执行流程:

  1. 首先用户发送请求,请求被SpringMvc前端控制器(DispatherServlet)捕获;
  2. 前端控制器(DispatherServlet)对请求URL解析获取请求URI,根据URI, 调用HandlerMapping;
  3. 前端控制器(DispatherServlet)获得返回的HandlerExecutionChain(包括Handler对象以及Handler对象对应的拦截器);
  4. DispatcherServlet 根据获得的HandlerExecutionChain,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法);
  5. HandlerAdapter根据请求的Handler适配并执行对应的Handler;HandlerAdapter(提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据配置,Spring将做一些额外的工作:

    HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息。
    数据转换:对请求消息进行数据转换。如String转换成Integer、Double等数据格式化:
    数据格式化。 如将字符串转换成格式化数字或格式化日期等
    数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中)

  6. Handler执行完毕,返回一个ModelAndView(即模型和视图)给HandlerAdaptor
  7. HandlerAdaptor适配器将执行结果ModelAndView返回给前端控制器。
  8. 前端控制器接收到ModelAndView后,请求对应的视图解析器。
  9. 视图解析器解析ModelAndView后返回对应View;
  10. 渲染视图并返回渲染后的视图给前端控制器。

@Controller基本了解

org.springframework.stereotype.Controller

该注解类型用于指示Spring类的实例是一个控制器,其注解形式为@Controller。该注解在使用时不需要再实现Controller接口,只需要将@Controller注解加入到控制器类上,然后通过Spring的扫描机制找到标注了该注解的控制器即可。

在SpringMVC 中,控制器Controller 处在第5和第6环节负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示。在SpringMVC 中提供了一个非常简便的定义Controller 的方法,你无需继承特定的类或实现特定的接口,只需使用@Controller 标记一个类是Controller ,然后使用@RequestMapping 和@RequestParam 等一些注解用以定义URL 请求和Controller 方法之间的映射,这样的Controller 就能被外界访问到。此外Controller 不会直接依赖于HttpServletRequest 和HttpServletResponse 等HttpServlet 对象,它们可以通过Controller 的方法参数灵活的获取到。

Spring通过@Controller注解找到对应的控制器类后,还需要知道控制器内部对每个请求是如何处理的,这就需要使用@RequesteMapping注解类型,它用于映射一个请求或一个方法。使用时可以标注在一个方法或者一个注解。

示例:

@Controller
public class MyController {@RequestMapping ( "/showView" )public ModelAndView showView() {ModelAndView modelAndView = new ModelAndView();modelAndView.setViewName( "viewName" );modelAndView.addObject( " 需要放到 model 中的属性名称 " , " 对应的属性值,它是一个对象 " );return modelAndView;}} 

在上面的示例中,@Controller 是标记在类MyController 上面的,所以类MyController 就是一个SpringMVC Controller 对象了,然后使用@RequestMapping(“/showView”) 标记在Controller 方法上,表示当请求/showView.do 的时候访问的是MyController 的showView 方法,该方法返回了一个包括Model 和View 的ModelAndView 对象。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package org.springframework.stereotype;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {@AliasFor(annotation = Component.class)String value() default "";
}

@Controller相关推荐

  1. go系列(5)- beego自己写controller

    前边的系列文章已经讲述了如何安装环境, beego的处理逻辑都是在Controller里面完成的,下面就写一个最简单的Controller. 我们在写自己的controller的时候,一定要继承bee ...

  2. @Controller和@RestController的区别?

    @RestController注解相当于@ResponseBody + @Controller合在一起的作用 1) 如果只是使用@RestController注解Controller,则Control ...

  3. 关于Page翻页效果--Page View Controller

    Page View Controllers 你使用一个page view controller用page by page的方式来展示内容.一个page view controller管理一个self- ...

  4. mvc ajax提交html标签,asp.net-mvc – 如何使用ajax get或post在带有参数的mvc中将数据从View传递到Controller...

    我试图使用ajax将数据从View传递到Controller Action Method,如下所示: – 我有一个用户的Membership实例,我从另一个控制器传入这个视图,使用的视图有点像这个Vi ...

  5. spring 两次进入拦截器_4.SpringBoot 拦截器Fliter,Interceptor,Controller……

    在项目的开发中,在某些情况下,我们需要对客户端发出的请求进行拦截,常用的API拦截方式有Fliter,Interceptor,ControllerAdvice以及Aspect. 上面的图是Spring ...

  6. gvgai框架搭建及controller编写

    gvgai框架搭建及controller编写 gvgai框架搭建 controller编写 gvgai框架搭建 gvgai官网:http://www.gvgai.net/ 框架下载:http://ww ...

  7. Animation Override Controller动画重载器

    假设游戏有很多个小人, 每一个人有2种动画站立,跑.  在通常情况下每一个人物都需要一个动画控制器. 有没有想过定义一个动画控制器 无须在定义全新的动画充值器实现每一个小人都播放自己的动画呢?没错An ...

  8. Ext.app.controller的refs

    简 单来说,就是4.0建议的MVC中controller引用组件的一种方式,selector中设置组件,可以用id.classname,但推荐用 ComponentQuery("组件检索&q ...

  9. java注解返回不同消息,Spring MVC Controller中的一个读入和返回都是JSON的方法如何获取javax.validation注解的异常信息...

    Spring MVC Controller中的一个读入和返回都是JSON的方法怎么获取javax.validation注解的错误信息? 本帖最后由 LonelyCoder2012 于 2014-03- ...

  10. controller不跳转页面的几个原因_光知道SpringBoot,不用thymeleaf就太不对了

    之前的时候,我为了演示Linux配置提交项目执行环境,简单的整理了一下springboot得相关内容,但是在实际的开发过程中,SpringBoot得使用可不仅仅就是这一点点遍历而已,在SpringBo ...

最新文章

  1. 用stm32f10x建立新的工程重要步骤
  2. 最近做了一个博客 玩玩而已 运城搜搜 www.lenovoyh.com
  3. Asp.net Mvc问题索引
  4. Perl、PHP、Python、Java和Ruby的比较(来自知乎)
  5. SimpleDateFormat使用详解——日期、字符串应用
  6. php 文章浏览量 缓存,WordPress缓存文章浏览量访问不自动增加怎么办?WordPress缓存导致文章阅读数点赞数不更新...
  7. 话说关于 ZooKeeper 方面,面试有什么可问的啊?​
  8. IT专业沦为新时代农民工?为什么你身边的人都不让你报计算机专业?
  9. Give root password for maintenance (Or press Control-D to continue)
  10. python基于Flask构建Web服务,解决Flask数据请求中的跨域问题
  11. python写扫雷脚本_利用Python实现自动扫雷小脚本
  12. 计算机杀病毒软件的应用有哪些,电脑杀蠕虫病毒软件有哪些
  13. kali扫描内网ip_kali 局域网嗅探
  14. 云盘+Git GUI实现云盘文件版本控制
  15. android+动态隐藏图标,2018安卓手机怎么隐藏图标 进入隐藏应用界面
  16. 2017年sfdc工作总结_Schema Builder
  17. 5G室内覆盖面临四大挑战,如何破?
  18. 论文投稿指南——中文核心期刊推荐(化学)
  19. 科普:维基百科与其创始人
  20. HDMI 数据包简析

热门文章

  1. 插入排序算法(insertion-sort)
  2. 浅读《构建之法:现代软件工程》有感
  3. 通过数据库方式访问excel 2007及其以后(xlsx)文件的连接字符串
  4. 李炎恢的课程中心(JQUERY视频)
  5. 三、java语法基础
  6. 代码生成器集合(整理)
  7. ValueError: I/O operation on closed file 解决办法
  8. python爬取今日热榜数据到txt文件
  9. WSL2构建android10+kernel源码适配pixel
  10. Android7.0以上增加(/system/lib/libtest.so)系统库文件