SpringMVC 學習筆記(請求方法的返回值和參數)


在用注解對配置 處理器時,一般是一個方法處理一個請求,不同方法的返回類型有着不同的意義。

返回值為 ModelAndView 類型

  ModelAndView 是Model 和 View 的一個集合類型,其中Model 是一個Map類型的空間,其主要用來存儲頁面請求的返回數據

  而view 則一般是用來存儲 請求數據 將要被 接收的 頁面(一般為頁面名稱),也是服務器響應的頁面(即前端得到響應后要顯示的頁面)

@RequestMapping("/find.action")
    public ModelAndView findUser(){
        List<User> users = us.findAllUsers();
        ModelAndView mav = new ModelAndView();
        mav.addObject("users", users);
        mav.setViewName("showUser");//使用轉發
        return mav;
    }

返回值 為 String 類型(比較常用)

   如果controller方法返回string,

      1、表示返回邏輯視圖名。

          真正視圖(jsp路徑)=前綴+邏輯視圖名+后綴    return "index"

      2、redirect重定向

          redirect重定向特點:瀏覽器地址欄中的url會變化。修改提交的request數據無法傳到重定向的地址。因為重定向后重新進行request(request無法共享)

                                   return "redirect:xxx.action"  重定向到另一個Action 請求中

      3、forward頁面轉發

          通過forward進行頁面轉發,瀏覽器地址欄url不變,request可以共享。

           return "forward:xxx.action"

返回值為void 時

  在controller方法形參上可以定義request和response,使用request或response指定響應結果:

    1、使用request轉向頁面,如下:

      request.getRequestDispatcher("頁面路徑").forward(request, response);

    2、也可以通過response頁面重定向:

      response.sendRedirect("url")

    3、也可以通過response指定響應結果,例如響應json數據如下:

      response.setCharacterEncoding("utf-8");

      response.setContentType("application/json;charset=utf-8");

      response.getWriter().write("json串");

@RequestMapping("/find.action")

   public void findUser(HttpServletRequest request,HttpServletResponse response){

      //使用原始servlet的形式進行數據和頁面的處理

   }

 

請求參數:

  客戶端的請求參數一般是k/v的結構  key=value  如 id=1&name="zhangsan";

  springmvc中,接收頁面提交的數據是通過方法形參來接收的;

  

//前台頁面發送xxxx?name=zhangsan&pwd=123的請求,springmvc將
    //name設為參數user的name屬性值
    //pwd設為參數user的pwd屬性值
    //如果請求參數名和參數對象的屬性名不一致,不會注入
    @RequestMapping(value="/save.action",method=RequestMethod.POST)
    public String saveUser(User user){
//         User user = new User();
//         user.setName(name);
//         user.setPwd(pwd);
         us.saveUser(user);
         return "redirect:find.action";
    }

一般類型的參數是可以直接被直接注入進對象的同名屬性的,對日期數據綁定需要自定義converter(轉換器)

  進行參數綁定時的注解:

    1、@requestParam()

                      該注釋可以將請求的字符串轉換為簡單的數據類型 如:test(@requestParam("id") int id)

      也可以匹配不是同名的參數 如:test(@requestParam("username") String name)

      也可以設置參數的必需屬性 如:test(int id ,@requestParam("username" , required=true) String name)  此時,如果請求參數中沒有username這個值是,就會報錯      

      三種寫法,test(String name), 
          test(@RequestParam String name), 
          test(@RequestParam("userName") String name), 
          第一種如果沒有name 參數不會報錯, 
          第二種沒有name 參數會報錯,(也可以設置required = false), 
          第三種跟第二種的區別是 請求的參數名userName轉換成方法的參數name

    2、@ModelAttribute   該注解有兩個用法,一個是用於方法上,一個是用於參數上;

      用於方法上時:  通常用來在處理@RequestMapping之前,為請求綁定需要從后台查詢的model;即在執行@RequestMapping 的方法之前 執行 @ModelAttribute的方法 將相關參數放到請求域中(默認都是存放在請求域中的)

    //這個方法找到了一個User,並且把這個User放入到ModelAttribute中的user屬性
    //@ModelAttribute修飾的方法一定會在@RequestMapping方法前執行
    @ModelAttribute("user")
    public User findUser(){
        User user = us.findUserById(9);
        return user;
    }

      

    用於參數上時: 用來通過名稱對應,把相應名稱參數的值綁定到注解的參數bean上;要綁定的值來源於

      A) @SessionAttributes("name") 啟用的session域的attribute 對象上;(即方法的形參的值來源於session域中的 name 的值)

      B) @ModelAttribute(“name”) 用於方法上時指定的model對象;(即方法的形參的值來源於請求域中的 name 的值)

      C) 上述兩種情況都沒有時,new一個需要綁定的bean對象,然后把request中按名稱對應的方式把值綁定到bean中(默認)

      @SessionAttributes

        該注解用來綁定HttpSession中的attribute對象的值,便於在方法中的參數里使用。

        該注解有value、types兩個屬性,可以通過名字和類型指定要使用的attribute 對象;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM