目录
一、参数传递:
(一)View—Controller
方式一:提交的域名称和处理方法的参数名一致
方式二:提交的域名称和处理方法的参数名不一致
方法三:提交的是一个对象
(二)Controller—View
第一种 : 通过ModelAndView(不常用)
第二种 : 通过ModelMap(不常用)
第三种 : 通过Model(常用)
二、页面跳转
1、 请求转发页面
2、转发action
3、重定向页面
4、重定向action
提交数据 : http://localhost:8080/hello?name=梁三岁
处理方法 :springMVC自动获取参数名为name的参数值,并赋值给处理方法的同名参数
@Controller
public class DemoOneController {
Logger logger= Logger.getLogger(DemoOneController.class);
@RequestMapping("/demo1.action")
public String demo1(String name){
logger.info("进入demo1的参数是:"+name);
return "login";
}
}
提交数据 : http://localhost:8080/hello?username=梁三岁
处理方法 :使用注解@RequestParam(“指定请求参数名”)修饰处理方法的参数,表示获取指定名字参数赋值给他所有修饰的方法
@RequestParam表示参数,默认非空
@RequestMapping("/demo2.action")
public String demo2(@RequestParam String name){
logger.info("进入demo2的参数是:"+name);
return "login";
}
如果在地址栏不写参数, 则会报错,如下:
在地址栏输入参数name=梁三岁,在控制台就会输出地址栏提交的参数值
要求提交的表单域和对象的属性名一致 , 参数使用对象即可,但是有一个要求就是我们需要保持参数名和对象属性名称一样,SpringMVC自动为我们重前端请求地址获取参数值,按照参数的name属性为我们对象相同属性名注入(说白了就是使用set注入)
实体类
package com.lss.po;
/**
* Created by IntelliJ IDEA.
*
* @Author : 梁三岁
* @name :用户实体类
* @create 2022/8/31 20:40
*/
public class User {
private String name;
private String pass;
public User() {
}
public User(String name, String pass) {
this.name = name;
this.pass = pass;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPass() {
return pass;
}
public void setPass(String pass) {
this.pass = pass;
}
}
@RequestMapping("/demo3.action")
public String demo3(User user){
logger.info("进入demo3的参数是:"+user.getName()+"\t"+user.getPass());
return "login";
}
@RequestMapping("/demo5.action")
public ModelAndView demo5(String name,String pass){
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//把用户名、密码放入作用域
modelAndView.addObject("name",name);
modelAndView.addObject("pass",pass);
//设置视图
modelAndView.setViewName("userInfo");
return modelAndView;
}
@RequestMapping("/demo6.action")
public String demo6(@RequestParam("name") String name,@RequestParam("pass") String pass, ModelMap model){
model.addAttribute("name",name);
model.addAttribute("pass",pass);
return "userInfo";
}
@RequestMapping("/demo7.action")
public String demo7(@RequestParam("name") String name, @RequestParam("pass") String pass, Model model){
model.addAttribute("name",name);
model.addAttribute("pass",pass);
return "userInfo";
}
三种方式对比:
Model只有几个方法适用与存储数据
ModelMap继承与LinkedHashMap
ModelAndView 即可以存储数据,又可以设置返回视图层,控制视图跳转逻辑
一般情况下我们都是使用Model
分为请求转发和重定向
衍生出四种是:
- 请求转发页面,
- 转发action,
- 重定向页面,
- 重定向action
@RequestMapping("/one.action")
public String one(){
System.out.println("这是请求转发页面跳转.........");
return "main"; //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
}
@RequestMapping("/two.action")
public String two(){
System.out.println("这是请求转发action跳转.........");
//forward: 这组字符串可以屏蔽前缀和后缀的拼接.实现请求转发跳转
return "forward:/other.action"; //默认是请求转发,使用视图解析器拼接前缀后缀进行页面跳转
}
@RequestMapping("/three.action")
public String three(){
System.out.println("这是重定向页面.......");
//redirect: 这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
return "redirect:/admin/main.jsp";
}
@RequestMapping("/four.action")
public String four(){
System.out.println("这是重定向action.......");
//redirect: 这组字符串可以屏蔽前缀和后缀的拼接.实现重定向跳转
return "redirect:/other.action";
}