当我们使用springMVC进行页面跳转的时候:
在使用springMVC的时候我们在控制器返回页面的时候,直接return 一个页面
// 访问路径
@RequestMapping("/abc")
public String show(){
System.out.println("a");
// 转发的方式进行页面的跳转,如果是重定向 url的地址会发生变化
return "/success.jsp";
}
默认是转发。
这个时候我们需要了解转发和重定向的原理:
转发是在服务器内部进行跳转的。
重定向则是先响应回去 ,然后再由客户端进行二次请求。服务器相当于处理了两次请求。
转发的方式可以有以下几种:
可以forward:xxxxx.jsp 也可以直接进行 return
转发的路径在代码中有说明:
转发不支持绝对路径!也就是不支持 forward:http://baidu.com 类似于这样的页面进行跳转,因为转发是在服务器内部进行的页面跳转,服务器内部就没有这些路径,怎么可以访问到呢?
/**
* 转发
* return "forward:../success.jsp";
*
* A、相对路径 ../返回上一级 ./当前一级
*
* B、根路径 使用/ 开始 /代表的是当前的上下文路径 推荐
*
* C、绝对路径:不支持 ,因为转发只可以在服务器内部跳转
*
* */
@RequestMapping("demo1")
public String demo1(){
System.out.println("进入控制单元");
/*return "../success.jsp";*/
/*return "forward:/success.jsp";*/
return "forward:http://www.bjsxt.com";
}
使用重定向的方法:
return "redirect:/xxxx.jsp"
这里我们需要了解一下:
使用根路径/ :不管是重定向还是转发,只要使用/ 就是上下文路径,就是从Tomcat配置的该项目的路径开始
重定向是支持绝对路径的,因为是由客户端进行页面的访问。
/**
* 重定向:
* "redirect:跳转地址";
*
* 支持路径
* A、相对路径 ../ ./
*
* B、根路径 /--代表的是当前的上下文
*
* C、绝对路径 --支持的
*
*
*
* */
@RequestMapping("demo2")
public String demo2() {
return "redirect:/success.jsp";
/*
* return "redirect:../success.jsp";
* return "redirect:http://www.baidu.com";
* */
}
我们可以发现:
不管是转发还是跳转,都可以使用根路径书写,根路径都是/开头即可,十分的方便。
使用View类进行转发和重定向:
View是spring中进行的封装,我们可以通过一下方式来通过View进行转发和重定向:
@RequestMapping("demo3")
public View demo3(){
//转发
/* View v =new InternalResourceView("/success.jsp");*/
//重定向
View v =new RedirectView("/springmvc03/success.jsp");
return v;
}
有了View为什么需要有ModelAndView?
因为View是视图,Model是模型,return只能返回一种类型。所以springMVC又封装了一种更加全面的类ModelAndView
ModelAndView 转发和重定向:
ModelAndView一种是通过setViewName通过名称:
来确定是转发还是重定向(方式一),然后底层相当于用方式二的方式进行页面跳转,
方式二是对方式一的一种封装,
当然,我们使用return 不管是forward还是redirect,底层都相当于用这种方式进行页面跳转。
public ModelAndView demo4(){
//方式一
ModelAndView modelAndView=new ModelAndView();
//转发一
modelAndView.setViewName("forward:/success.jsp");
//重定向一
modelAndView.setViewName("redirect:/success.jsp");
//方式二
//转发
modelAndView.setView(new InternalResourceView("/success.jsp"));
//重定向
modelAndView.setView(new RedirectView("/springmvc03/success.jsp"));
return modelAndView;
}