spring MVC 原理
来源:互联网 发布:云熙软件 编辑:程序博客网 时间:2024/05/23 22:25
转自:http://blog.csdn.net/zjdwhd/article/details/50763909
springmvc架构流程图:
第一步:用户发送请求到前端控制器(DispatcherServlet)
第二步:前端控制器请求HandlerMapping查找 Handler 【可以根据xml配置、注解进行查找】
第三步:处理器映射器HandlerMapping向前端控制器返回Handler
第四步:前端控制器请求处理器适配器去执行Handler
第五步:处理器适配器去执行Handler
第六步:处理器适配器执行完成后,Controller返回ModelAndView
第七步:处理器适配器向前端控制器返回ModelAndView
ModelAndView是springmvc框架的一个底层对象,包括Model和view
第八步:前端控制器请求视图解析器去进行视图解析【根据逻辑视图名解析成真正的视图(jsp)】
第九步:视图解析器向前端控制器返回View
第十步:前端控制器进行视图渲染【视图渲染即:模型数据(在ModelAndView对象中)填充到request域】
第十一步:前端控制器向用户响应结果
======================================================================================================
常用注解总结:
======================================================================================================
*** @RequestMapping(): 映射请求[为控制器指定可以处理哪些URL请求]
使用请求URL、请求方法、请求参数、请求头 映射请求,它们之间是与的关系,联合使用让请求更加精细化。
[value、method、params 、heads]
params和heads支持简单的表达式:
① param1表示请求必须包含名为param1的请求
② !param1 表示请求不能包含名为param1的请求
③ param1!= value1 表示请求包含名为param1的参数,但其值不能为
举例:
@RequestMapping(value="/delete",method=RequestMethod.POST, params="userId",heads="contentType=text/*")
@RequestMapping还支持ant风格的资源地址:
① ?匹配文件名中的一个字符
② * 匹配文件名中的任意字符
③ ** 匹配多层路径
举例:
/user/createUser??: 匹配
/user/createUseraa、/user/createUserbb等 URL
/user/*/createUser:匹配
/user/aaa/createUser、/user/bbb/createUser 等 URL
/user/**/createUser: 匹配
/user/createUser、/user/aaa/bbb/createUser 等 URL
*** @PathVariable(): 映射URL绑定的占位符
通过 @PathVariable 可以将URL中占位符参数绑定到控制器处理方法的入参中,URL中{ xxx }占位符可以通过@PathVariable("xxx")绑定到操作方法的入参中。
举例:
@RequestMapping(value="/delete/{id}")
public Stringdelete(@PathVariable("id")Integer id){
}
*** @RequestParam(): 绑定请求参数值
在处理方法入参处使用 @RequestParam 可以把请求参数传递给请求方法
value:参数名 required:是否必须。默认为 true
举例:
@RequestMapping("/get")
public Stringget(@RequestParam(value="userName",required=true) String name){
return "seccess";
}
备注:如果页面中的请求参数的名字和形参的名字一致的话,没必要用该注解。
*** @RequestHeader(): 绑定请求头的属性值
通过 @RequestHeader 即可将请求头中的属性值绑定到处理方法的入参中
举例:
@RequestMapping("/get")
public Stringget(@RequestHeader("Accept-Encoding") String encoding){
return"seccess";
}
*** @CookieValue()
使用@CookieValue 绑定请求中的Cookie值,可让处理方法入参绑定某个Cookie值
举例:
@RequestMapping("/get")
public String get(@CookieValue(value="sessionId",required=false)StringsessionId){
return “success”;
}
*** @SessionAttributes()
若希望在多个请求之间共用某个模型属性数据,则可以在控制器类上标注此注解。
标注一个@SessionAttributes, Spring MVC 将在模型中对应的属性暂存HttpSession中,@SessionAttributes除了可以通过属性名指定需要放到会话中的属性外,还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中 @SessionAttributes(types=User.class)
会将隐含模型中所有类型为User.class 的属性添加到会话中。
@SessionAttributes(value={“user1”, “user2”})
@SessionAttributes(types={User.class, Dept.class})
@SessionAttributes(value={“user1”,“user2”},types={Dept.class})
举例:
@SessionAttributes("user")
@Controller
@RequestMapping("/get")
publicString get(){
@ModelAttribute("user")
public User getUser(){
User user = new User();
user.setAge(10);
return user;
}
@ModelAttribute("/get1")
public Userget1(@ModelAttribute("user") User user){
user.setAget(22);
return"success";
}
@ModelAttribute("/get1")
public User get1(Map<Sting,Object> map,SessionStatussessionStatus){
User user =map.get("user");
user.setId(1000);
return"success";
}
}
*** @ModelAttribute()
在方法定义上使用@ModelAttribute() ,SpringMVC在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute的方法,在方法的入参前使@ModelAttribute()可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数绑定到对象中,再传入入参将方法入参对象添加到模型中。
- spring MVC --spring MVC原理
- 【Spring MVC】Spring MVC原理
- spring mvc 实现原理
- Spring MVC框架原理
- spring MVC原理
- spring mvc工作原理
- Spring MVC 原理
- spring mvc工作原理
- Spring MVC工作原理
- spring MVC原理
- Spring 系列:MVC原理
- spring mvc工作原理
- Spring MVC 3.0原理
- spring MVC原理
- spring MVC原理
- Spring MVC 原理
- spring MVC原理
- Spring mvc 原理浅析
- u-boot i2c 的调试
- 等着涉嫌醉驾的郎永淳的会是什么?
- Android 如何在设置字体大小不统一的情况下,设置全局字体大小
- 【CCF】201604_2俄罗斯方块
- scikit-learn 中文文档-神经网络模型-监督学习|ApacheCN
- spring MVC 原理
- 静默推送
- vue如何更改默认端口号8080为指定端口
- 云监控的应用及概览
- 详解C中volatile关键字
- eclipse 插件安装
- 11.23第十六课
- MVC设计模式笔记
- oracle字段mybatis怎么映射为boolean