SpringMVC跳轉,響應返回json
1:Springmvc響應跳轉方式
回顧:
1:springmvc執行的原理
2:springmvc如何接受使用者傳遞過來的引數 -- 通過方法的形參,方法的引數列表中進行宣告即可。
3:springmvc如何解決引數的key和形參不一致的情況, requestParam可以解決,有value, required, default
4:如果客戶端傳遞過來的引數比較多,springmvc如何接受, 判斷下,能不能封裝成一個物件,可以的話,就用物件,HashMap
5:使用者的請求到底是如何到達指定的方法的, 請求對映註解,requestMapping, 類 + 方法
6: requestParam作用,接受引數的,如果沒有value,則表示接受所有的引數,如果有value,則表示接受指定的引數並完成封裝
7:requestMapping作用, 1: 請求對映, 2:限制客戶端的請求方式、
8:springmvc和struts區別
轉發:
1:新增成功跳轉到成功頁面,給出提示,失敗跳轉到失敗頁面 ---- jsp
2:新增成功後,跳轉到查詢的controller中 -- 另外一個程式,新增完成之後,執行查詢所有的操作,跳轉到所有的使用者列表
3:在查詢的controller中是否能夠獲取第一個controller中傳遞的引數
重定向:
1:新增成功之後重定向到頁面,失敗後也是定向到失敗頁面
2:使用重定向,跳轉到controller中的其他方法
3:重定向跳轉到第二個controller中,獲取引數
1:轉發
1:轉發到頁面
注意:springmvc預設使用的就是轉發技術,
完整的寫法是:return “forward:/xx.jsp”; / - 指的是web目錄,一層一層往下查詢,注意:此時不走springmvc的試圖解析器。
如果希望返回時走試圖解析器的話,直接寫一個簡單的字串即可,如:return “hello”;此時就會做檢視的拼接。
2:轉發到controller
轉發到其他的方法:
完整的寫法為: return “forward:/類上的路徑/方法上的路徑.do”; 這個是通用
如果呼叫方法和目標方法在同一個類中,則可以簡化寫法:return “方法上的路徑.do”;
3:轉發攜帶引數
可以使用request物件來傳遞引數
/* * 需求 : 新增員工資訊, * 成功,--- 》 轉發到某一個具體的頁面 ---- 》 恭喜你,新增成功了 * 失敗了 --- 》 控制檯列印新增失敗,頁面跳轉到首頁 ---- 》 首頁展示的是所有員工資訊,呼叫的是一個查詢所有的方法 * 轉發帶引數的問題,如果是轉發的話,如何在另外一個程式中獲取第一個程式儲存的引數 * * */ @RequestMapping("/addEmp.do") public String addEmp(String chineseName, String englishName , String pwd, HttpServletRequest request){ // 我現在有一個員工的集合,如果使用者輸入的內容已經存在了,就不讓他添加了 List emps = new ArrayList(); emps.add("lili"); emps.add("xiaoli"); emps.add("wenwen"); emps.add("ming"); boolean b = emps.contains(englishName); // 如果有的話則返回true if(!b){ //新增成功 System.out.println("ok!!!!"); // 預設使用的就是轉發,轉發到具體的頁面 , // 如果是一個簡單的字串的話,則表示的是檢視的名稱,會走檢視解析器進行檢視的拼接 // return "ok"; // 和下面的寫法效果是一樣的,這個是走檢視解析器的, // return "forward:/WEB-INF/views/ok.jsp"; // 不走檢視解析器, // 訪問另外一個方法的時候,攜帶引數的 // 轉發 : 如何將這個方法中的引數,寫到到另外一個方法中 ? // 使用request Emp emp = new Emp(chineseName,englishName,pwd); request.setAttribute("emp",emp); return "forward:/getEmps.do"; }else{ //失敗了 // 如果不希望你的程式走檢視解析器的話,則必須要使用完整的寫法 // forward:/ == /表示的是web這個資料夾 // 不能直接的回到首頁,因為首頁沒有資料 // 如果需要首頁有資料的話,應該呼叫下面的查詢所有的方法,查詢所有的方法執行完成之後,返回首頁 // return "forward:/index.jsp"; // 轉發到頁面 //轉發到方法 , 執行其他方法 , // 如果是轉發的話,則語法是 : forward:/ 類上的mapping/方法上的mapping return "forward:/getEmps.do"; } } //查詢所有的方法 @RequestMapping("/getEmps.do") public String getEmps(HttpServletRequest request){ System.out.println("getEmps.do -----------"); List emps = new ArrayList(); Emp e1 = new Emp("麗麗","lili","lili"); Emp e2 = new Emp("琪琪","qiqi","qiqi"); Emp e3 = new Emp("肖肖","bigxiao","smallxiao"); emps.add(e1); emps.add(e2); emps.add(e3); Object emp = request.getAttribute("emp"); System.out.println(emp);
emps.add(emp); // 將使用者輸入的emp物件新增到容器中
request.setAttribute("emps",emps);
return "forward:/index.jsp";
}
2:重定向
1:重定向到頁面
語法 : return “redirect:/xxx.jsp”
注意:重定向也需要 /
需求:使用者登入錯誤之後重定向到登入頁面
2:重定向到controller
return “redirect:/類上的requestMapping / 方法上的requestMapping ”
需求:登入成功之後,重定向到另外一個controller中的查詢所有使用者的方法,返回所有使用者的列表
3:重定向攜帶引數問題
1:url的拼接
2:使用session傳遞具體的值
3:使用redirectAttributes 這個介面,在接受方法引數的前面要使用@ModelAttribute("key")來接受
3:springmvc兩種跳轉方式總結
轉發:
轉發到頁面:return “forward:/具體的頁面.jsp”; 如果配置了檢視解析器的話同時頁面也在指定的位置,return “檢視名稱”;
轉發到方法:return “forward:/類上的路徑/方法上的路徑.do”, 如果目標方法是在一個類中的,可以直接寫方法上的路徑,return “queryUsers.do”;
引數攜帶:request,sesssion
重定向:
重定向到頁面: return “redirect:/具體的頁面.jsp”
重定向到方法: return “redirect:/類上的路徑/方法上路徑”;
引數的攜帶:1,url的拼接,2:session, 3:RedirectAttributes,在接受的時候要使用@ModelAttribute("key")
2:響應時返回json
使用jackson , 使用的時候需要導包
可以將java物件轉換為json物件,在方法上新增@ResponseBody 註解即可
作用:java物件 --- 》 json物件
Java集合 -- 》 json陣列
補充:如果前端傳遞過來的是json物件呢
Json -- > java 物件 需要使用一個註解 @RequestBody
-1、導包
-2、使用提供的方法進行轉換
@requestBody json物件 -- 》 java物件
@responseBody java物件 ---》json物件
1、下載jaskson的依賴
2、使用
1)前端傳送ajax請求, - 新增使用者,事件,獲取每一個輸入框的值,封裝成json, --- > 訪問伺服器
Controller中接受前端傳遞的json資料,將json物件轉換為java物件即可,列印
2)傳送查詢所有的請求,查詢所有資料(controller中準備一個集合),轉換為json物件陣列,然後在
瀏覽器上打印出來即可。