RequestMapping注解
RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
RequestMapping注解可以作用在方法和类上
1. 作用在类上:第一级的访问目录
2. 作用在方法上:第二级的访问目录
3. 细节:路径可以不编写 / 表示应用的根目录开始
RequestMapping的属性
1. path 指定请求路径的url
2. value value属性和path属性是一样的
3. mthod 指定该方法的请求方式
4. params 指定限制请求参数的条件
5. headers 发送的请求中必须包含的请求头
@RequestMapping(path = "/testRequestMapping", method = {RequestMethod.POST,RequestMethod.GET},params = {"username=tom"},headers = {"accept"})
RequestParam注解
作用:把请求中的指定名称的参数传递给控制器中的形参赋值
属性
1. value:请求参数中的名称
2. required:请求参数中是否必须提供此参数,默认值是true,必须提供
<a href="anno/testRequestParam?name=haha">RequestParam</a>
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(name="name") String username){
System.out.println("执行了...");
System.out.println(username);
return "success";
}
RequestBody注解
作用:用于获取请求体的内容(注意:get方法不可以)
属性:
required:是否必须有请求体,默认值是true
<form action="anno/testRequestBody" method="post">
用户名: <input type="text" name="uname"><br>
年龄: <input type="text" name="age"><br>
<input type="submit" value="提交">
</form>
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了...");
System.out.println(body);
return "success";
}
PathVariable注解
作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
属性
1. value:指定url中的占位符名称
Restful风格的URL
请求路径一样,可以根据不同的请求方式去执行后台的不同方法
restful风格的URL优点
1. 结构清晰
2. 符合标准
3. 易于理解
4. 扩展方便
<a href="anno/testPathVariable/10">testPathVariable</a>
@RequestMapping(value="/testPathVariable/{sid}")
public String testPathVariable(@PathVariable(name="sid") String id){
System.out.println("执行了...");
System.out.println(id);
return "success";
}
REST(英文: Representational State Transfer,简称 REST)描述了一个架构样式的网络系统,比如 web 应用程序。
HTTP 协议,是一个无状态协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,
必须通过某种手段, 让服务器端发生“状态转化” (State Transfer)。而这种转化是建立在表现层之上的,所以
就是 “表现层状态转化” 。具体说,就是 HTTP 协议里面,四个表示操作方式的动词: GET 、 POST 、 PUT、
DELETE。它们分别对应四种基本操作: GET 用来获取资源, POST 用来新建资源, PUT 用来更新资源, DELETE 用来删除资源。
restful 的示例:
/account/1 HTTP GET : 得到 id = 1 的 account
/account/1 HTTP DELETE: 删除 id = 1 的 account
/account/1 HTTP PUT: 更新 id = 1 的 account
/account HTTP POST: 新增 account
HiddentHttpMethodFilter
由于浏览器 form 表单只支持 GET 与 POST 请求,而 DELETE、 PUT 等 method 并不支持, Spring3.0 添加了一个过滤器,
HiddentHttpMethodFilter可以将浏览器请求改为指定的请求方式,发送给我们的控制器方法,使得支持 GET、 POST、 PUT与 DELETE 请求。
RequestHeader注解
作用:获取指定请求头的值
属性:
value:请求头的名称
/**
* 获取请求头的值
* @param header
* @return
*/
@RequestMapping(value="/testRequestHeader")
public String testRequestHeader(@RequestHeader(value="Accept") String header, HttpServletRequest request,HttpServletResponse response) throws IOException {
System.out.println("执行了...");
System.out.println(header);
return "success";
}
CookieValue注解
作用:用于获取指定cookie的名称的值
属性:
value:cookie的名称
/**
* 获取Cookie的值
* @return
*/
@RequestMapping(value="/testCookieValue")
public String testCookieValue(@CookieValue(value="JSESSIONID") String cookieValue){
System.out.println("执行了...");
System.out.println(cookieValue);
return "success";
}
ModelAttribute注解
作用:
该注解是 SpringMVC4.3 版本以后新加入的。它可以用于修饰方法和参数。
出现在方法上,表示当前方法会在控制器的方法执行之前,先执行。它可以修饰没有返回值的方法,也可
以修饰有具体返回值的方法。
出现在参数上,获取指定的数据给参数赋值。
属性:
value:用于获取数据的 key。 key 可以是 POJO 的属性名称,也可以是 map 结构的 key。
应用场景:
当表单提交数据不是完整的实体类数据时,保证没有提交数据的字段使用数据库对象原来的数据。
例如:
我们在编辑一个用户时,用户有一个创建信息字段,该字段的值是不允许被修改的。在提交表单数
据是肯定没有此字段的内容,一旦更新会把该字段内容置为 null,此时就可以使用此注解解决问题。
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="uname" /><br/>
用户年龄:<input type="text" name="age" /><br/>
<input type="submit" value="提交" />
</form>
@ModelAttribute 修饰的方法会先执行
/**
* ModelAttribute注解
* @return
*/
@RequestMapping(value="/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
System.out.println("testModelAttribute执行了...");
System.out.println(user);
return "success";
}
/**
* 没有返回值的情况
* @param uname
* @param map
*/
@ModelAttribute
public void showUser(String uname, Map<String,User> map){
System.out.println("showUser执行了...");
// 通过用户查询数据库(模拟)
// 前端传来的数据不完整时,其他属性默认用数据库中的属性值
User user = new User();
user.setUname(uname);
user.setAge(50);
user.setDate(new Date());
// 没有返回值,存到 map中,控制器通过在参数前加@ModelAttribute("abc")注解拿到map
map.put("abc",user);
}
SessionAttributes注解
作用:用于多次执行控制器方法间的参数共享
属性:
value:指定存入属性的名称
/**
在jsp页面上,可以通过 ${ msg } 获取(其实应该是 ${requestScope.msg})
// SessionAttributes注解作用在类上,把msg=美美存入到session域对中
@SessionAttributes(value={"msg"})
在jsp页面上,可以通过 ${sessionScope} 获取