1.重定向定义
重定向:将网络请求重新定个方向,转移到其他请求上去。例如请求url1,url1不返还结果,而是重定向到url2,url2返回结果。
2.例子
例1:请求mrd2(http://localhost:8080/mvcredirect/mrd2?name=zhangsan),重定向到mrd1。
例1:请求mrd3(http://localhost:8080/mvcredirect/mrd3?name=李四),重定向到mrd4。
注意RedirectAttributes.addFlashAttribute()是可以将对象数据保存并转移给重定向后的请求的。
package com.zyf.springMVC.mvcredirect;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
@Controller
@RequestMapping(path = "/mvcredirect")
public class MvcRedirectController {
@RequestMapping(value = "/mrd1")
public ModelAndView mrd1(String name, ModelAndView mav) {
mav.addObject("name", name);
mav.setViewName("mvcredirect/mrd1");
return mav;
}
// http://localhost:8080/mvcredirect/mrd2?name=zhangsan
@RequestMapping(value = "/mrd2")
public ModelAndView mrd2(String name, ModelAndView mav) {
mav.addObject("name", name);
// 重定向到mrd1
mav.setViewName("redirect:/mvcredirect/mrd1");
return mav;
}
// http://localhost:8080/mvcredirect/mrd3?name=李四
@RequestMapping(value = "/mrd3")
public ModelAndView mrd3(String name, RedirectAttributes ra, ModelAndView mav) {
User user = new User();
user.setName(name);
// 重定向到mrd4,且将对象数据传递过去
ra.addFlashAttribute("user", user);
// mav.addObject("user", user); 此方法无法传递对象
mav.setViewName("redirect:/mvcredirect/mrd4");
return mav;
}
@RequestMapping(value = "/mrd4")
public ModelAndView mrd4(User user, ModelAndView mav) {
mav.addObject("user", user);
mav.setViewName("mvcredirect/mrd4");
return mav;
}
}
测试结果
例1,访问http://localhost:8080/mvcredirect/mrd2?name=zhangsan,

完成后,显示的是mrd1请求,重定向成功:

例2效果类似。
github:https://github.com/zhangyangfei/SpringBootLearn.git中的springMVC工程。
本文详细解析了SpringMVC框架中的重定向机制,通过具体示例展示了如何使用RedirectAttributes在重定向过程中传递数据,以及如何从重定向目标控制器接收这些数据。
1715

被折叠的 条评论
为什么被折叠?



