1、模型数据的ModelAndView
①返回值和返回类型是ModelAndView及对象,如果返回的是String的话,request域对象会拿不到ModelAndView的model的数据
②ModelAndView中可以包含视图和模型信息
③SpringMVC会把ModelAndView的model数据放到request域对象中
④注意:初始化ModelAndView的时候需要把name写上(即需要返回的页面名字) 如:ModelAndView modelAndView = new ModelAndView(name);
⑤SpringMVC支持为目标方法添加Map类型参数(可以是Model类型或者ModelMap类型)
2、模型数据的SessionAttributes
①可以通过属性名指定需要放到回话中的属性(SessionAttributes的value参数的属性值)
②可以通过模型属性的对象类型指定那些模型属性需要放到回话中(SessionAttributes的types参数的属性值)
③注意:@SessionAttributes注解只能放到类上面,只能修饰类
④添加@SessionAttributes注解之后,当程序为域对象赋值的时候会同时会为Session赋值
3、@ModelAttribute
运行顺序
①执行@ModelAttribute修饰的方法,把初始的或者数据库取出的对象放到Map中)
②SpringMVC从Map中取出数据,并把表单请求参数赋值给该对象对应值
③SpringMVC把上面的对象传入目标方法的参数中
④@ModelAttribute修饰的方法中,放入到Map时的键,如果没有特别使用@ModelAttribute修的的话,会和目标方法入参类型的小写首字母的字符串一致
⑤使用@SessionAttributes的时候,要不需要有@ModelAttribute修饰的方法,要不就需要在目标方法的入参里面用@ModelAttribute修饰入参,让隐含的模型对象中存在@SessionAttributes需要的key
⑥调用逻辑顺序
1、Spring MVC 在调用处理方法之前,在请求线程中自动的创建一个隐含的模型对象
2、判断隐含的模型对象是否已经有 @ModelAttribute的属性值①如果有:将 @ModelAttribute的属性值赋值到入参(定义的dao对象属性)的相应属性,并返回
②如果没有:不进行后面的步骤
3、判断调用的方法所在的标注了@Controller类中,有没有@SessionAttributes修饰
①如果有:查看Session中是否存在@SessionAttributes的属性值,并且把该属性值添加到隐含的模型对象中,如果该属性值已经存在于隐含的模型对象中,则原来的属性值会被覆盖,如果不存在该属性值,则抛出异常 HttpSessionRequiredException
②如果没有:继续下一步
3-1、通过反射创建POJO类型的参数,并将其赋值给入参(定义的dao对象属性),并将用户的请求消息 赋值给入参的相应属性
4、把key和value存入隐含的模型对象,在保存到request中
5、SpringMVC调用每个方法前,都会调用@ModelAttribute标记的方法
4、再次提醒 注意事项:
①当handler方法使用ModelAndView对象时,返回值是String的时候,request域对象会拿不到ModelAndView的model的数据
②初始化ModelAndView的时候需要把name写上
③SpringMVC支持为目标方法添加Map类型参数
④@SessionAttributes注解只能放到类上面,只能修饰类
⑤添加@SessionAttributes注解之后,当程序为域对象赋值的时候会同时会Session赋值
⑥@ModelAttribute修饰的方法中,放入到Map时的键,如果没有特别使用@ModelAttribute修的的话,会和目标方法入参类型的小写首字母的字符串一致
⑦使用@SessionAttributes的时候,要不需要有@ModelAttribute修饰的方法,要不就需要在目标方法的入参里面用@ModelAttribute修饰入参,让隐含的模型对象中存在@SessionAttributes需要的key
5、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<display-name>SpringMVC_5_Model</display-name>
<servlet>
<servlet-name>springDispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
6、springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://