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作用域、懶載入和自動裝配