- MVC思想
- SpringMVC
- SpringMVC运行流程
- SpringMVC常用注解
- @Controller
- @RequestMapping
- name
- value
- path
- method
- params
- headers
- consumes / produces
- @RequestParam / @PathVariable / @RequestBody / @SessionAttributes / @ModelAttribute
MVC(Model View Controller)是一种软件设计的框架模式,它采用模型(Model)-视图(View)-控制器(controller)的方法把业务逻辑、数据与界面显示分离。把众多的业务逻辑聚集到一个部件里面
SpringMVCSpringMVC是基于java实现MVC框架模式的轻量级框架,通过分离model,view,controller,将web程序进行解耦,简化开发
SpringMVC运行流程1、用户发送请求至前端控制器DispatcherServlet,DispatcherServlet请求 HandlerMapping 查找 Handler,可以根据 xml 配置、注解进行查找。
2、HandlerMapping根据url找到具体的Handler,生成处理器对象及处理器拦截器一并返回给DispatcherServlet。
3、DispatcherServlet调用处理器适配器去执行 Handler
4、处理器适配器执行 Handler
5、Handler 执行完成后给适配器返回 ModelAndView
6、处理器适配器向前端控制器返回 ModelAndView
7、DispatcherServlet请求试图解析器去进行视图解析,根据逻辑视图名来解析真正的视图。
8、视图解析器向DispatcherServlet返回 view
9、DispatcherServlet进行视图渲染,将模型数据(在 ModelAndView 对象中)填充到 request 域
10、DispatcherServlet响应用户
上文知道SpringMVC会根据url去找处理器,而SpringMVC提供了一个很简单的定义Controller的方式就是在类上面添加@Controller,这只是告诉SpringMVC这是个Controller,找处理器需要到这些Controller里面找,所以SpringMVC会扫描包里所有@Controller注解的类,真正的处理器还是Controller里面注解了@RequestMapping的方法,所以@Controller只是标记了这个类是Controller。
@RequestMapping
@RequestMapping中一共有8个参数,我们分别来解析一下
这个属性是Spring4.1后新增,他的作用是指定映射的名称
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %> ... Get Address
转载-这边文章对name的解释非常详细,可以看看你知道@RequestMapping的name属性有什么用吗?
value指定请求的实际地址
path与value同义,path 和 value 互相引用
@RequestMapping(value=“login”)、@RequestMapping(path=“login”),这两种情况都能对login()方法进行访问
path属性支持通配符匹配:
@RequestMapping(path=“login/*”);
指定请求类型, 如GET、POST、PUT、DELETE等;
在spring4.3之后,提供了更方便的注解方式
如@GetMapping,@PostMapping,@PutMappingd等等,和method方法同义
必须包含参数名,参数对应值有没有无所谓,只要包含参数名就可以,否则无法访问
headers指定request中必须包含某些指定的header值,才能让该方法处理请求,headers中支持Spring的SpEL表达式
consumes / producesconsumes: 指定处理请求的提交内容类型(Content-Type),例如application/json, text/html;
常见的媒体格式类型如下:
text/html : HTML格式
text/plain :纯文本格式
text/xml : XML格式
image/gif :gif图片格式
image/jpeg :jpg图片格式
image/png:png图片格式
application/xhtml+xml :XHTML格式
application/xml: XML数据格式
application/atom+xml :Atom XML聚合格式
application/json: JSON数据格式
application/pdf:pdf格式
application/msword : Word文档格式
application/octet-stream : 二进制流数据(如常见的文件下载)
application/x-www-form-urlencoded : 中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)
multipart/form-data : 需要在表单中进行文件上传时,就需要使用该格式
produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回;
@RequestParam / @PathVariable / @RequestBody / @SessionAttributes / @ModelAttribute1、@RequestParam主要用于在SpringMVC后台控制层获取参数,类似一种是request.getParameter(“name”),它有三个常用参数:defaultValue = “0”, required = false, value = “isApp”;defaultValue 表示设置默认值,required 同过boolean设置是否是必须要传入的参数,value 值表示接受的传入的参数类型名字。
2、@PathVariable是uri占位符,用来获取uri template中的variable,常用于restful风格的写法
@RequestMapping("test/{id}")
public String testAntPath(@PathVariable(value = "id") Integer id) {
System.out.println("testAntPath" + id);
return OK;
}
3、@RequestBody是通过解析请求体然后映射到我们的参数,在整个SpringMVC的处理流程中,会通过HandlerMethod来代理每个Map后的controller和method,在通过反射invoke method的过程中,会解析request来获得arguments,而@RequestBody就是在解析参数的这个过程中起作用的,对于@RequestBody来说,它对应的解析器是RequestResponseBodyMethodProcessor。
该注解常用来处理Content-Type: 不是application/x-www-form-urlencoded编码的内容,例如application/json, application/xml等;
它是通过使用HandlerAdapter 配置的HttpMessageConverters来解析post data body,然后绑定到相应的bean上的。
因为配置有FormHttpMessageConverter,所以也可以用来处理 application/x-www-form-urlencoded的内容,处理完的结果放在一个MultiValueMap
4、@SessionAttributes / @ModelAttribute
@SessionAttributes:如果希望在多个请求里共用数据,可以在Controller上面加一个@SessionAttributes注解,
它会把model中对应的参数暂存到httpSession中。
@SessionAttributes只能定义在类上面
@ModelAttribute:该注解有两个用法,一个是用于方法上,一个是用于参数上;
用于方法上时: 通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;
用于参数上时: 用来通过名称对应,把相应名称的值绑定到注解的参数bean上
-------------如有错误,请及时指正--------------------



