1. 程式人生 > 其它 >SpringMVC跳轉,響應返回json

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物件陣列,然後在

瀏覽器上打印出來即可。