SpringMVC学习笔记(6):处理模型数据(1)

原创 2016年05月31日 01:12:25

既然我们使用的框架叫SpringMVC,那么模型就必不可少,每当我们发送一个请求,后台服务器进行计算和处理之后会返回模型数据,我们要将这个模型数据返回给客户端,通过将这些数据嵌入到一个页面中传递给用户,那么我们如何完成这一过程呢?SpringMVC提供了如下几种方法供我们使用:

  • ModelAndView
  • Map和Model
  • @SessionAttributes
  • @ModelAttribute

一、 ModelAndView

使用ModelAndView既可以包含视图信息也可以包含模型数据信息,当后台的请求处理器接收到请求时可以返回一个该类的对象,在这个对象中包含了相应的视图名和模型数据,具体的使用如下:
  • 设置视图名和模型数据首要方法就是使用ModelAndView的7个构造函数,这样是最直接的,如下:
public ModelAndView() {}

public ModelAndView(String viewName) {
	this.view = viewName;
}

public ModelAndView(View view) {
	this.view = view;
}

public ModelAndView(String viewName, Map<String, ?> model) {
	this.view = viewName;
	if (model != null) {
		getModelMap().addAllAttributes(model);
	}
}

public ModelAndView(View view, Map<String, ?> model) {
	this.view = view;
	if (model != null) {
		getModelMap().addAllAttributes(model);
	}
}

public ModelAndView(String viewName, String modelName, Object modelObject) {
	this.view = viewName;
	addObject(modelName, modelObject);
}

public ModelAndView(View view, String modelName, Object modelObject) {
	this.view = view;
	addObject(modelName, modelObject);
}
  • 设置视图可以使用:
public void setViewName(String viewName) {
	this.view = viewName;
}

public void setView(View view) {
	this.view = view;
}
  • 设置模型数据可以使用:
public ModelAndView addObject(String attributeName, Object attributeValue) {
	getModelMap().addAttribute(attributeName, attributeValue);
	return this;
}

public ModelAndView addAllObjects(Map<String, ?> modelMap) {
	getModelMap().addAllAttributes(modelMap);
	return this;
}
使用实例如下:
@RequestMapping(value="/renderView", method={RequestMethod.GET, RequestMethod.POST})
public ModelAndView renderView() {
	User user = new User();
	user.setName("lmy");
	user.setAge(20);
	
	ModelAndView view = new ModelAndView();
	view.addObject("name", "lmy");
	view.addObject("user", user);
	view.setViewName("show");
	return view;
}
前台页面是通过EL表达式的方式来完整模型数据的获取的,如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	user name: ${user.name}<br>
	user age: ${user.age}
</body>
</html>
整个在后台处理ModelAndView的过程就是当一个请求发送到后台之后,由DispatchServlet调度这个请求,然后将该请求发送到指定的请求处理器中,比如就是上面的renderView()方法,在其中将处理好的模型数据放到ModelAndView中,然后在通过该对象指定一个视图,然后将该ModelAndView对象返回给DispatchServlet,这个调度器会通过视图解析器找到对应的视图,并将相应的模型数据填充到其中,至此整个过程结束。

二、 Map和Model

在我们的请求处理器中可以加上Map或者Model类型的参数,这些类型主要是为了存储模型数据,它和ModelAndView的一个区别就是这些类型是没有存储视图信息,它是通过该请求处理器的返回值来返回一个视图名,其实在后台会将这些Map或者Model中的模型数据和返回的视图名再次封装成一个ModelAndView。
此外处理传递上述两种类型的参数,还可以传递如下类型的参数:

这些类型都是Map的实现类,但是并不经常使用,所以这里只是顺便提一下,我们常用的还是Map和Model这种类型,但是看到上述这几个还是要认识。
至于怎样获取这些模型数据并应用到视图中?Spring MVC 在调用方法前会创建一个 隐式的模型对象作为模型数据的存储器。如果方法的入参为 Map 或 Model 类型或其子类型,Spring MVC 会将隐含模型的引用传递给这些入参。在方法体内,开发者可以通过这个入参对象访问到模型中的所有数据,也可以向模型中添加新的属性数据,说的通俗点,是SpringMVC为我们已经创建好了模型存储器,我们只需要将往这里添加相应的数据即可,使用实例如下:
@RequestMapping(value="/renderView", method={RequestMethod.GET, RequestMethod.POST})
public String renderView1(Map<String, Object> map) {
	User user = new User();
	user.setName("lmy86263");
	user.setAge(24);
	map.put("user", user);
	return "show";
}
前台的页面和上面的ModelAndView的相同。

三、 @SessionAttributes注解

光看这个名字其实就很明显了,这些模型数据是存放在HttpSession中的,说明这里面的数据可以被多个请求所共享。这个注解不能使用在方法上,而是使用在控制器类上。另外它有两种使用方式:
  • 通过属性名指定需要放到会话中的属性;
  • 通过模型属性的对象类型指定哪些模型属性要放到Session中;
使用实例如下:
@SessionAttributes(names={"names"}, types={User.class})
@Controller
public class ViewController {
	@RequestMapping(value="/renderView1", method={RequestMethod.GET, RequestMethod.POST})
	public String renderView1(Map<String, Object> map) {
		User user = new User();
		user.setName("lmy86263");
		user.setAge(24);
		map.put("user", user);
		map.put("names", Arrays.asList("tom", "jack", "lmy"));
		return "show";
	}
}
前台页面如下:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	sessionScope: user name: ${sessionScope.user.name}<br>
	sessionScope: user age: ${sessionScope.user.age} <br>
	sessionScope: names: ${sessionScope.names} <br>
	
</body>
</html>
通过EL表达式中的隐含对象sessionScope来获取存储在HttpSession中的值。

相关文章:

版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

Spring MVC 3.0 深入及对注解的详细讲解

核心原理 1.       用户发送请求给服务器。url:user.do 2.       服务器收到请求。发现Dispatchservlet可以处理。于是调用Dispatch...

Spring框架中ModelAndView用法分享

【写在前面】:很久没写博客了,

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

SpringMVC 学习笔记(四) 处理模型数据

Spring MVC 提供了以下几种途径输出模型数据: – ModelAndView: 处理方法返回值类型为 ModelAndView时, 方法体即可通过该对象添加模型数据 – Map及Model:入...

SpringMVC 学习笔记(九) 自定义拦截器

Spring MVC也可以使用拦截器对请求进行拦截处理,用户 可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerInterceptor接口 ① preHandle():这个方法在业...

SpringMVC 学习笔记(五) 基于RESTful的CRUD

当提交的表单带有_method字段时,通过HiddenHttpMethodFilter 将 POST 请求转换成 DELETE、PUT请求,加上@PathVariable注解从而实现 RESTful ...

SpringMVC 学习笔记(六) 数据绑定和JSR校验

① Spring MVC 主框架将 ServletRequest 对象及目标方法的入参实例传递给 WebDataBinderFactory 实例,以创建 DataBinder 实例对象 ② DataB...

Spring MVC 传递模型数据到视图中方法总结

Spring MVC 传递模型数据到视图中的方法总结一般来说,有如下的4种方法来传递模型数据到视图中1、ModelAndView要求:处理方法返回值类型为 ModelAndView。在方法体中我们通过...

SpringMVC 学习笔记(三) 使用ServletAPI 和 实体 做为参数

Spring MVC 会按请求参数名和 实体类属性名进行自动匹配,自动为该对象填充属性值。支持级联属性 spirngMVC 支持 9种 参数 javax.servlet.ServletRequest...

SpringMVC 学习笔记(七) JSON返回:HttpMessageConverter作用

通过jackson返回JSON HttpMessageConverter 是 Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为 T),将对象(类型为 T)输出为响应信息 使用...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)