Spring MVC学习 (一)
1. 概念
1.1 三层架构
C/S架构:客户端/服务端架构
B/S架构:浏览器/服务端架构
服务器端三层架构
1.2 MVC模型
- M model: 模型 (javaBean)
- V View: 视图 (JSP)
- C Controller: 控制器 (servlet)
1.3 Spring MVC
概念:
基于java的实现MVC设计模型的请求驱动类型的轻量级Web框架 其他的(structs2)
通过一套注解,让一个简单的Java类成为处理请求的控制器, 支持RESTful编程风格
优势:
- 清晰的角色划分: 前端控制器、请求到处理映射、 处理器适配器 。。
- 分工明确, 拓展灵活
- 等等
2. 入门程序
2.1 流程
启动服务器, 加载配置文件
a. DispacherServlet对象创建
b. 加载springmvc.xml 配置文件
c. 创建controller对象
发送请求, 后台处理请求
a. 通过超链接发送请求
b. 执行RequestMapping映射的方法
c. 返回字符串
d. 视图解析器根据该字符串找到跳转页面
基于组件的执行流程
2.2 @RequestMapping
作用: 用于简历请求URL和处理请求方法之间的对应关系
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping
注解参数:
- path: 指定超链接路径
- value: 等同于path
- method: 请求方法(get、post)
- params: 指定限制请求参数的条件(该请求必须带有指定参数)
- headers: 发送的请求中必须包含该请求头
3. 请求参数的绑定
3.1 请求参数绑定说明
- 绑定机制
要求表单的name和参数的名称相同
- 支持的数据类型
基本数据类型和字符串
实体类型
集合类型
- 解决中文乱码
a. 增加tomcat vm option: -Dfile.encoding=UTF-8
b. 增加过滤器
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <!--强制使用Encoding设置的编码格式--> <param-name>forceEncoding</param-name> <param-value>true</param-value></init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
3.2 集合属性数据
- list
list0: <input type="text" name="list[0]" /> list1: <input type="text" name="list[1]" />
- map
mapa: <input type="text" name="map[a]" /> mapb: <input type="text" name="map[b]" />
4. 常用注解
4.1 @RequestParam
作用: 把请求中指定名称的参数给控制器中的形参赋值
属性: value: 请求参数的名称 ; required: 请求参数中是否必须提供此参数(默认true)
// 当请求的参数名称与方法形参名称不一致时可用
@RequestMapping(path="/test")
public String test(@RequestParam(value = "name") String username)
4.2 @RequestBody
作用: 用于获取请求体中的内容
属性:required:是否必有请求体
@RequestMapping(path="/test")
public String test(@RequestBody String body){ //获取请求体
System.out.println(body);
}
4.3 @PathVaribale
作用: 用于绑定uri中的占位符
属性: value:占位符名称 ; required
4.4 其他注解
@RequestHeader
获取请求头
@CookieValue
把指定cookie名称的值传入控制器方法参数
@ModelAttribution
作用: 1.作用在方法上: 当前方法会在控制器的方法前执行 ; 2.作用参数上: 获取指定的数据给参数赋值
属性: value:用于获取数据的key
@SessionAttribution
所用: 用于多次执行控制器方法间的参数共享
属性: value;type