3.2.6 页面转发
在JSP中页面转发有两种情况:服务器内部跳转(forward)和客户端重定向(redirect)。 Spring MVC选择页面转发的方式也非常简单。
1. 转发到JSP页面
请求处理方法返回值是字符串的情况
服务器内部跳转
若请求处理方法返回字符串,默认使用服务器内部跳转( forward)。示例代码如下:return "main";
客户端重定向
如果希望客户端重定向(redirect),在返回的字符串前面加上"redirect:/"。示例代码如下:return "redirect:/main.jsp";
请求处理方法返回值是ModelAndView的情况
服务器内部跳转
若请求处理方法返回ModelAndView,则可以使用setViewName方法来说设置要转发的页面,如果直接传入字符串参数,则使用服务器内部跳转(forward)。示例代码如下:mv.setViewName("main");
客户端重定向
如果在字符串前面加上redirect:/,则表示使用客户端重定向(redirect)。示例代码如下:mv.setViewName("redirect:/main.jsp");
客户端重定向和服务器内部跳转的区别
需要注意的是,由于客户端重定向(redirect)相当于在浏览器重新发请求,所以不能访问WEB-INF下的资源文件,而且也必须写资源文件后缀名,即.jsp,因为此时springmvc-config.xml文件的视图解析器设置的前缀和后缀都将无效,所以该资源文件要使用完整的路径。
2. 转发到控制器的请求处理方法
请求处理方法的返回值是字符串的情况
服务器内部跳转到另一个请求处理方法
若请求处理方法返回字符串,在返回的字符串前面加上"forward:/",例如return "forward:/main";,则服务器内部跳转到名为main的请求处理方法。
客户端重定向到另一个请求处理方法
若请求处理方法返回字符串,在返回的字符串前面加上"redirect:/",例如return "redirect:/main";,则客户端重定向到名为main的请求处理方法。
请求处理方法的返回值是ModelAndView对象时
若请求处理方法返回ModelAndView,调用setViewName方法设置需要转发的控制器,
服务器内部跳转到另一个请求处理方法
例如mv.setViewName("forward:/main");,则服务器内部跳转到名为main的请求处理方法。
客户端重定向到另一个请求处理方法
例如"mv.setviewName("redirect:/main");,则客户端重定向到名为main的请求处理方法。
原文链接: 3.2.6页面转发