SpringMVC
来源:互联网 发布:php源码修改工具 编辑:程序博客网 时间:2024/05/21 10:08
forward 转发,如return “forward:/hello”; 浏览器的地址栏不会变,但是有视图返回来
redirect 重定向,如return “redirect:/hello”; 浏览器的地址栏会变。
spring控制器最后返回一个ModelAndView(urlName)点击查看视图详解过程 , 其中urNamel可以是一个视图名称,由视图解析器负责解析后将响应流写回客户端;也可以通过redirect/forward:url方式转到另一个控制器进行处理.
redirect方式
相当于”response.sendRedirect()”.这种方式外部特征就是浏览器地址栏最后显示的路径是转发后的新的路径.
工作方式是这样的, 服务器端会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.这种方式的结果是:
A.在转发前后有两个不同的request对象,转发前后的两个控制器在request上的参数(request.getParameter())和request属性(request.getAttribute())不能共享;
B.如果转发前后的两个控制器都配置在spring 拦截器范围内,这样拦截器会拦截前后两个request,即会拦截两次;
C.最后返回到浏览器后,因为地址栏显示的是转发后的url,所以刷新页面时只会执行后面的url映射的控制器.
forward方式:
相当于request.getRequestDispatcher().forward(request,response),这种方式的外部特征是浏览器地址显示的路径是转发前的路径.工作方式是这样,forward 发生在服务器内部,在前一个控制器处理完毕后,直接进入下一个控制器处理, 并将最后的response发给浏览器. 这种方式的结果是:
A.转发前后是同一个request,后一个控制器可共享前一个控制器的参数与属性;
B.因为是同一个request,拦截器只会拦截前一个url,如果前一个url在映射时未配置到拦截器拦截,则拦截后一个url,即只拦截一次;
C.最后返回到浏览器后,因为地址栏显示的是转发前的url,所以刷新页面时会依次执行前后两个控制器.
【forward:/index2.jsp】
- index.jsp 页面
<a href="springmvc/testForward">Test Redirect</a>
- Controller
@RequestMapping("/testForward") public String testForward(){ System.out.println("testForward"); return "forward:/index2.jsp"; }
- result as follows :
可以看到浏览器链接为请求链接,并没有发生二次改变,但是页面已经是index2.jsp !
【forward:testMap】
即,转发对象为另一个方法的@RequestMapping!
JSP页面不变,更改后台测试方法。
@RequestMapping("/testForward") public String testForward(){ System.out.println("testForward"); return "forward:testMap";// 因为这里是同一个类的另一个方法,故没有 / --- /相对于项目根目录! }
- result as follows :
可以看到,链接未发生改变,仍为请求链接!但是页面在 success.jsp !
【redirect:/index2.jsp】
- JSP 页面
<a href="springmvc/testRedirect">Test Redirect</a>
- Controller
@RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("testRedirect"); return "redirect:/index2.jsp";//'/'表示相对于项目根目录 }
- result as follows :
可以看到页面在index2.jsp,但是url 已经发生了改变!
【redirect:testMap】
jsp 页面不变,更改后台方法。
@RequestMapping("/testRedirect") public String testRedirect(){ System.out.println("testRedirect");// return "redirect:/index2.jsp";//'/'表示相对于项目根目录 return "redirect:testMap";//'/'表示相对于项目根目录 }
- result as follows:
JSP页面请求的url 为springmvc/testRedirect;
重定向到springmvc/testMap
此时在success.jsp页面,URL也发生了改变!
Tips :
转发是服务器的操作,重定向是浏览器的操作!
- SpringMVC
- springmvc
- SpringMVC
- SpringMVC
- springMvc
- springMVC
- springmvc
- springMVC
- springMVC
- springmvc
- SpringMVC
- SpringMVC
- springMvc
- springmvc
- springmvc
- SpringMVC
- Springmvc
- springmvc
- 将1格式化为0001字符串格式化String.format
- 小技巧汇总
- netstat 使用详解
- union all和union的区别
- 抽象工厂
- SpringMVC
- 关于jQuery.inArray(),字符串数组中不可能找到数字问题
- 集合--集合框架中的接口与具体的集合
- AngularJS 双向绑定 <input type='file'>中文件名,文件内容
- [NGINX]
- 1063. 计算谱半径(20)
- Oracle11G-SQL开发指南-3-使用SQL PLUS
- HTml5侧边栏基本格式制作
- break和continue的区别