標籤:

Springmvc之向JSP頁面轉發數據(request)

Springmvc之向JSP頁面轉發數據(request)

來自專欄 Spring

Springmvc之向JSP頁面轉發數據(request)

準備

  • Springmvc默認就是轉發,因此可以在request域中共享數據
  • 表單提交,註冊

<form action="<%=request.getContextPath()%>/user/login.do" method="post"> username:<input type="text" name="username"> <br> password:<input type="text" name="password"> <br> age:<input type="text" name="age"> <input type="submit" value="提交"></form>

  • User類

public class User { private String username; private String password; int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "User [username=" + username + ", password=" + password + "]"; }}

使用HttpServletRequest轉發

  • 直接使用HttpServletRequest中的setAttribute(key,value)即可添加屬性值request域中,那麼在JSP頁面即可使用EL表達式獲取

/** * @param user 接收請求參數 * @param request 添加屬性值request域中 */ @RequestMapping(value = "/login.do") public String login(User user,HttpServletRequest request,HttpServletResponse response) { System.out.println(user); request.setAttribute("user", user); return "error"; }

【不常用】使用ModelAndView轉發

  • ModelAndView中本身就是用來存儲數據和視圖的,因此我們可以使用ModelAndView來傳值
  • ModelAndView會利用HttpServletRequest中的setAttribute(key,value)將數據存儲在requst域中
  • Model表示的就是轉發的數據,可以通過ModelAndView(String viewName,Map<String,?> map)構造方法封裝Model,其中Model的類型就是Map<String,?>

@RequestMapping(value = "/login.do") public ModelAndView login(User user) { System.out.println(user); //創建一個Map,存儲數據 Map<String, User> map=new HashMap<String, User>(); //將獲取的user對象存儲進去 map.put("user", user); //返回一個ModelAndView對象,第一個參數是視圖,第二個是Map存儲數據 return new ModelAndView("error", map); }

【推薦使用】使用ModelMap轉發

  • 利用HttpServletRequest中的setAtttibute()添加數據到request域中
  • 直接在處理請求的方法中,添加ModelMap類型的參數,當需要轉發數據時,調用它的addAttribute方法封裝數據,如果需要封裝多條,多次調用即可

@RequestMapping(value = "/login.do") public String login(User user,ModelMap map) { System.out.println(user); //將數據存儲在ModelMap中 map.addAttribute("user", user); return "error"; }

拓展

  • 從源代碼可以看出,ModelMap實際上是實現了Map介面,因此我們也可以直接使用Map傳值
    • 直接在方法的參數中聲明即可,spring會自動注入

@RequestMapping(value = "/login.do") public String login(User user,Map<String, Object> map) { System.out.println(user); //將數據存儲在ModelMap中 map.put("user", user); return "error"; }

推薦閱讀:

CVE-2018-1270:spring-messaging遠程代碼執行漏洞分析預警
Spring 中複雜類型的注入
Spring Bean作用域、懶載入和自動裝配

TAG:SpringMVC | Spring |