1、Spring MVC简介
Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦,把复杂的web应用分成逻辑清晰的几部分,简化开发,减少出错,方便组内开发人员之间的配合。
2、Spring MVC流程
(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。
3、Spring MVC怎么样设定重定向和转发的?
(1)转发:在返回值前面加"forward:",譬如"forward:user.do?name=method4"
(2)重定向:在返回值前面加"redirect:",譬如"redirect:http://www.baidu.com"
4、常用注解(参考代码:基于maven的SSM整合权限管理系统)
RequestParam注解
1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
2. 属性 :
(1) value:请求参数中的名称
(2) required:请求参数中是否必须提供此参数,默认值是true,必须提供public String sayHello(@RequestParam(value="username", required=false) String name) { ... }
RequestBody注解
1. 作用:用于获取请求体的内容(注意:get方法不可以)
2. 属性
(1) required:是否必须有请求体,默认值是truepublic String sayHello(@RequestBody User user){ ... }
PathVariable注解
1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
2. 属性
(1) value:指定url中的占位符名称
3. Restful风格的URL
1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
2. restful风格的URL优点@RequestMapping(path="/hello/{id}")
public String sayHello(@PathVariable(value="id") String id) { ... }
RequestHeader注解
1. 作用:获取指定请求头的值
2. 属性
(1) value:请求头的名称public String sayHello(@RequestHeader(value="Accept") String header) { ... }
CookieValue注解
1. 作用:用于获取指定cookie的名称的值
2. 属性
(1)value:cookie的名称public String sayHello(@CookieValue(value="JSESSIONID") String cookieValue){ ... }
ModelAttribute注解
1. 作用
(1) 出现在方法上:表示当前方法会在控制器方法执行前先执行。
(2). 出现在参数上:获取指定的数据给参数赋值。
2. 应用场景
(1) 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据1)修饰的方法有返回值
@ModelAttribute
public User showUser(String name){
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
return user;
}2)修饰的方法没有返回值
/**
*作用在方法,先执行
*@param name
*@return
*/
@ModelAttribute
public void showUser(String name, Map<String, User> map){
// 模拟从数据库中查询对象
User user = new User();
user.setName("哈哈");
user.setPassword("123");
user.setMoney(100d);
map.put("abc",user);
}/**
*修改用户的方法
*@param cookieValue
*@return
*/
@RequestMapping(path="/updateUser")
public String updateUser(@ModelAttribute(value="abc") User user){
return "success";
}