Spring MVC中redirect重定向3种方式(带参数)
Spring MVC中做form表单功能提交时,防止用户客户端后退或者刷新时重复提交问题,需要在服务端进行重定向跳转,其中redirect是直接跳转到其他页面,有以下3种方法进行重定向。
redirect重定向流程
客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问test.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求test.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
1. response.sendRedirect重定向跳转
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView testredirect(HttpServletResponse response){ response.sendRedirect("/index");return null;
}
2. ViewResolver直接跳转
不带参数
@RequestMapping(value="/testredirect",method = { RequestMethod.POST, RequestMethod.GET })
public String testredirect(HttpServletResponse response){ return "redirect:/index";
}
带参数
@RequestMapping("/testredirect")
public String testredirect(Model model, RedirectAttributes attr) {attr.addAttribute("test", "51gjie");//跳转地址带上test参数attr.addFlashAttribute("u2", "51gjie");//跳转地址不带上u2参数return "redirect:/user/users";
}
使用RedirectAttributes的addAttribute方法传递参数会跟随在URL后面,如上代码即为http:/index.action?test=51gjie
使用addFlashAttribute不会跟随在URL后面,会把该参数值暂时保存于session,待重定向url获取该参数后从session中移除,这里的redirect必须是方法映射路径,jsp无效。你会发现redirect后的jsp页面中b只会出现一次,刷新后b再也不会出现了,这验证了上面说的,b被访问后就会从session中移除。对于重复提交可以使用此来完成.
spring mvc设置下RequestMappingHandlerAdapter 的ignoreDefaultModelOnRedirect=true,这样可以提高效率,避免不必要的检索。
3. ModelAndView重定向
不带参数
@RequestMapping(value="/restredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView restredirect(String userName){ ModelAndView model = new ModelAndView("redirect:/main/index"); return model;
}
带参数
@RequestMapping(value="/toredirect",method = { RequestMethod.POST, RequestMethod.GET })
public ModelAndView toredirect(String userName){ ModelAndView model = new ModelAndView("/main/index"); model.addObject("userName", userName); //把userName参数带入到controller的RedirectAttributesreturn model;
}
4. 直接跳转某网页
import javax.servlet.http.HttpServletResponse;HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
httpServletResponse.sendRedirect("http://srip.cpu.edu.cn/#/admins")
总结
1, redirect重定向可以跳转到任意服务器,可以用在系统间的跳转。
2, Spring MVC中redirect重定向,参数传递可以直接拼接url也可以使用RedirectAttributes来处理,由于是不同的请求,重定向传递的参数会在地址栏显示,所以传递时要对中文编码进行处理。
Spring MVC中redirect重定向3种方式(带参数)相关推荐
- 详解vue 路由跳转四种方式 (带参数)
本文介绍了vue 路由跳转四种方式 (带参数),本文通过实例代码给大家介绍的详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1. router-link 1. 不带参数 <router-li ...
- vue路由跳转写法在html,详解vue 路由跳转四种方式 (带参数)
1. router-link 1. 不带参数 //name,path都行, 建议用name // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由 ...
- Spring MVC 处理异常的3种方式
三种方式 @ExceptionHandler标注的方法被定义为处理指定类型异常: @ResponseStatus标注的方法执行,会修改响应头中的状态码: Spring会把@ControllerAdvi ...
- Spring MVC 中的 forward 和 redirect
Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们配置某个 ViewRes ...
- spring mvc中两种异常的处理手法
spring mvc中两种异常的处理手法 在spring mvc中,对异常的处理,可以小结有如下两类写法: 1 <bean id="exceptionResolver" cl ...
- Spring MVC中的视图解析ViewResolver
http://blog.csdn.net/prince2270/article/details/5891085 在Spring MVC中,当Controller将请求处理结果放入到ModelAndVi ...
- spring_在Spring MVC中使用多个属性文件
spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...
- Spring 2.5:Spring MVC中的新特性
转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...
- Spring MVC 中的基于注解的 Controller
为什么80%的码农都做不了架构师?>>> Spring MVC 中的基于注解的 Controller @Controller 基于注解的 Controller 终于来到了基 ...
最新文章
- 2021计算机考研计算机组成原理知识结构图
- Android中APK直接通过JNI访问驱动
- 加入gitignore文件没有起作用怎么办
- portainer安装_Docker 图形化工具—Portainer
- 一个程序员的创业失败教训【转自CSDN】
- 解决<c:if>无else的问题
- 架构蓝图设计之4+1视图解析
- dwm1000 用c语言控制,DWM1000 测距原理简单分析(示例代码)
- xmlspy php,XML Spy实例代码详解(图)
- xsmax无法进入dfu模式_iPhoneXSMax怎么强制重启-如何进入DFU模式
- 电压暂降求交流,加Q
- OpenCV 图像无法显示 (python)
- 自媒体攻略合集,教你如何做一名能赚钱的自媒体人
- 软件工程 in MSRA 第一周博客作业
- 用js将二维数组转为json格式字符串
- 五款开源图像处理软件
- 企业为什么需要B2B订货系统
- 中国DevOps现状调查报告(2019)转载
- 华为云服务器ping不通或无法访问
- 【随笔】Inconsolata字体的下载安装及在VS2017中使用该字体
热门文章
- C++primer 第五版 练习题【3.32】 P104页 个人解答
- 无线降噪蓝牙耳机对比:NANK南卡和苹果AirPods Pro哪个好用?
- StackOverflowError与OutOfMemoryError区别
- Tivoli Netcool/OMNIbus
- micropython是什么意思_MicroPython 是什么?
- 下载Nexus老版本war包
- 一带一红网红基地推出O2O网红直播过年模式
- python能解决什么数据问题_浅谈Python数据分析
- 【Qt】断言Q_ASSERT的使用
- 经纬财富:乌海黄金白银暂缓跌势