本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
基于springboot redirect重定向路径问题总结
talkchan · 218浏览 · 发布于2021-09-02 +关注

这篇文章主要介绍了springboot redirect重定向路径问题总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教


    SpringMVC重定向视图RedirectView小分析


    前言

    SpringMVC是目前主流的Web MVC框架之一。

    本文所讲的部分内容跟SpringMVC的视图机制有关,SpringMVC的视图机制请参考楼主的另一篇博客:

    RedirectView这个视图是跟重定向相关的,也是重定向问题的核心,我们来看看这个类的源码。

    路径构造完毕之后使用reponse进行sendRedirect操作。

    实例讲解

    Controller代码

    @Controller
    @RequestMapping(value = “/redirect”)
    public class TestRedirectController {
    @RequestMapping("/test1")
    public ModelAndView test1() {
        view.setViewName("redirect:index");
        return view;
    }
    @RequestMapping("/test2")
    public ModelAndView test2() {
        view.setViewName("redirect:login");
        return view;
    }
    @RequestMapping("/test3")
    public ModelAndView test3(ModelAndView view) {
        view.setViewName("redirect:/index");
        return view;
    }
    @RequestMapping("/test4")
    public ModelAndView test4(ModelAndView view) {
        view.setView(new RedirectView("/index", false));
        return view;
    }
    @RequestMapping("/test5")
    public ModelAndView test5(ModelAndView view) {
        view.setView(new RedirectView("index", false));
        return view;
    }
    @RequestMapping("/test6/{id}")
    public ModelAndView test6(ModelAndView view, @PathVariable("id") int id) {
        view.setViewName("redirect:/index{id}");
        view.addObject(“test”, “test”);
        return view;
    }

    @RequestMapping("/test7/{id}")
    public ModelAndView test7(ModelAndView view, @PathVariable("id") int id) {
        RedirectView redirectView = new RedirectView("/index{id}");
        redirectView.setExpandUriTemplateVariables(false);
        redirectView.setExposeModelAttributes(false);
        view.setView(redirectView);
        view.addObject("test", "test");
        return view;
    }

    SpringMVC找视图名”redirect:index”的时候,本文使用的ViewResolver是FreeMarkerViewResolver。先看test1方法,返回值 “redirect:index” , 那么会使用重定向。

    FreeMarkerViewResolver解析视图名的话,最调用父类之一的UrlBasedViewResolver中的createView方法。

    通过构造方法发现,这个RedirectView使用相对路径,兼容Http1.0,不暴露路径变量。

    test1方法:

    • 进入的路径: /SpringMVCDemo/redirect/test1。 RedirectView使用相对路径,那么重定向的路径: /SpringMVCDemo/redirect/index 

    我们通过firebug看下路径:

    nice,验证了我们的想法。

    test2方法同理:

    • 进入的路径: /SpringMVCDemo/redirect/test2。 重定向的路径: /SpringMVCDemo/redirect/login。

    test3方法:

    • 以 “/” 开头并且使用相对路径,那么会默认加上contextPath。 进入的路径: /SpringMVCDemo/redirect/test3。 重定向的路径: /SpringMVCDemo/index。

    test4方法:

    • 不使用默认路径,createTargetUrl方法中直接append “/index”。进入的路径: /SpringMVCDemo/redirect/test4。 重定向的路径: /index。

    test5方法:

    • 不使用默认路径,createTargetUrl方法中直接append “index”。进入的路径: /SpringMVCDemo/redirect/test5。 重定向的路径: /SpringMVCDemo/redirect/index。

    • 其实这里有点意外,刚开始看的时候以为不使用绝对路径,以后路径会是/SpringMVCDemo/index或/index。 结果居然不是这样,感觉SpringMVC这个取名有点尴尬,有点蛋疼。 其实RedirectView中的createTargetUrl方法就明白了,源码是最好的文档 0 0.

    test6方法:

    • 使用默认路径,该方法还使用了路径变量。本文之前分析的时候说了RedirectView中构造重定向路径的时候会对路径变量进行替代,还会暴露model中的属性,且这2个暴露分别受属性expandUriTemplateVariables、exposeModelAttributes影响,这2个属性默认都是true。进入的路径: /SpringMVCDemo/redirect/test6/1。 重定向的路径: /SpringMVCDemo/index1?test=test。

    test7方法:

    • 跟test6方法一样,只不过我们不暴露model属性,不替代路径变量了。进入的路径: /SpringMVCDemo/redirect/test7/1。 重定向的路径: /SpringMVCDemo/index{id}。

    总结

    简单了分析了RedirectView视图,并分析了该视图的渲染源码,并分析了重定向中的路径问题,参数问题,路径变量问题等常用的问题。

    源码真是最好的文档,了解了视图机制之后,再回过头来看看RedirectView视图,So easy。

    最后感觉RedirectView的相对路径属性怪怪的,不使用相对路径,”/” 开头的直接就是服务器根路径, 不带 “/” 开头的,又是相对路径, 有点蛋疼。


    相关推荐

    PHP实现部分字符隐藏

    沙雕mars · 1321浏览 · 2019-04-28 09:47:56
    Java中ArrayList和LinkedList区别

    kenrry1992 · 905浏览 · 2019-05-08 21:14:54
    Tomcat 下载及安装配置

    manongba · 966浏览 · 2019-05-13 21:03:56
    JAVA变量介绍

    manongba · 960浏览 · 2019-05-13 21:05:52
    什么是SpringBoot

    iamitnan · 1084浏览 · 2019-05-14 22:20:36
    加载中

    0评论

    评论
    大家好,我是一名专注技术开发的技术屌丝,有什么问题可以互相交流,一起学习进步,谢谢。
    分类专栏
    小鸟云服务器
    扫码进入手机网页