Spring MVC理论篇

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响应用户。

Spring MVC 流程图

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:是否必须有请求体,默认值是true

public 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"; 
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。