根据处理器方法返回值类型的不同,其具体实现请求转发与重定向的方式不同,但总体差不多。需要请求转发,则在视图名称前添加"forward:",当然请求转发是默认值,不写会按默认值来对待;如果需要重定向,则在视图名称前添加"redirect:"。但需要注意一点,一旦添加了forward或者redirect,则InternalResourceviewResolver内部资源视图解析器的前缀与后缀将不起作用。
一、返回ModelAndView请求转发:
1、请求转发到视图:
![](https://i-blog.csdnimg.cn/blog_migrate/7980106c442bb0ec9ee0fddaafea03e2.jpeg)
2、请求转发到处理器方法:
![](https://i-blog.csdnimg.cn/blog_migrate/013bdbf38c5bf3e4f469374463f2a4da.jpeg)
二、返回ModelAndView重定向:
1、重定向到视图:
![](https://i-blog.csdnimg.cn/blog_migrate/4f7d87a05a3080582261ce50d934cc9c.jpeg)
2、重定向到处理器方法:
![](https://i-blog.csdnimg.cn/blog_migrate/ddaaef8ee8914bcc0482667d4b67c6a7.jpeg)
三、返回String请求转发:
![](https://i-blog.csdnimg.cn/blog_migrate/20d5d38eb11e39a3f72dc8835c77121d.jpeg)
四、返回String重定向:
![](https://i-blog.csdnimg.cn/blog_migrate/1ed7e00afa4c027ed0a908c97bf4d972.jpeg)
五、返回void时请求转发和重定向以及携带参数可以通过request,response完成。
六、请求转发可以直接携带参数,在页面通过${param.name}可以获取到,如果传递过去的是个实体,可以通过${student}获取到。
七:重定向携带参数问题:
1、使用ModelAndView:
2、使用Model:
![](https://i-blog.csdnimg.cn/blog_migrate/fe88c75bd3744ae4a86696af31c7518a.jpeg)
这里的Model要区别与ModelAndView里的Model,Model是个接口,而ModelAndView里的Model是个ModeMap的类。
3、使用RedirectAttributes:
![](https://i-blog.csdnimg.cn/blog_migrate/e2e1e54b9f35f1f84b4ec0c2413fbfcd.jpeg)
使用这个需要在容器里添加mvc注解驱动。
4、使用HttpSession:
![](https://i-blog.csdnimg.cn/blog_migrate/615e8003de3f533ce2ad8f32f3fcd4eb.jpeg)
使用这个在页面获取参数,应是${name},而不是${param.name}。