SpringMVC 执行流程以及常用注解(详细小白板)

目录

SpringMVC 执行流程

SpringMVC 框架

Spring MVC优点

SpringMVC 主要组件

具体流程:

 口语化描述SpringMVC的执行流程:

Spring MVC 常用注解以及注解实现

@Controller

@RequestMapping

@PostMapping

@Resource

@Autowired

@PathVariable

@RequestParam

@ResponseBody

@RequestBody

@RestController

@ModelAttribute

@SessionAttributes

@ControllerAdvice

@Exceptionhandler


SpringMVC 执行流程

SpringMVC 框架

SpringMVC 是一个基于 Java 的实现了 MVC 设计模式的请求驱动类型的轻量级 Web 框架,通过把 Model,View,Controller 分离,将 Web 层进行职责解耦,把复杂的 Web 应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。 简而言之,SpringMVC 就是将我们原来开发在 Servlet 中的代码拆分了,一部分由 SpringMVC 完成,一部分由我们自己完成,Spring MVC 角色划分清晰,分工明细,并且和 Spring 框架无缝结合。Spring MVC 是当今业界最主流的 Web 开发框架,以及最热门的开发技能。
 

Spring MVC优点

  • 清晰地角色划分,Spring MVC 在 Model、View 和 Controller 方面提供了一个非常清晰的角色划分,这 3 个方面真正是各司其职,各负其责
  • 灵活的配置功能
  • 与 Spring 框架无缝集成

  • 提供了大量的控制器接口和实现类,开发者可以使用 Spring 提供的控制器实现类,也可以自己实现控制器接口。

  • 真正做到与 View 层的实现无关。它不会强制开发者使用 JSP,可以根据项目需求使用 Velocity、FreeMarker 等技术。

SpringMVC 主要组件

前端控制器 DispatcherServlet:接收请求、响应结果,相当于转发器,有了 DispatcherServlet 就减少了其它组件之间的耦合度。

处理器映射器 HandlerMapping:根据请求的 URL 来查找 Handler

处理器适配器 HandlerAdapter:负责执行 Handler。

处理器 Handler:处理业务逻辑的 Java 类(我们自己写的 Controller 类)。

视图解析器 ViewResolver:进行视图的解析,根据视图逻辑名将 ModelAndView 解析成真正的视图(view) 。

视图 View:View 是一个接口, 它的实现类支持不同的视图类型,如 jsp,freemarker, pdf 等。

其中最关键的是DispatcherServlet,它是整个流程的控制中心,所有的请求都要经过它来处理

在这里插入图片描述

具体流程:

  • 第一步:发起请求到前端控制器(DispatcherServlet)
  • 第二步:前端控制器请求处理器映射器HandlerMapping查找 Handler (可以根据xml配置、注解进行查找)
  • 第三步:处理器映射器HandlerMapping向前端控制器返回Handler,HandlerMapping会把请求映射为一个执行链(HandlerExecutionChain)对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略
  • 第四步:前端控制器调用处理器适配器去执行Handler
  • 第五步:处理器适配器HandlerAdapter将会根据适配的结果去执行Handler
  • 第六步:Handler执行完成给适配器返回ModelAndView
  • 第七步:处理器适配器向前端控制器返回ModelAndView (ModelAndView是springmvc框架的一个底层对象,包括 Model和view)
  • 第八步:前端控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp)),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可
  • 第九步:视图解析器向前端控制器返回View
  • 第十步:前端控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)
  • 第十一步:前端控制器向用户响应结果

 口语化描述SpringMVC的执行流程:

  1. 客户端发送请求到DispatcherServlet,DispatcherServlet是前置控制器,所有请求都会经过它。

  2. DispatcherServlet根据请求的URL调用HandlerMapping,HandlerMapping会根据请求的URL找到对应的处理器(Controller)。

  3. HandlerAdapter是适配器模式,它将找到的处理器(Controller)包装成适配器,以便DispatcherServlet能够调用处理器(Controller)。

  4. HandlerAdapter将处理器(Controller)交给DispatcherServlet。

  5. DispatcherServlet调用处理器(Controller)来处理请求,并返回ModelAndView对象,ModelAndView是SpringMVC框架中的一个对象,它包含处理结果和视图信息。

  6. DispatcherServlet将ModelAndView对象传递给ViewResolver视图解析器,ViewResolver将根据视图名称解析出View对象。

  7. ViewResolver将View对象返回给DispatcherServlet。

  8. DispatcherServlet将ModelAndView对象传递给View对象,View对象将Model数据渲染成HTML等格式的响应内容。

  9. View对象将响应内容返回给DispatcherServlet。

  10. DispatcherServlet将响应内容返回给客户端。

Spring MVC 常用注解以及注解实现

@Controller

用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象,分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。单单使用@Controller 标记在一个类上还不能真正意义上的说它就是SpringMVC 的一个控制器类,因为这个时候Spring 还不认识它。

@RequestMapping


是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。RequestMapping注解有六个属性:value: 指定请求的实际地址method: 指定请求的method类型, GET、POST、PUT、DELETE等;consumes:指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;params: 指定request中必须包含某些参数值是,才让该方法处理。headers: 指定request中必须包含某些指定的header值,才能让该方法处理请求。

@PostMapping


Spring MVC新特性提供了对Restful风格的支持。从命名约定我们可以看到每个注释都是为了处理各自的传入请求方法类型,即@GetMapping用于处理请求方法的GET类型,@ PostMapping用于处理请求方法的POST类型等。如果我们想使用传统的@RequestMapping注释实现URL处理程序,那么它应该是这样的:@RequestMapping(value = “/get/{id}”, method = RequestMethod.GET)新方法可以简化为:@GetMapping(“/get/{id}”)

@Resource


做bean的注入时使用,可以写在字段和setter方法上,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。默认按照ByName自动注入。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

@Autowired


做bean的注入时使用,可以写在字段和setter方法上,为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;它是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。

@PathVariable


用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数。@RequestMapping(value=“/users/{userId}/topics/{topicId}”)public String test( @PathVariable(value=“userId”) int userId, @PathVariable(value=“topicId”) int topicId) 如请求的URL为“控制器URL/users/123/topics/456”,则自动将URL中模板变量{userId}和{topicId}绑定到通过@PathVariable注解的同名参数上,即入参后userId=123、topicId=456。

@RequestParam


@requestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 铜过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型。

@ResponseBody


表示该方法的返回结果直接写入 HTTP response body 中,一般在异步获取数据时使用【也就是AJAX】。比如异步获取 json 数据,加上 @ResponseBody 后,会直接返回 json 数据。

@RequestBody


是作用在形参列表上,用于将前台发送过来固定格式的数据【xml 格式或者 json等】封装为对应的 JavaBean 对象,封装时使用到的一个对象是系统默认配置的 HttpMessageConverter进行解析,然后封装到形参上。

@RestController


作用等同于@Controller + @ResponseBody

@ModelAttribute


注解用于将方法的参数或方法的返回值作为Model的属性加入到Model中,然后Spring框架自会将这个Model传递给ViewResolver。Model的生命周期只有一个http请求的处理过程,请求处理完后,Model就销毁了。

@SessionAttributes


注解只用作用在 类 上,作用是将指定的 Model 的键值对保存在 session 中。可以让其他请求共用 session 中的键值对。SessionAttribute有两个参数:  
String[] value:要保存到session中的参数名称  
Class[] typtes:要保存的参数的类型,和value中顺序要对应上所以可以这样写:@SessionAttributes(types = {User.class,Dept.class},value={“attr1”,”attr2”})

@ControllerAdvice

@ControllerAdvice,是Spring3.2提供的新注解,它是一个Controller增强器,可对controller中被 @RequestMapping注解的方法加一些逻辑处理。最常用的就是异常处理,需要配合@ExceptionHandler使用。

@Exceptionhandler

可以用来统一处理方法抛出的异常

简单

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC的执行流程主要涉及以下几个步骤: 1. 客户端发送请求:浏览器或其他客户端向服务器发送HTTP请求。 2. 前端控制器接收请求:DispatcherServlet作为前端控制器接收到客户端的请求。 3. 处理器映射器进行映射:DispatcherServlet调用处理器映射器(HandlerMapping)来进行URL与处理器的映射,确定处理该请求的Controller。 4. 处理器适配器调用处理器:DispatcherServlet调用处理器适配器(HandlerAdapter)来执行Controller中的相应方法,并传递相应的请求参数。 5. 处理器执行业务逻辑:Controller中的方法执行业务逻辑,并返回一个ModelAndView对象。 6. 视图解析器解析视图:DispatcherServlet调用视图解析器(ViewResolver)来解析Controller返回的视图名,得到具体的视图对象。 7. 视图渲染:视图对象负责渲染最终的视图结果,将数据填充到视图中,并生成最终的HTML响应。 8. 响应返回给客户端:DispatcherServlet将最终生成的HTML响应返回给客户端。 在这个流程中,各个组件的作用如下: - DispatcherServlet:作为前端控制器,接收客户端请求,并将请求转发给对应的处理器。 - HandlerMapping:处理器映射器,根据请求的URL确定处理该请求的Controller。 - HandlerAdapter:处理器适配器,根据Controller的类型调用相应的方法来执行业务逻辑。 - Controller:处理器,负责处理业务逻辑,通常是一个POJO类。 - ModelAndView:存储处理结果数据和视图的对象。 - ViewResolver:视图解析器,根据视图名解析出具体的视图对象。 - View:负责渲染最终的视图结果,通常是一个JSP或HTML页面。 这些组件协同工作,完成了Spring MVC的执行流程

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值