处理地址栏传输的数据
这里以浏览器get方式请求为例
- 地址栏提交的域名称和处理方法的参数一致时
@Controller
public class RestFulController {
//映射访问路径,必须是POST请求
@GetMapping("/add")
public String test(String name) {
System.out.println(name);
//返回视图位置
return "hello";
}
}
如果地址栏提交的域名称和处理方法的参数不一致时,接收的参数结果为null
- 地址栏提交的域名称和处理方法的参数不一致时,使用**@RequestParam(“值”),填入地址栏中的域名称**
@Controller
public class RestFulController {
//映射访问路径,必须是POST请求
@GetMapping("/add")
//@RequestParam("username") : username提交的域的名称
public String test(@RequestParam("username") String name) {
System.out.println(name);
//返回视图位置
return "hello";
}
}
如果使用@RequestParam后,地址栏的域名称和注解中的值不一致时则会报错
当注解中的值和地址栏中的域名称相同时
- 地址栏提交的请求数据为一个对象时
要求提交的表单域和对象的属性名一致 , 方法参数使用对象即可接收
实体类:
public class Book implements Serializable {
private int id;
private String name;
private Double price;
public Book(int id, String name, Double price) {
this.id = id;
this.name = name;
this.price = price;
}
public Book() {
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
@Override
public String toString() {
return "Book{" +
"id=" + id +
", name='" + name + '\'' +
", price=" + price +
'}';
}
}
如果使用对象的话,前端传递的参数名和对象属性名必须一致,否则就是null
总结:SpringMVC会将前端接收的参数进行匹配,判断参数对象,假设参数对象中的名字和方法参数对象的属性名相同,可以直接匹配成功使用,否则则匹配不到为null
数据回显前端页面
- 实现Controller接口使用ModelAndView进行返回视图和数据
//实现Controller接口,重写handleRequest方法,需要返回一个ModelAndView,装数据,封视图
public class Hello implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModelAndView 模型和视图
ModelAndView modelAndView = new ModelAndView();
//封装对象,放在ModelAndView中,作为Model
modelAndView.addObject("msg","Hello SpringMVC");
//封装要跳转的视图,放在ModelAndView中
modelAndView.setViewName("hello");
//这里要跳转的视图为:WEB-INF/jsp/hello.jsp
return modelAndView;
}
}
- 使用Model进行存储数据
@Controller
public class RestFulController {
@GetMapping("/add")
public String test(Model model) {
//向模型中添加属性msg与值
model.addAttribute("msg","Hello SpringMVC");
//寻找视图:WEB-INF/jsp/hello.jsp
return "hello";
}
}
- 使用ModelMap进行存储数据
@Controller
public class RestFulController {
@GetMapping("/add")
public String test(ModelMap modelMap) {
//向模型中添加属性msg与值
modelMap.addAttribute("msg","Hello SpringMVC");
//寻找视图:WEB-INF/jsp/hello.jsp
return "hello";
}
}
Modle是一个顶层的接口,ModelMap实现了LinkedHashMap<String, Object>是链表集合
Model只适合用于储存数据,简化了新手对于Model对象的操作和理解
ModelMap 继承了 LinkedMap ,除了实现了自身的一些方法,同样的继承 LinkedMap 的方法和特性
ModelAndView 可以在储存数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转