SpringMVC学习记录(三)——SpringMVC转发与重定向

一.转发与重定向的区别

1.重定向:重定向是两次请求,http特点是本身是无状态的,所以状态会丢失,地址栏的地址也会发生改变。由此产生会话的概念,重定向的过程中,传输的信息会丢失

2.转发:转发是服务器内部把对一个request/response的处理权,移交给另外一个 ,对客户端来说,只是知道自己最早请求的资源,并不知道服务器内部的转移传递,传输的信息不会丢失

request.getRequestDispatcher("new.jsp").forward(request, response);//转发到new.jsp
response.sendRedirect("new.jsp");//重定向到new.jsp

二.控制器

这里展示转发与重定向的内容,其基础环境依然是学习记录(一)中的环境,没有区别。

package com.yzy.controller;/*
@author fishgoudan
@date 2019/9/5 - 11:06
*/

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/send")
public class Send {

    //转发
    @RequestMapping("/forward")
    public String forward(Model model){
        //springmvc model默认上在请求域当中存储值
        model.addAttribute("who","forward");
        return "forward";
    }
    @RequestMapping("/redirect")
    public String redirect(Model model){
        model.addAttribute("who","redirect");
        System.out.println("redirect");
//         如果是重定向就和视图解析规则无关了,也就不存在什么前后缀拼接
//        不带/的写法是相对路径,根据当前上下文,在当前send的上下文中
        return "redirect:/jsp/redirect.jsp";
//        结果,浏览器中访问不到model,因为model的值在uri中显示了,被当作参数了,而不是属性Attribute
    }
//    这个呢,是想要用redirect去访问别的controller
    @RequestMapping("/redirectAnother")
    public String redirectAnother(){
        System.out.println("hello");
        return "redirect:/baby/hello";
    }
    @RequestMapping("/forwardAnother")
    public String forwardAnother(Model model){
        model.addAttribute("who","oofuck");
        return "forward:/baby/hello";
    }
}

一共有四个函数,作用分别是

      1.转发:当访问send/forward的时候,转发到forward页面。在页面中能访问到方法中的model的属性Attribute,也就说明了,转发的时候不会丢失传输的信息

      2.重定向:当访问send/redirect的时候,重定向到redirect页面,在页面中访问不到方法中的model的属性Attribute,在uri地址栏中也会显示所要传的值,因为该值被当作了参数进行传递。也就是重定向的过程中信息丢失。注意的是作为重定向时候,return内容必须前面是"redirect:"+“重定向目标的url”

      3.重定向到其他Controller:return格式不变,写上目标的Controller和具体RequestMapping的路径即可,可以转发到其他Controller,信息会丢失。

      4.转发到其他Controller:return格式: return “forward:/路径”(参照上面代码内容),可以转发到其他Controller,并且信息不会丢失

三.jsp页面

只是建了两个页面forward.jsp和redirect.jsp,在jsp目录下。内容都是下图所示:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值