【Spring】SpringMVC 作用域传值的 4 种方式

一、四大作用域复习

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}
发布了574 篇原创文章 · 获赞 203 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/sinat_42483341/article/details/104076267
今日推荐