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种方式(带参数)相关推荐

  1. 详解vue 路由跳转四种方式 (带参数)

    本文介绍了vue 路由跳转四种方式 (带参数),本文通过实例代码给大家介绍的详细,具有一定的参考借鉴价值,需要的朋友可以参考下 1. router-link 1. 不带参数 <router-li ...

  2. vue路由跳转写法在html,详解vue 路由跳转四种方式 (带参数)

    1.  router-link 1. 不带参数 //name,path都行, 建议用name // 注意:router-link中链接如果是'/'开始就是从根路由开始,如果开始不带'/',则从当前路由 ...

  3. Spring MVC 处理异常的3种方式

    三种方式 @ExceptionHandler标注的方法被定义为处理指定类型异常: @ResponseStatus标注的方法执行,会修改响应头中的状态码: Spring会把@ControllerAdvi ...

  4. Spring MVC 中的 forward 和 redirect

    Spring MVC 中,我们在返回逻辑视图时,框架会通过 viewResolver 来解析得到具体的 View,然后向浏览器渲染.假设逻辑视图名为 hello,通过配置,我们配置某个 ViewRes ...

  5. spring mvc中两种异常的处理手法

    spring mvc中两种异常的处理手法 在spring mvc中,对异常的处理,可以小结有如下两类写法: 1 <bean id="exceptionResolver" cl ...

  6. Spring MVC中的视图解析ViewResolver

    http://blog.csdn.net/prince2270/article/details/5891085 在Spring MVC中,当Controller将请求处理结果放入到ModelAndVi ...

  7. spring_在Spring MVC中使用多个属性文件

    spring 每个人都听说过将单个Web应用程序组合成一个大型Web应用程序的门户. 门户软件的工作原理类似于mashup -来自多个来源的内容是在单个服务中获取的,大部分都显示在单个网页中. 门户软 ...

  8. Spring 2.5:Spring MVC中的新特性

    转载说明:infoQ就是牛人多,看人家去年就把Spring2.5注视驱动的MVC写出来了,还是这么详细,我真是自叹不如,今天偶尔看到这篇文章非常认真的拜读了2遍,简直是茅厕顿开啊....\(^o^)/ ...

  9. Spring MVC 中的基于注解的 Controller

    为什么80%的码农都做不了架构师?>>>    Spring MVC 中的基于注解的 Controller @Controller 基于注解的 Controller   终于来到了基 ...

最新文章

  1. 2021计算机考研计算机组成原理知识结构图
  2. Android中APK直接通过JNI访问驱动
  3. 加入gitignore文件没有起作用怎么办
  4. portainer安装_Docker 图形化工具—Portainer
  5. 一个程序员的创业失败教训【转自CSDN】
  6. 解决<c:if>无else的问题
  7. 架构蓝图设计之4+1视图解析
  8. dwm1000 用c语言控制,DWM1000 测距原理简单分析(示例代码)
  9. xmlspy php,XML Spy实例代码详解(图)
  10. xsmax无法进入dfu模式_iPhoneXSMax怎么强制重启-如何进入DFU模式
  11. 电压暂降求交流,加Q
  12. OpenCV 图像无法显示 (python)
  13. 自媒体攻略合集,教你如何做一名能赚钱的自媒体人
  14. 软件工程 in MSRA 第一周博客作业
  15. 用js将二维数组转为json格式字符串
  16. 五款开源图像处理软件
  17. 企业为什么需要B2B订货系统
  18. 中国DevOps现状调查报告(2019)转载
  19. 华为云服务器ping不通或无法访问
  20. 【随笔】Inconsolata字体的下载安装及在VS2017中使用该字体

热门文章

  1. C++primer 第五版 练习题【3.32】 P104页 个人解答
  2. 无线降噪蓝牙耳机对比:NANK南卡和苹果AirPods Pro哪个好用?
  3. StackOverflowError与OutOfMemoryError区别
  4. Tivoli Netcool/OMNIbus
  5. micropython是什么意思_MicroPython 是什么?
  6. 下载Nexus老版本war包
  7. 一带一红网红基地推出O2O网红直播过年模式
  8. python能解决什么数据问题_浅谈Python数据分析
  9. 【Qt】断言Q_ASSERT的使用
  10. 经纬财富:乌海黄金白银暂缓跌势