上一篇:《修炼SpringMVC-注解开发-请求转发与重定向(二)》
如果文中有纰漏,请多多指正!!!
返回void时的请求转发和重定向
一、返回void时的请求转发
当处理器方法返回void时,若要实现请求转发,需要使用HttpServletRequest的请求转发方法,无论是下一级资源是页面还是Controller,用法相同。这种方法与原始的Servlet开发十分相似。
在传递的过程中,如果有数据要向下一级资源传递,则需要将数据放入到request或session中。不能在使用Model、RedirectAttributes中,这是因为由Model、RedirectAttributes传递的数据都是拼接到处理器方法返回值中的,作为请求的一部分出现向下传递。这里没有返回值,所以使用Model、RedirectAttributes其中的数据无法向下传递。
二、返回void时的重定向
当处理器方法返回void时,若要实现重定向,需要使用HttpServletResponse的重定向方法,无论是下一级资源是页面还是Controller,用法相同。这种方法与原始的Servlet开发十分相似。
在传递的过程中,如果有数据要向下一级资源传递,则需要将数据放入到session中。与请求转发类似不能在使用Model、RedirectAttributes携带数据。
三、返回void时的请求转发和重定向简单案例
@Controller@RequestMapping("/ResourceVoid")public class ResourceVoidController { /** * 请求转发 * 无论是请求转发到页面还是其他Controller * 均使用request.getRequestDispatcher("url").forward(request, response); * 即可. */ @RequestMapping(value="/forward.do") public void forward(HttpServletRequest request, HttpServletResponse response,String param) throws Exception { request.setAttribute("show", param); //请求转发 request.getRequestDispatcher("/jsp/display.jsp").forward(request, response); } /** * 重定向 * 无论是重定向到页面还是其他Controller * 均使用response.sendRedirect("url"); * 即可. */ @RequestMapping(value="/redirect.do") public void forward(HttpServletRequest request,HttpServletResponse response, HttpSession session,String param) throws Exception { //放到session中 session.setAttribute("show", param); //请求转发 response.sendRedirect(request.getContextPath()+"/jsp/display.jsp"); }}
地址栏输入测试地址:
请求转发:http://localhost:8080/SpringMVCPrimary/ResourceVoid/forward.do?param=32324重定向:http://localhost:8080/SpringMVCPrimary/ResourceVoid/redirect.do?param=8888
![5cf3addd9729273af6762ec4ed86183a.png](https://img-blog.csdnimg.cn/img_convert/5cf3addd9729273af6762ec4ed86183a.png)