文献参考
http://www.monkey1024.com/framework/1288
http://www.cnblogs.com/dssjustdoit/articles/9387847.html
http://www.cnblogs.com/dssjustdoit/articles/9389087.html
http://www.cnblogs.com/dssjustdoit/articles/9390395.html
http://www.cnblogs.com/dssjustdoit/articles/9392477.html
http://www.cnblogs.com/dssjustdoit/articles/9395355.html
http://www.cnblogs.com/dssjustdoit/articles/9396743.html
http://www.cnblogs.com/dssjustdoit/articles/9402438.html
介绍
spring mvc底层其实就是一个servlet,因此在spring mvc中也存在转发和重定向的概念。对于转发的页面,可以是在WEB-INF目录下的页面;而重定向的页面,是不能在WEB-INF目录下的。因为重定向相当于用户再次发出一次请求,而用户是不能直接访问WEB-INF目录下的资源的。
根据索要跳转的的资源,可以分为跳转到jsp页面和跳转到其他controller。
NOTE 1:转发:操作是由servlet之间完成的,Request的数据可以共享.一个请求,一个响应.
NOTE 2 重定向:重定向的操作是由用户完成的,当第一个请求发送过去,服务器产生响应,然后由用户来进行第二次请求,,服务器再次做出回应,这边是重定向.
应用
1.返回ModelAndView时的请求转发
package com.dss.controller; /* * spring MVC 的重定向和转发 * */ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class ForwardRedirectController { /* * 返回ModelAndView对象的转发 * */ @RequestMapping("/forwardMAV.do") public ModelAndView forwardMAV() throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("type","返回ModelAndView对象的转发"); //默认使用转发来进行跳转 //mv.setViewName("/result"); mv.setViewName("forward:redirect.do"); return mv; } /* * 被跳转的controller * */ @RequestMapping("/redirect.do") public ModelAndView redirect() throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("content","返回跳转的controller"); mv.setViewName("result"); return mv; } }
在这里,也只改动了controller和jsp的内容,其他的配置文件请参考上面的链接(哈哈,自己找吧)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${type} <br> ${content } </body> </html>
访问结果:
注:从一个controller跳转到另一个controller.
2.ModelAndView的重定向
ForwardRedirectController.java
package com.dss.controller; /* * spring MVC 的重定向和转发 * */ import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class ForwardRedirectController { /* * 返回ModelAndView对象的转发 * */ @RequestMapping("/forwardMAV.do") public ModelAndView forwardMAV() throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("type","返回ModelAndView对象的转发"); //默认使用转发来进行跳转 //mv.setViewName("/result"); mv.setViewName("forward:redirect.do"); return mv; } /* * ModelAndView的重定向 * * */ @RequestMapping("/redirectMAV.do") public ModelAndView redirectMAV() throws Exception{ ModelAndView mv = new ModelAndView(); mv.addObject("type","the redirect of the ModelAndView"); mv.setViewName("redirect:/jsp/result.jsp"); return mv; } }
result.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> ${param.type} </body> </html>
重定向:
重定向成功了,但是,这样存在这一个问题,ModelAndView冲定向时会有中文参数乱码,一直也没找到解决办法.
等找到了再补上吧.