Controller内部使用forward和redirect跳转到另一个Controller如何传参

Controller内部使用forward和redirect跳转到另一个Controller如何传参

今天我遇到了一个场景

Controller携带参数内部跳转,就是一个Controller 返回的不是视图,而是另一个页面,这就涉及到参数的传递

内部跳转分两种

第一种,使用forward

return "forward:index.do";

forward的意思就是服务器访问资源,然后吧得到的结果i返回给返回给用户

所以地址栏还是显示的之前的地址

他可以携带的东西,如 request state等信息都会跟着一起传递

如代码


@RequestMapping("/index")
	private String inindex1(HttpServletResponse response, HttpServletRequest request){
		System.out.println(session.getAttribute("javalogin"));
		return "user/index";
	}
如以上代码,如果之前的Controller里设置了session,那么在这里是可以正确打印出javalogin的值的


第二种:就是redirect

使用这种方式,就会丢失session或request等信息

redirect是告诉浏览器取请求另外一个地址,所以此时浏览器的地址显示的就是新地址,但是他缺取法保存session或request等信息了

那么应该如何传参呢,我们可以使用RedirectAttributes来传递参数

下面我们看代码

第一个conterller


@RequestMapping(value="/login028888",method=RequestMethod.POST)
private String inindex(String userid,String username,String useradmin,RedirectAttributes arr,HttpServletResponse response, HttpServletRequest request){
	if(uli.getphp028(userid,username,useradmin)){
		arr.addFlashAttribute("javalogin","loginok");
		arr.addFlashAttribute("userid",userid);
		arr.addFlashAttribute("username",username);
		arr.addFlashAttribute("useradmin",useradmin);
	}else{
		arr.addFlashAttribute("javalogin","loginerror");
	}
	return "redirect:index.do";
}

在index.do里我们可以这样接收参数


@RequestMapping("/index")
private String inindex1(HttpServletResponse response, HttpServletRequest request,Map<String,Object> maps){
HttpSession session = request.getSession();
System.out.println("AAAAAAAAA"+maps.get("javalogin"));
session.setAttribute("infologin", maps);
session.setMaxInactiveInterval(60);
return "user/index";
}
经过测试,这是正常的,大家可以测试下


当然我们还可以使用RedirectAttributes的这个方法,即 arr.addAttribute(attributeValue) 来传递参数

只是用他来传递参数,在接收才参数的centroller里面就应该这样配置,如代码片段


private String inindex1(String userid,String javalogin,String username,String useradmin){
然后直接获取即可



爆款云服务器s6 2核4G 低至0.46/天,具体规则查看活动详情Blog Img