Java教程之SpringMVC的請求和響應

千鋒武漢發表於2021-04-25

   前言

  前面我們學習了SpringMVC的基本配置,接下來一個非常重要的知識點是如何接受使用者的請求以及如何將資料傳送給使用者。

   獲得請求引數

  獲得頁面引數的幾種方式

  1)透過引數名獲得

  給控制器的方法設定引數名和表單name相同

  2)透過@RequestParam("引數名")註解設定引數

  @RequestParam("表單元素的name") 引數型別 引數名

  3)自動裝箱,建立屬性名和表單名稱一樣的類

  把類作為方法的引數

   透過引數名獲得

  頁面表單:

  <form action=”/user/login” method=”post”>

  <input type=”text” name=”username”><br>

  <input type=”password” name=”password”><br>

  <input type=”submit” value=”登入”><br>

  </form>

  控制器:

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(String username,String password){

  System.out.println(“username : ” + username);

  System.out.println(“password: ” + password);

  return “index”;

  }

  }

  注意:這裡login方法的引數名必須和表單元素的name屬性一致

   透過@RequestParam("引數名")註解設定引數

  控制器:

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(@RequestParam(“username”)String name,

  @RequestParam(“password”)String pwd){

  System.out.println(“username : ” + name);

  System.out.println(“password: ” + pwd);

  return “index”;

  }

  }

  注意:這裡login方法的引數名必須和表單元素的name屬性不需要一致,只需要在引數前面的註解@RequestParam中設定表單元素的名稱就可以了。

   自動裝箱,建立屬性名和表單名稱一樣的類

  定義User類:

  public class User{

  private String username;

  private String password;

  省略get、set方法

  }

  控制器:

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(User user){

  System.out.println(“username : ” + user.getName());

  System.out.println(“password: ” + user.getPassword());

  return “index”;

  }

  }

  注意:login方法的引數使用了自定義類,該類的屬性名稱必須和表單元素名稱一致,必須提供get和set方法。

   將資料返回給頁面

  前面我們瞭解瞭如何從頁面獲取資料,下面我們將學習如何將資料返回給頁面。

  1)透過Map集合

  在方法的引數中,新增Map集合,把資料存入集合

  2)透過Model模型

  在方法的引數中,新增Model引數,使用Model的addAttribute("名稱",值) 新增資料

  3)透過請求物件、Session物件

  在方法中新增HttpServletRequest引數或HttpSession引數

   透過Map集合

  在index.jsp頁面中使用EL表示式來繫結資料:

  <h2>你好,歡迎 ${username}</h2>

  控制器:

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(@RequestParam(“username”)String name,

  @RequestParam(“password”)String pwd,Map<String,String> map){

  System.out.println(“username : ” + name);

  System.out.println(“password: ” + pwd);

  map.put(“username”,name);

  return “index”;

  }

  }

  注意:Map集合可以作為login方法的引數放在任意位置,在集合中存入的鍵username將是EL表示式${username}對應的名稱,集合中存入的值會在頁面中顯示出來。

   透過Model模型

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(@RequestParam(“username”)String name,

  @RequestParam(“password”)String pwd,Model model){

  System.out.println(“username : ” + name);

  System.out.println(“password: ” + pwd);

  model.addAttribute(“username”,name);

  return “index”;

  }

  }

  注意:這裡使用的是Mode物件,此物件的作用類似於前面的Map集合,不過它是專門用於儲存資料,然後傳送給頁面的,實際開發中用得更多。

   透過請求物件、Session物件

  控制器:

  @Controller

  @RequestMapping(“/user”)

  public class UserController{

  @RequestMapping(“/login”)

  public String login(@RequestParam(“username”)String name,

  @RequestParam(“password”)String pwd,HttpServletRequest req){

  System.out.println(“username : ” + name);

  System.out.println(“password: ” + pwd);

  req.setAttribute(“username”,name);

  return “index”;

  }

  }

  注意:這裡使用了JavaWeb中常用的HttpServletRequest請求物件,用於將資料傳遞給頁面,也可以使用HttpSession物件,HttpSession中的物件在使用者的所有元件共享,物件儲存在記憶體的時間比較長,所以儘量使用HttpServletRequest,以更加高效的使用記憶體。

   總結

  本章我們學習了控制器從頁面獲得資料的幾種方式,以及將資料從控制器返回給頁面的幾種方式。透過本章的學習我們掌握了SpringMVC運算元據的基本方法,結合資料庫我們將能實現一個基本的JavaWeb專案。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31548651/viewspace-2769713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章