一: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()
<!-- 配置試圖解析器--> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/"/> <!-- 所有的前端界面都在webapp目錄下--> <property name="suffix" value=".jsp"/><!--所有的返回界面都事.jsp結尾的--> </bean>
直接返回字符串
直接返回字符串
返回對象或集合
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"%>
前端
jsp界面
<%--<%@ page contentType="text/html;charset=UTF-8" language="java" %>--%> <%--如果需要使用后el表達式需要將自帶的界面設置修改為以下的--%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <html> <head> <title>Title</title> </head> <body> This is oneDy; <%--jsp界面取值modelAndView中的值,直接${}就可以--%> ${username} </body> </html>
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
在方法上添加@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/> `
.