Forward,redirect,以及参数传递问题

 

转发forward(常用)

流程:客户端浏览器发送http请求---->web服务器接收该请求并转发请求(在方法内转发到了另一个请求)---->web服务器实现请求的转发处理并执行结果(可能是另一个action,视图等)---->web服务器发送结果到浏览器。

特点:浏览器发出一次请求,客户端地址不变,只能转发到当前web下的请求,速度快。

代码实现:return "forward:hello.action";

response.sendRedirect(" "); 

参数:由于是同一次的请求,参数通过model可以从一个请求,转发到web内的另一个请求中。

重定向redirect

流程:客户端浏览器发送http请求---->web服务器接收该请求并转发请求---->web服务器发送新的location以及302码到浏览器---->客户端浏览器检测到302码并发送请求到location地址---->location地址的服务器处理请求并返回结果---->客户端浏览器。

特点:浏览器发出2次请求,客户端地址变化,可到非当前web下的地址。

代码实现:可重定向到页面或者特定请求中,return "redirect:/interview.html";

request.getRequestDispatcher(" ").forward(request,response);

参数携带: return “redirect:/index?param1=value1″;

  使用RedirectAttributes完成参数传递

使用场景:重定向到一个外部网站,避免用户刷新页面时导致的表单重复提交问题。

RedirectAttributes

Spring3.1版本添加的参数,用于action1中重定向到action2时的参数传递工作,使用时需添加配置<mvc:annotation-driven />。

redirectAttributes.addAttribute("param", "value");  

相当于在重定向的url后拼接参数,action2.do?Param=value。即重定向之后的页面或者控制器获取参数即可。参数暴露,有风险。

redirectAttributes.addFlashAttribute("param", value);

通过该方式传递的参数,在action2中不能获取;但是在action2跳转到的视图view中,可以通过el表达式获取到action1中的参数。且只能一次获取,即刷新页面之后,参数获取不到。

Flash attributes对重定向之前的参数进行了临时存储(通常是在session)中,并且在重定向之后被立即移除。故在重定向只有的视图中参数可以显示,且刷新后丢失。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值