java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > springboot redirect重定向路径

基于springboot redirect重定向路径问题总结

作者:ajungejava

这篇文章主要介绍了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;
}

先看test1方法,返回值 “redirect:index” , 那么会使用重定向。

SpringMVC找视图名”redirect:index”的时候,本文使用的ViewResolver是FreeMarkerViewResolver。

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

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

test1方法:

我们通过firebug看下路径:

nice,验证了我们的想法。

test2方法同理:

test3方法:

test4方法:

test5方法:

test6方法:

test7方法:

总结

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

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

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

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文