springmvc(重定向和请求转发、数据的接收和回显)

1、请求转发

(1)直接书写要转发的页面:

@Controller
public class HelloController{
    @RequestMapping("/hello")
      public String hello(Model model){
          model.addAttribute("msg","nihao");
          return "/test.jsp";
      }
}

注意:请求转发和重定向是不需要视图解析器参与的,因为这里已经写了完整的路径,有视图解析器的话拼接地址后会出错

(2)添加forward关键字:

@Controller
public class HelloController{
    @RequestMapping("/hello")
      public String hello(Model model){
          model.addAttribute("msg","nihao");
          return "forward:/test.jsp";
      }
}

 2、重定向

@Controller
public class HelloController{
    @RequestMapping("/hello")
      public String hello(Model model){
          model.addAttribute("msg","nihao");
          return "redirect:/test.jsp";
      }
}

 可以看到地址栏已经发生变化,但是由于重定向的时候不能携带数据,因此,jsp页面的内容不能显示

3、数据的接收

(1)提交的域名称和处理的方法的参数名一致

@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @GetMapping("/t1")
    public String testTeacher(String tname, Model model){
        //接收前端的参数,要注意要和函数中的参数保持一致
        System.out.println("接收到前端的参数为:"+tname);
        //将返回的结果传递给前端
        model.addAttribute("msg",tname);
        return "test";
    }
}

(2)提交的域名称和处理的方法的参数名不一致

@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @GetMapping("/t1")
    public String testTeacher(@RequestParam("name") String tname, Model model){
        //接收前端的参数,要注意要和函数中的参数保持一致
        System.out.println("接收到前端的参数为:"+tname);
        //将返回的结果传递给前端
        model.addAttribute("msg",tname);
        return "test";
    }
}

4、接收一个对象

@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @GetMapping("/t1")
    public String testTeacher(Teacher teacher){
        System.out.println("接收到前端的数据为:"+teacher);
        return "test";
    }
}

 在控制台打印出前端传递的数据:

Teacher(teacherno=null, tname=null, major=jsj, prof=null, department=null)

注意:前端传递数据的时候的参数名要和对象的属性名对应

5、数据的回显

(1)Model

@Controller
@RequestMapping("nihao")
public class HelloController{
    @RequestMapping("/haha")
      public String hello(Model model){
          model.addAttribute("msg","Good Morning!!");//封装数据
          return "hello";//被视图解析器处理
      }
}

(2)ModelAndView 

public class HelloController implements Controller {
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest,
                                      HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView=new ModelAndView();
        modelAndView.addObject("msg","HelloSpringMVC");
        modelAndView.setViewName("hello");//hello.jsp
        return modelAndView;
    }
}

(3)ModelMap

@Controller
@RequestMapping("/teacher")
public class TeacherController {
    @GetMapping("/t1")
    public String testModelMap(ModelMap modelMap){
        modelMap.addAttribute("msg","hhhha");
        return "test";
    }
}

 (4)三种方式的比较:

Model:方法较少,只适合于存储数据

ModelMap:继承了LinkedMap,除了实现自身的一些方法,同样的继承了LinkedMap的方法和特性

ModelAndView:可以在存储数据的同时进行设置返回的逻辑视图,进行控制展示层的跳转

猜你喜欢

转载自www.cnblogs.com/zhai1997/p/12808685.html