SpringMVC_[1]执行流程和常用注解
Posted 奔跑的路奇
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringMVC_[1]执行流程和常用注解相关的知识,希望对你有一定的参考价值。
执行流程
工作流程分析
springMvc的执行流程图如下:
SpringMVC请求执行过程概述:
- 客户端请求提交到DispatcherServlet
- 前端控制器直接将请求转给处理器映射器HandleMapping
- 处理器映射器HandleMapping会根据请求,找到负责处理该请求的处理器,并将其封装为处理器执行链HandlerExecutionChina后返回给前端控制器DispatcherServlet
- 前端控制器DispatcherServlet根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器HandlerAdaptor。
- 处理器适配器HandlerAdaptor调用执行处理器Controller。
- 处理器Controller将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器HandlerAdaptor。
- 处理器适配器直接将结果返回给前端控制器DispatcherServlet。
- 前端控制器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。
- 视图解析器ViewResolver将封装了的视图View对象返回给前端控制器DispatcherServlet
- 前端控制器DispatcherServlet调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
- 前端控制器响应浏览器。
组件说明
<!-- SpringMVC核心控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
- DispatcherServle:t前端控制器,也称为中央控制器或者核心控制器。用户请求的入口控制器,DispatcherServlet 是整个流程控制的中心,由它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。SpringMVC框架提供的该核心控制器需要我们在web.xml文件中配置。
- HandlerMapping:处理器映射器 ,HandlerMapping负责根据用户请求找到 Handler 即处理器Controller。
- Handler:处理器,Handler 是继 DispatcherServlet 前端控制器的后端控制器,在DispatcherServlet 的控制下 Handler 对具体的用户请求进行处理。
- HandlAdapter:处理器适配器,通过扩展处理器适配器,支持更多类型的处理器。
- ViewResolver:视图解析器,ViewResolver 负责将处理结果生成 View 视图
常用注解
- @RequestMapping:用于处理请求 url 映射的注解,可用于类或方法上。用于类上,则表示类中的所有响应请求的方法都是以该地址作为父路径。
/**
* @RequestMapping:
* value : 表示所有请求的公共部分
* 位置:放在类的上面
*/
/**
*@RequestMapping : 请求映射
* 属性:method,表示请求的方式。它的值是RequestMethod类枚举值
* 例如表示 get请求方式,RequestMethod.GET
* post请求方式,RequestMethod.POST
*/
//指定some.do 使用get请求方式
@RequestMapping(value = "/some.do",method = RequestMethod.GET)
常用的提交方式:
- @RequestBody:注解实现接收http请求的json数据,将json转换为java对象。
- @ResponseBody:注解实现将conreoller方法返回对象转化为json对象响应给客户。
- @RequestParam:解决请求中参数名和形参名不一样的问题
/**
* (2)请求中参数名和处理器方法的形参名不一样
* @RequestParam: 解决请求中参数名和形参名不一样的问题
* 属性:value 请求中的参数名
* required 是一个boolean,默认是true
* true表示请求中必须包含此参数,没有会报错
* false表示请求中可以不存在该参数
* 位置:在处理器方法的形参定义的前面
*/
@RequestMapping(value = "/receiveParam.do")
public ModelAndView receiveParam(@RequestParam(value = "name",required = false) String name,
@RequestParam(value = "age",required = false) Integer age){
System.out.println("doSome(),name="+name+" age="+age );
最后,如果有问题,希望指正,一起进步。
以上是关于SpringMVC_[1]执行流程和常用注解的主要内容,如果未能解决你的问题,请参考以下文章
SpringMVC -- 组件解析(SpringMVC执行流程(图示文字描述)注解解析(@RequestMapping组件扫描的2种方式))