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");
客户端重定向特点
客户端重定向无法访问WEB-INF下的资源文件
需要注意的是,由于客户端重定向(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
的请求处理方法。