1. RequestParam注解
1. 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
2. 属性
1. value:请求参数中的名称
2. required:请求参数中是否必须提供此参数,默认值是true,必须提供 (即 请求中没有该参数,则控制器不予执行对应方法)
3. 代码如下:
<a href="param/testRequestParam<%–?username=haha–%>">测试RequestParam</a>
@RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam(value="username",required = false)String name){ System.out.println("执行了。。。"); System.out.println(name); return "success"; }
2. RequestBody注解
1. 作用:用于获取请求体的内容(注意:get方法不可以)
2. 属性
1. required:是否必须有请求体,默认值是true
3. 代码如下:
<form action="param/testRequestBody" method="port"> 姓名:<input type="text" name="username"/><br/>//输入中文后台会乱码,即使设置了utf-8编码 年龄:<input type="text" name="age"/><br/> <input type="submit" value="提交"/> </form>
@RequestMapping(value="/testRequestBody") public String testRequestBody(@RequestBody String body){ System.out.println("执行了。。。"); System.out.println(body); return "success"; }
3. PathVariable注解
1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
2. 属性
1. value:指定url中的占位符名称
3. Restful风格的URL
1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
2. restful风格的URL优点
1. 结构清晰
2. 符合标准
3. 易于理解
4. 扩展方便
4.代码如下:
<a href="param/testPathVariable/22">测试PathVariable</a>
@RequestMapping(value="/testPathVariable/{id}") public String testPathVariable(@PathVariable(value="id") String id){ System.out.println("执行了。。。"); System.out.println(id); return "success"; }
4. RequestHeader注解
1. 作用:获取指定请求头的值
2. 属性
1. value:请求头的名称
3. 代码如下
<a href="param/testRequestHeader">测试RequestHeader</a>
@RequestMapping(value="/testRequestHeader") public String testRequestHeader(@RequestHeader(value="Accept") String header){ System.out.println("执行了。。。"); System.out.println(header); return "success"; }
5. CookieValue注解
1. 作用:用于获取指定cookie的名称的值
2. 属性
1. value:cookie的名称
3. 代码如下:
<a href="param/useCookieValue">查询指定cookie的名称的值</a>
@RequestMapping(value="/useCookieValue") public String useCookieValue(@CookieValue(value="JSESSIONID") String cookieValue) { System.out.println(cookieValue); return "success"; }
6. ModelAttribute注解
1. 作用
1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
2. 出现在参数上:获取指定的数据给参数赋值。
2. 应用场景
1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。
3. 具体的代码
<form action="param/updateUser" method="post"> 姓名:<input type="text" name="name"/><br/> 年龄:<input type="text" name="age"/><br/> <input type="submit" value="提交"/> </form>
方式一: //修饰的方法有返回值 @ModelAttribute public User showUser(String name) {//参数name一定要和表单里的name一致,才能获取,
//若表单改成username,则这里也要改成username,同时表单的username此时就不能直接封装到user里,
//因为username和User类中的name属性不一致,只有经过showUser方法里的user.setName()才能封装进去,age同理 System.out.println("showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName(name); user.setAge(20);//这里的年龄设置是无效的,因为表单提交时已经设置了年龄 user.setDate(new Date());//这里的日期设置就是对实体数据不完整时的补充,有效 return user; } @RequestMapping("/updateUser") public String updateUser(User user){//该user对象的数据,一部分来自表单的提交数据,如name和age,一部分来自showUser方法的补充,如date System.out.println("执行了。。。"); System.out.println(user); return "success"; } 方式二: //修饰的方法没有返回值 @ModelAttribute public void showUser(String name, Map<String, User> map) { System.out.println("showUser执行了..."); // 模拟从数据库中查询对象 User user = new User(); user.setName(name); user.setAge(20); user.setDate(new Date()); map.put("one",user); } @RequestMapping("/updateUser") public String updateUser(@ModelAttribute(value="one") User user) { System.out.println("执行了。。。"); System.out.println(user); return "success"; }
7.SessionAttributes注解
1. 作用:用于多次执行控制器方法间的参数共享
2. 属性
1. value:指定存入属性的名称
3. 代码如下:
<a href="param/testSessionAttributes">测试SessionAttribute</a> <a href="param/getSessionAttributes">获得SessionAttribute</a> <a href="param/delSessionAttributes">清空SessionAttribute</a>
跳转后的success.jsp页面:
<body> 入门成功!!!<br/> request域中:${requestScope.username} <br/>${requestScope.age}<br/> session域中:${sessionScope} </body>
控制器方法:
@Controller @RequestMapping("/param") @SessionAttributes(value = {"username"}) public class ParamController { @RequestMapping("/testSessionAttributes") public String testSessionAttribute(Model model){ System.out.println("testSessionAttributes..."); //底层会存储到requst域对象中 model.addAttribute("username","小强"); return "success"; } @RequestMapping("/getSessionAttributes") public String getSessionAttribute(ModelMap modelMap){ System.out.println("getSessionAttributes..."); String username = (String)modelMap.get("username"); System.out.println("姓名:"+username); return "success"; } @RequestMapping("/delSessionAttributes") public String delSessionAttribute(SessionStatus status){ System.out.println("delSessionAttributes..."); //清空session status.setComplete(); return "success"; } }
依次点击三个链接:
后台输出: