一:SpringMVC 输出模型数据
springMVC提供了以下几种途径输出模型数据
1) ModelAndView: 处理方法返回值类型为 ModelAndView 时, 方法体即可通过该对象添加模型数据
2) Map 或 Model: 入参为 org.springframework.ui.Model、
org.springframework.ui.ModelMap 或 java.uti.Map 时,处理方法返回时,Map 中的数据会自动添加到模型中。
1.1 ModelAndView介绍
控制器处理方法的返回值如果为 ModelAndView, 则其既包含视图信息,也包含模型数据信息。(我们返回界面的时候想携带参数给界面,可以使用ModelAdnView)
1) 两个重要的成员变量:
MoelAndView addObject(String attributeName, Object attributeValue) 设置模型数据 ModelAndView addAllObject(Map<String, ?> modelMap)
3)添加模型数据:
MoelAndView addObject(String attributeName, Object attributeValue) 设置模型数据 ModelAndView addAllObject(Map<String, ?> modelMap)
4)设置视图:
void setView(View view) 设置视图对象
void setViewName(String viewName) 设置视图名字
5)获取模型数据
protected Map<String, Object> getModelInternal() 获取模型数据 public ModelMap getModelMap() public Map<String, Object> getModel()
直接返回字符串
直接返回字符串
返回对象或集合
02-SpringMVC的数据响应-页面跳转-返回字符串形式(应用)
在Controller中方法返回ModelAndView对象,并且设置视图名称
/** * 在Controller中方法返回ModelAndView对象,并且设置视图名称 * @return */ @RequestMapping(value = "quickOne",method = RequestMethod.GET) public ModelAndView quick(){ /* model:模型,作用封装数据 view: 视图,用作展示数据 */ ModelAndView modelAndView = new ModelAndView(); //设置返回的数据 modelAndView.addObject("username","我是ModelAndView"); //设置返回的视图 modelAndView.setViewName("quick"); return modelAndView; }
在跳转视图的时候前端的el表达式无法解析的时候就
在前端上加入以下标签让其不屏蔽el表达式
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" isELIgnored="false"%>
04-SpringMVC的数据响应-页面跳转-返回ModelAndView形式2(应用)
在Controller中方法形参上直接声明ModelAndView,无需在方法中自己创建,在方法中直接使用该对象设置视图,同样可以跳转页面
@RequestMapping(value = "/quickTwo") public ModelAndView quick1(ModelAndView modelAndView){ // springMvc可以给你的参数进行自动注入,不需要你的这个形参再去手动实例化赋值了 modelAndView.addObject("username","我是自动赋值的ModelAndView"); modelAndView.setViewName("quick"); return modelAndView; }
/** * 使用原生的HttpServeltRequest对象,将参数放置在request域中 * @param request * @return */ @RequestMapping(value = "/quickFour") public String quick3(HttpServletRequest request){ request.setAttribute("username","我是参数放置在request域中的"); return "quick"; }
通过SpringMVC框架注入的response对象,使用response.getWriter().print(“hello world”) 回写数据,此时不需要视图跳转,业务方法返回值为void
/** * RrsponseBody注解不进行视图跳转,直接进行数据响应 * @return */ @RequestMapping("/quickSeven") @ResponseBody //告知SpringMVC框架 不进行视图跳转 直接进行数据响应 public String quick6(){ return "你好,我是直接返回数据的responseBody注解的方法"; }
@RequestMapping("/quickSix") public void quick5(HttpServletResponse response) throws IOException { response.getWriter().println("hello"); // 直接返回数据,不返回特定界面 }
07-SpringMVC的数据响应-回写数据-直接回写json格式字符串(应用)
/** * 直接回写json字符串 * @return */ @RequestMapping("/quickEight") @ResponseBody public String quick7(){ return "{"username":"zhangsan","age":18}"; }
手动拼接json格式字符串的方式很麻烦,开发中往往要将复杂的java对象转换成json格式的字符串,我们可以使用web阶段学习过的json转换工具jackson进行转换,通过jackson转换json格式字符串,回写字符串
<!-- 导入json转化的包--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
@RequestMapping(value="/quick9") @ResponseBody public String save9() throws IOException { User user = new User(); user.setUsername("lisi"); user.setAge(30); //使用json的转换工具将对象转换成json格式字符串在返回 ObjectMapper objectMapper = new ObjectMapper(); String json = objectMapper.writeValueAsString(user); return json; }
<!-- 配置处理器映射器,将你的返回的集合可以直接以json格式返回--> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="messageConverters"> <list> <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/> </list> </property> </bean>
@RequestMapping("/quickNine") @ResponseBody //期望SpringMVC自动将User转化为json格式的字符串 public User quick8(){ User user = new User(); user.setUsername("li"); user.setAge(30); return user; //直接返回User用户对象的数据 因为springMVC.xml中已经配置了处理器映射器,所以可以直接返回json格式 }
上面返回对象或者集合的方法太繁琐了我们可以直接使用注解驱动来代替
09-SpringMVC的数据响应-回写数据-返回对象或集合2(应用)
在方法上添加@ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc的注解驱动代替上述配置
在springMVC.xml中配置
<mvc:annotation-driven/>
首先要在springMVC中导入mvc命名空间
@RequestMapping("/quickNine") @ResponseBody //期望SpringMVC自动将User转化为json格式的字符串 public User quick8(){ User user = new User(); user.setUsername("li"); user.setAge(30); return user; //直接返回User用户对象的数据 因为springMVC.xml中已经配置了注解驱动,所以可以直接返回json格式 }
在 SpringMVC 的各个组件中,处理器映射器、处理器适配器、视图解析器称为 SpringMVC 的三大组件。
使用<mvc:annotation-driven />
自动加载 RequestMappingHandlerMapping(处理映射器)和
RequestMappingHandlerAdapter( 处 理 适 配 器 ),可用在Spring-xml.xml配置文件中使用
<mvc:annotation-driven />
替代注解处理器和适配器的配置。
默认底层就会集成jackson进行对象或集合的json格式字符串的转换
/** * Model是只设置返回的参数,界面要搭配return来返回,所以我们使用Model要搭配return来使用 * @param model * @return */ @RequestMapping(value = "/quickFive") public String quick4(Model model){ model.addAttribute("username","我是只设置参数的Model"); return "quick"; // Model设置并返回了参数,界面就直接以return来返回 }
SpringMVC的数据响应-知识要点小结(理解,记忆)
1) 页面跳转 直接返回字符串 通过ModelAndView对象返回 2) 回写数据 直接返回字符串 HttpServletResponse 对象直接写回数据,HttpServletRequest对象带回数据,Model对象带回数据或者@ResponseBody将字符串数据写回 返回对象或集合 @ResponseBody+`<mvc:annotation-driven/> `
.