SpringMVC注解
- 简单注解
@RequestMapping("/hello")
public String sayHello(){
System.out.printf("hello StringMVC");
return "success";
}
所对应的.jsp文件
<a href="hello">入门级别</a>
- RequestMapping 注解的,method:指定该方法的请求方式
@RequestMapping(value = "/testRequestMapping",method = {RequestMethod.POST})
public String testRequestMapping(){
System.out.printf("测试RequestMapping注解");
return "success" ;
}
请求出现错误,该请求是get方法,而控制器里的该URL所对应的方法是post
<a href="user/testRequestMapping">ReuestMapping method</a>
- ***RequestMapping***注解 , params:指定限制请求参数的条件
@RequestMapping(value = "/testRequestMappingParams",params = {"username"})
public String testRequestMappingParams(){
System.out.printf("测试RequestMappingParams注解");
return "success";
}
前端请求,因为该URL对应的方法中的params中还有username参数则前端请求就要含有
<a href="user/testRequestMappingParams?username=haha">RequestMapping params</a>
URL方法中对应的params里的参数有对应的值,则前端参数对应的值也要一致
@RequestMapping(value = "/testRequestMappingParams",params = {"username=haha"})
public String testRequestMappingParams(){
System.out.printf("测试RequestMappingParams注解");
return "success";
}
<a href="user/testRequestMappingParams?username=haha">RequestMapping params</a>
- 请求参数的绑定一
@RequestMapping("/testParams")
public String testParams(String username,String password){
System.out.println("用户名"+username);
System.out.println("密码"+password);
return "success";
}
<a href="testParams?username=zhangsna&password=123">请求参数绑定</a>
- 请求参数绑定到把数据封装到JavaBean的类中
创建类
package com.dapt.domain;
import java.io.Serializable;
public class Account implements Serializable {
private String username;
private String password;
private Double money;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
'}';
}
}
控制器
@RequestMapping(value = "/saveAccount",method = {RequestMethod.POST})
public String saveAccount(Account account){
System.out.println(account);
return "success";
<form action="user/saveAccount" method="post">
姓名:<input type="text" name="username">
密码:<input type="password" name="password">
金额;<input type="text" name="money" >
<input type="submit" value="提交">
</form>
- 请求参数绑定到把数据封装到JavaBean的类中,一个类封装另一个类
User.java
package com.dapt.domain;
import java.io.Serializable;
public class User implements Serializable {
private String uname;
private String age;
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
@Override
public String toString() {
return "User{" +
"uname='" + uname + '\'' +
", age='" + age + '\'' +
'}';
}
}
Account.java
package com.dapt.domain;
import java.io.Serializable;
public class Account implements Serializable {
private String username;
private String password;
private Double money;
private User user;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", user=" + user +
'}';
}
}
.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="saveAccount" method="post">
姓名:<input type="text" name="username">
密码:<input type="password" name="password">
金额:<input type="text" name="money" >
用户姓名:<input type="text" name="user.uname">
用户年龄:<input type="text" name="user.age">
<input type="submit" value="提交">
</form>
</body>
</html>
控制器
@RequestMapping(value = "/saveAccount",method = {RequestMethod.POST})
public String saveAccount(Account account) {
System.out.println(account);
return "success";
- 请求参数绑定 集合数据类型(List map集合)
Account.java
package com.dapt.domain;
import java.io.Serializable;
import java.util.List;
import java.util.Map;
public class Account implements Serializable {
private String username;
private String password;
private Double money;
private List<User> list;
private Map<String,User> map;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Double getMoney() {
return money;
}
public void setMoney(Double money) {
this.money = money;
}
public List<User> getList() {
return list;
}
public void setList(List<User> list) {
this.list = list;
}
public Map<String, User> getMap() {
return map;
}
public void setMap(Map<String, User> map) {
this.map = map;
}
@Override
public String toString() {
return "Account{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
", money=" + money +
", list=" + list +
", map=" + map +
'}';
}
}
.jsp
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="saveAccount" method="post">
姓名:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
金额:<input type="text" name="money" ><br>
用户姓名:<input type="text" name="list[0].uname"><br>
用户年龄:<input type="text" name="list[0].age"><br>
用户姓名:<input type="text" name="map['one'].uname"><br>
用户年龄:<input type="text" name="map['one'].age"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
控制器
@RequestMapping(value = "/saveAccount",method = {RequestMethod.POST})
public String saveAccount(Account account) {
System.out.println(account);
return "success";
最后的输出结果
Account{username='闸爱国', password='25', money=45.0, list=[User{uname='鞍山', age='22'}], map={one=User{uname='供热费', age='43'}}}
常用注解
- ***RequestParam***注解 :把请求中的指定名称的参数传递给控制器中的形参赋值
属性:
value:请求参数中的名称
required:请求参数中是否必须提供此参数,默认值是true,必须提供
@Controller
@RequestMapping("/anno")
public class AnnoController {
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam(value="name") String username){
System.out.println(username);
return "success";
}
}
<a href="anno/testRequestParam?name=haha">RequestParam</a>
- RequestBody :用于获取请求体的内容
属性:required:是否必须有请求体,默认值是true
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println(body);
return "success";
<form action="anno/testRequestBody" method="post">
姓名:<input type="text" name="uname"><br>
年龄:<input type="text" name="age"><br>
日期:<input type="text" name="date">
<input type="submit" value="提交">
</form>
- PathVariable :拥有绑定URL中的占位符的,例如:url中有/delete/{id},{id}就是占位符
属性:value:指定URL中的占位符名称
Restful风格的URL- 请求路径一样,可以根据不同的请求方式去执行后台不同方法
- Restful风格的URL优点
- 结构清晰
- 符合标准
- 易于理解
- 扩展方便
@RequestMapping("/testPathVariable/{id}")
public String testPathVariable(@PathVariable(value="id") String id){
System.out.println(id);
return "success";
}
<a href="anno/testPathVariable/10">PathVariable</a>
- CookieValue : 用于获取指定cookie的名称的值 (只能取浏览器里有的)
属性:value:cookie的名称
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue(value ="JSESSIONID") String cookie){
System.out.println(cookie);
return "success";
}
<a href="anno/testCookieValue">CooKieValue</a>
- ***ModelAttribute***注解
作用:- 出现在方法上:表示当前方法会在控制器方法执行前先执行
- 出现再参数上:获取指定的数据给参数赋值
应用场景:当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据
方式一:
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println(user);
return "success";
}
//修饰的方法有返回值
@ModelAttribute
public User showUser(String uname){
User user = new User();
user.setUname(uname);
user.setAge("20");
user.setDate(new Date());
return user;
}
<form action="anno/testModelAttribute" method="post">
用户姓名:<input type="text" name="uname"><br>
用户年龄:<input type="text" name="ager"><br>
<input type="submit" value="提交">
</form>
方式二:
@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println(user);
return "success";
}
// 修饰的方法没有返回值,放在一个Map里面
@ModelAttribute
public void showUser(String uname, Map<String,User> map){
User user= new User();
user.setUname(uname);
user.setAge("23");
user.setDate(new Date());
map.put("abc",user);
}
- SessionAttribute :用于多次执行控制器方法间的参数共享
属性: value:指定存入属性的名称
//设置session的值
@SessionAttributes(value = {"msg"})
public class AnnoController {
@RequestMapping("/testSessionAttributes")
public String testSessionAttributes(Model model){
model.addAttribute("msg","张三");
return "success";
}
}
index.jsp
<a href="anno/testSessionAttributes">testSession</a>
<a href="anno/getSessionAttributes">getSession</a>
<a href="anno/delSessionAttribute">delSession</a>
success.jsp里 显示内容是 “ {msg=张三} 张三 张三 ”
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h2>success</h2>
${sessionScope}
${msg}
${sessionScope.msg}
</body>
</html>
获取Session的值
@RequestMapping("/getSessionAttributes")
public String getSessionAttributes(ModelMap modelMap){
String msg = (String) modelMap.get("msg");
System.out.println(msg);
return "success";
}
删除Session的值
@RequestMapping("/delSessionAttribute")
public String delSessionAttribute(SessionStatus status){
status.setComplete();
return "success";
}