zoukankan      html  css  js  c++  java
  • SpringBoot入门教程(二十二)controller 之间实现跳转

    如下图,创建两个控制器来测试跳转效果。以下所有跳转方式均以这两个控制器为实例。

    请叫我头头哥_SpringBoot()controller 之间实现跳转

    ♛ 1 sendRedirect方式
    response.sendRedirect("redirect:映射路径?参数名="+参数值);
    ♛ 2 forward方式
    package com.demo.controller.Jump;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    /**
     * Created by toutou on 2019/1/27.
     */
    @Controller
    @Slf4j
    public class FirstJumpController {
        @RequestMapping(value = "/myfirst")
        public String MyFirst(){
            // 如果使用ModelAndView方式: return new ModelAndView("forward:/mysecond");
            // forward是请求转发,是服务器端行为,相当于一次请求,地址栏的 URL 不会改变。
            return "forward:/mysecond";
        }
    }
    ♛ 3 redirect方式
        @RequestMapping(value = "/myfirst2")
        public String MyFirst2(){
            // redirect是请求重定向,是客户端行为,相当于两次请求,地址栏的 URL 会改变。
            return "redirect:/mysecond";
        }
    ♛ 4 拼接url方式
        @RequestMapping(value = "/myfirst3")
        public String MyFirst3(String name){
            // redirect是请求重定向,是客户端行为,相当于两次请求,地址栏的 URL 会改变。
            return "redirect:/mysecond2?name=" + name;
        }

    bug: 参数包含中文字符的话,容易出现问题

    ♛ 5 RedirectAttributes方式

    第一种:redirectAttributes.addAttributie("prama",value);

    redirectAttributes.addAttribute("prama1",value1);
    redirectAttributes.addAttribute("prama2",value2);
    return:"redirect:/path/list" 

    不足:这种方法相当于在重定向链接地址追加传递的参数:return:"redirect:/path/list?prama1=value1&prama2=value2(直接追加参数会将传递的参数暴露在链接的地址上,非常的不安全)

    第二种:redirectAttributes.addFlashAttribute("prama",value);

    redirectAttributes.addFlashAttribute("prama1",str);
    redirectAttributes.addFlashAttribute("prama2",list);
    redirectAttributes.addFlashAttribute("prama3",map);
    return:"redirect:/path/list" ;

    此方法隐藏了参数,链接地址上不直接暴露,但是能且只能在重定向的页面上获取prama的值。其原理是参数放到了session中,session在跳转之后马上移除对象。如果重定向到一个controller,是取不到该prama的值的。

    ♛ 6 modelAndView方式
    public ModelAndView findProjectPage() {
            ModelAndView modelAndView = new ModelAndView("redirect:映射路径?参数名="+参数值);
            XXXXXXX
            return modelAndView;
        }

    v源码地址

    https://github.com/toutouge/javademosecond/tree/master/hellospringboot


    作  者:请叫我头头哥
    出  处:http://www.cnblogs.com/toutou/
    关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
    版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
    特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!

  • 相关阅读:
    第06组 Alpha冲刺(3/4)
    第06组 Alpha冲刺(2/4)
    第06组 Alpha冲刺(1/4)
    第06组 团队Git现场编程实战
    第二次结对编程作业
    2019 SDN大作业
    2019 SDN上机第7次作业
    第08组 Beta版本演示
    第08组 Beta冲刺(5/5)
    第08组 Beta冲刺(4/5)
  • 原文地址:https://www.cnblogs.com/toutou/p/springboot_controller.html
Copyright © 2011-2022 走看看