spring mvc的界面返回:
如果我們定義的返回類型是String 那么我們返回的時候直接寫入 我們的界面的名字就可以了 springmvc會自動去找到我們的界面,如果是void類型的返回那么 是沒有返回值的,如果沒有返回值這個時候我們定義了 請求信息但是沒有返回 跳出去那么 就會報錯 就需要自定義界面返回
/** * void定義的方法是沒有返回值的 如果我們想要定義返回值就需要 使用request和respone信息來進行定義 * @param request * @param response */ @RequestMapping("void") //controller請求 public void testvoid(HttpServletRequest request, HttpServletResponse response) throws Exception{ request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response); //你想要跳轉的界面
return;
}
還可以進行界面重定向
response.sendRedirect(request.getContextPath()+"/index.jsp"); //因為不定直接請求到WEB-INF下的界面我們只能請求webapp下的了
界面直接輸出:
@RequestMapping("/void") public void testvoid(HttpServletRequest request, HttpServletResponse response) throws Exception{ // request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response); //你想要跳轉的界面 //因為不定直接請求到WEB-INF下的界面我們只能請求webapp下的了 // response.sendRedirect(request.getContextPath()+"/index.jsp"); //設置中文亂碼 response.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=utf-8"); //直接請求進行的響應 response.getWriter().print("hello"); //界面直接輸出的是hello return; }
ModelAndView
返回值也可以直接定義是ModelAndView 的類型而不是字符串
@RequestMapping("/model") public ModelAndView testmodelandView(){ ModelAndView mv = new ModelAndView(); // modeladnView有兩個我們常用的屬性 User user = new User(); user.setUsername("老王"); user.setU_password("123456"); //addObject把一個對象傳遞到mv中然后添加到界面 mv.addObject("user",user); //設置跳轉的界面 mv.setViewName("user"); return mv; }
ResponseBody響應json數據
1. DispatcherServlet會攔截到所有的資源,導致一個問題就是靜態資源(img、css、js)也會被攔截到,從而
不能被使用。解決問題就是需要配置靜態資源不進行攔截,在springmvc.xml配置文件添加如下配置 1. mvc:resources標簽配置不過濾
1. location元素表示webapp目錄下的包下的所有文件
2. mapping元素表示以/static開頭的所有請求路徑,如/static/a 或者/static/a/b
<!-- 設置靜態資源不過濾 --> <mvc:resources location="/css/" mapping="/css/**"/><!-- 樣式 -->
<mvc:resources location="/images/" mapping="/images/**"/> <!-- 圖片 -->
<mvc:resources location="/js/" mapping="/js/**"/> <!-- javascript -->
使用@RequestBody獲取請求體數據
// 頁面加載 // 頁面加載 $(function(){ // 綁定點擊事件 $("#btn").click(function(){ $.ajax({ url:"user/testJson", contentType:"application/json;charset=UTF-8", data:'{"addressName":"aa","addressNum":100}', dataType:"json", type:"post", success:function(data){ alert(data); alert(data.addressName); } }); }); }); /**
上面是前端往后端發送數據那么是 json的 我們需要其余的包導入來進行轉化
json字符串和JavaBean對象互相轉換的過程中,需要使用jackson的jar包
<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-core</artifactId> <version>2.9.0</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency>
controller獲得請求體中的數據
* 獲取請求體的數據 * @param body */ @RequestMapping("/testJson") public void testJson(@RequestBody String body) { // 利用RequestBody的信息來進行前端json信息的獲取 System.out.println(body); // }
使用@RequestBody注解把json的字符串轉換成JavaBean的對象
上面是取出數據 那么我們傳遞的數據怎么把它轉化為 json呢 這個時候就要用到 @ResponseBody
@RequestMapping("/testJson") public @ResponseBody Address testJson(@RequestBody Address address) { System.out.println(address); address.setAddressName("上海"); return address; }