1.代码:
@RequestMapping(value = "/quick3")
public ModelAndView hello3(){
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("key2","李四");
modelAndView.setViewName("redirect:/jsp/hello.jsp");
return modelAndView;
}
复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>hello MVC ${key2}</h1>
</body>
</html>
复制代码
2.测试
可以看到,并没有取到key2对应的值
3.分析
1.modelAndView.addObject()方法是将一个键值对存进request域中
2.而request域的作用范围是在一次请求中有效
3.而重定向是两次请求,(可以理解为,客户端向服务端发请求,服务端说我解决不了,但给了一个可以解决的地址,客户端发第二次请求),故重定向到jsp后,requst域已失效,设置的键值对不存在了
4.拓展 jsp四大作用域 (转载)
SP四大作用域分别为:page, request ,session, application 。
第一个作用域是page,他只在当前页面有效,也就是用户请求的页面有效,当当前页面关闭或转到其他页面时,page对象将在响应回馈给客户端后释放。
第二个作用域是request,他在当前请求中有效,request可以通过setAttribute()方法实现页面中的信息传递,也可以通过forward()方法进行页面间的跳转,需要注意的是request是转发不是重定向,转发相对于浏览器来说是透明的,也就是无论页面如何跳转,地址栏上显示的依旧是最初的地址。
第三个作用域是session,他在当前回话中有效。当一个台电脑上的同一浏览器对服务器进行多次访问时,在这多次访问之间传递的信息就是session作用域的范围。它从浏览器发出第一个HTTP请求即可认为会话开始,但是会话结束的时间是不确定的,因为在浏览器关闭时并不会通知服务器,一般Tomcat设置的默认时间为120分钟,也可以通过setMaxInactiveInterval(int)方法进行设置,或是通过invalidate()方法强制结束当前会话。
第四个作用域是application,他在所有的应用程序中都有效,也就是当服务器开始到服务器结束这段时间,application作用域中存储的数据都是有效的,同样可以通过setAttribute赋值和getAttribute取值。