一、四大作用域复习
2.1 page
2.1.1 在当前页面不会重新实例化.
2.2 request
2.2.1 在一次请求中同一个对象,下次请求重新实例化一个request 对象.
2.3 session
2.3.1 一次会话.
2.3.2 只要客户端Cookie 中传递的Jsessionid 不变,Session 不会重新实力化(不超过默认时间.)
2.3.3 实际有效时间:
2.3.3.1 浏览器关闭.Cookie 失效.
2.3.3.2 默认时间.在时间范围内无任何交互.在tomcat 的web.xml 中配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
2.4 application
2.4.1 只有在tomcat 启动项目时菜实例化.关闭 tomcat 时销毁application
二、SpringMVC 作用域传值的几种方式
1. 使用原生 Servlet
1.1 在 HanlderMethod 参数中添加作用域对象
Java示例
@Controller
public class DemoHttpRequest {
@RequestMapping("request")
public String demo1(HttpServletRequest request, HttpSession httpSession) {
// request 作用域
request.setAttribute("req", "req的值");
// session 作用域
HttpSession session = request.getSession();
session.setAttribute("session", "session的值");
httpSession.setAttribute("httpSession", "httpSession的值");
// application 作用域
ServletContext application = request.getServletContext();
application.setAttribute("application", "application的值");
return "requestpage.jsp";
}
}
JSP示例
<h3>全名称调用方式:</h3>
request:${requestScope.req}<br/>
session:${sessionScope.session}<br/>
httpSession:${sessionScope.httpSession}<br/>
application:${applicationScope.application}<br/>
<hr>
<h3>简化名称调用方式:</h3>
request:${req}<br/>
session:${session}<br/>
httpSession:${httpSession}<br/>
application:${application}<br/>
2. 使用 Map
集合
2.1 把map 中内容放在 request 作用域中
2.2 spring 会对 map 集合通过 BindingAwareModelMap
进行实例化
Java示例
@RequestMapping(value = "demo2")
public String demo2(@RequestParam(value = "name", defaultValue = "游客") String name1,
@RequestParam(value = "age", defaultValue = "66") int age1) {
// 此处使用注解添加默认值,避免因int类型无法赋值为 Null 导致的异常;
// 或者还有一种方式是使用 Integer 对象,可以赋值为 Null
// required: true 和 defaultValue 不要一起使用,否则始终具有默认值,required 检验恒通过,没有意义。
System.out.println("In DemoController demo2, name1 = " + name1 + ", age1 = " + age1);
return "main2.jsp";
}
JSP示例
map:${map}
3. 使用 SpringMVC 中 Model
接口
3.1 把内容最终放入到 request 作用域中.
Java示例
// 使用model,把内容最终放入到request作用域中。好处是不用写request。
@RequestMapping("request2")
public String demo3(Model model) {
model.addAttribute("model", "model的值");
return "requestpage.jsp";
}
JSP示例
model:${model}
4.使用 SpringMVC 中 ModelAndView
类
Java示例
@RequestMapping("request3")
public ModelAndView demo4() {
// 参数,跳转视图
ModelAndView modelAndView = new ModelAndView("requestpage.jsp");
modelAndView.addObject("modelAndView", "modelAndView的值");
return modelAndView;
}
JSP示例
ModelAndView:${modelAndView}