spring mvc controller接收請求值及controller之間跳轉及傳值
1,使用HttpServletRequest獲取
- @RequestMapping("/login.do")
- public String login(HttpServletRequest request){
- String name = request.getParameter("name")
- String pass = request.getParameter("pass")
- }
2,Spring會自動將表單引數注入到方法引數,和表單的name屬性保持一致。和Struts2一樣
- @RequestMapping("/login")
- public String login(HttpServletRequest request,
- String name,
- @RequestParam("pass")String password) // 表單屬性是pass,用變數password接收
- {
- log.info(name);
- log.info(password)
- }
3,自動注入Bean屬性
- <form action="login">
- 使用者名稱:<input name="name"/>
- 密碼:<input name="pass"/>
- <input type="submit" value="登陸">
- </form>
- //封裝的User類
- public class User{
- private String name;
- private String pass;
- }
- @RequestMapping("/login")
- public String login(User user)
- {
- log.info(user.getName());
- log.info(user.getPass());
- }
向頁面傳值:
當Controller元件處理後,向jsp頁面傳值,
1,使用HttpServletRequest 和 Session 然後setAttribute(),就和Servlet中一樣
2,使用ModelAndView物件
3,使用ModelMap物件
4,使用@ModelAttribute註解
Model資料會利用HttpServletRequest的Attribute傳值到success.jsp中
- @RequestMapping("/login")
- public ModelAndView login(String name,String pass){
- User user = userService.login(name,pwd);
- Map<String,Object> data = new HashMap<String,Object>();
- data.put("user",user);
- return new ModelAndView("success",data);
- }
使用ModelMap引數物件示例:
ModelMap資料會利用HttpServletRequest的Attribute傳值到success.jsp中
- @RequestMapping("/login.do")
- public String login(String name,String pass ,ModelMap model){
- User user = userService.login(name,pwd);
- model.addAttribute("user",user);
- model.put("name",name);
- return "success";
- }
使用@ModelAttribute示例
在Controller方法的引數部分或Bean屬性方法上使用
@ModelAttribute資料會利用HttpServletRequest的Attribute傳值到success.jsp中
ModelMap物件的 addAttribute,put兩個方法有什麼區別就是 addAttribute是不允許新增空值的key,put是允許的
- @RequestMapping("/login.do")
- public String login(@ModelAttribute("user") User user){
- //TODO
- return "success";
- }
- @ModelAttribute("name")
- public String getName(){
- return name;
- }
Session儲存:
可以利用HttpServletReequest的getSession()方法
- @RequestMapping("/login.do")
- public String login(String name,String pwd
- ModelMap model,HttpServletRequest request){
- User user = serService.login(name,pwd);
- HttpSession session = request.getSession();
- session.setAttribute("user",user);
- model.addAttribute("user",user);
- return "success";
- }
Spring MVC contorller跳轉到另一個controller並傳值
示例均從createOrderForOld跳轉到createOrder
1: forward 請求轉發
@RequestMapping(value ="/createOrderForOld")
public String createOrder(HttpServletRequest request,ModelMapmodel) {
return"forward:/createOrder";
}
@RequestMapping(value ="/createOrder")
public String createOrder(String oderId,String orderName,ModelMap model) {
return"index;
}
forward跳轉,是請求轉發,引數自動跳轉,所以當http://localhost:8080/my-app/createOrderForOld?orderId=123 該連結請求createOrderForOld介面後 請求轉發到createOrder介面時,引數自動帶過來了,createOrder中oderId自動賦值為“123”,引數名稱需一致,否則無法傳參賦值。
2: redirect 重定向
@RequestMapping(value ="/createOrderForOld")
public String createOrder(HttpServletRequest request,ModelMap model) {
model.put("orderName","newOld");
return"redirect:/createOrder?orderId=123";
}
@RequestMapping(value ="/createOrder")
public String createOrder(String oderId,String orderName,ModelMap model) {
return"index";
}
當請求http://localhost:8080/my-app/createOrderForOld 連結請求createOrderForOld介面後 請求重定向到createOrder介面時,通過model.put方法 ,createOrder中oderName自動賦值為“newOld”,通過引數拼接orderId自動賦值為“123”。
故redirect跳轉到另一個controller是通過model還是拼接url均可。引數名稱需一致,否則無法傳參賦值。
RedirectAttributes和ModelMap或Model不推薦一起使用,因為在redirect傳值時,同時存在,只有RedirectAttributes中引數值被傳遞,ModelMap或Model中變數不會傳遞。