0%

3.2.6页面转发

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页面转发