SpringMVC中转发和重定向(转发和重定向的路径问题,ModelAndView的初识)

当我们使用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;
    }

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值