1. 数据流入到处理类中
- servletAPI可以自动注入到处理方法的属性上。
/** * ServletAPI可以通过方法的参数直接注入 * ServletAPI的包装类也可以直接注入 * @param req * @param wr * @return */ @RequestMapping("/login") public ModelAndView login(HttpServletRequest req,WebRequest wr){ System.out.println("username="+req.getParameter("username")); System.out.println("password="+wr.getParameter("password")); return null; }
- 请求数据可以直接注入到方法的参数上,要求数据的key名和方法的参数名一致即可。
<form action="login.do" method="post"> username:<input type="text" name="username"/><br> password:<input type="password" name="password"/><br> <input type="submit" value="login"/> </form>
@Controller public class UserController { /** * 可以直接将请求数据注入到方法的参数上 * @return */ @RequestMapping("/login") public ModelAndView login(String username,String password){ System.out.println("username="+username); System.out.println("password="+password); return null; } }
如果名称不一致,可以使用注解@RequstParam从新设置
@Controller public class UserController { /** * 可以直接将请求数据注入到方法的参数上 * @RequestParam当参数名和请求数据的key不一致时,可以通过他来指定 * value和请求数据的key要一致 * defaultValue默认值,不推荐使用 * required 设置是否是必须默认是true,如果是true时,提交的数据没有该数据时,将会报错 * @return */ @RequestMapping("/login") public ModelAndView login(@RequestParam(value="salt",required=false) String salt,@RequestParam("username")String name,@RequestParam("password")String pwd){ System.out.println("username="+name); System.out.println("password="+pwd); return null; } }
- 如果请求的数据是一个对象时,可以直接在参数中声明,Springmvc会自动进行类型转换和数据封装。
public class User { private String name; private String pwd; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPwd() { return pwd; } public void setPwd(String pwd) { this.pwd = pwd; } }
jsp页面:
<form action="login.do" method="post"> username:<input type="text" name="name"/><br> password:<input type="password" name="pwd"/><br> <input type="submit" value="login"/> </form>
处理器:
@Controller public class UserController { /** * 如果请求提交的数据是一个对象的属性时,可以直接在参数中注入该对象 * 请求数据的key和类的属性名一致 * @return */ @RequestMapping("/login") public ModelAndView login(User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); return null; } }
- cookie数据的获取使用@CookieValue可以获取其值:
@RequestMapping("/ck") public void cookie(@CookieValue("JSESSIONID") String sessionId){ System.out.println("sessionId======"+sessionId); }
2. 将处理结果数据显示到页面中:
- 使用ModelAndView数据存入ModelAndView中,在jsp中可以通过el表达式类获取:
@RequestMapping("/login") public ModelAndView login(User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); ModelAndView mv = new ModelAndView("success"); mv.addObject("msg", "登录成功"); return mv; }
jsp页面
<body> ${msg } </body>
- 使用Model可以将数据携带到前台显示,需要在参数中声明Model类型的参数,页面使用el表达式获取值:
@RequestMapping("/login") public ModelAndView login(Model model,User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); ModelAndView mv = new ModelAndView("success"); //数据放入了Model中 model.addAttribute("msg", "登录成功"); return mv; }
- 使用ModelMap可以将数据携带的到前台显示,需要在参数中声明model类型的参数,页面中使用el表达式取值:
@RequestMapping("/login") public ModelAndView login(ModelMap map,User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); ModelAndView mv = new ModelAndView("success"); //数据放入了Model中 map.addAttribute("msg", "登录成功"); return mv; }
- 可以使用注解@ModelAttribute在处理方法上或者方法的参数上声明,要携带到前台显示的数据对象
@ModelAttribute("user") @RequestMapping("/login") public ModelAndView login(User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); ModelAndView mv = new ModelAndView("success"); return mv; }
- 可以使用@SessionAttributes将指定的数据存入session,在页面中可以从session中获取该数据,该注解放置在处理类上:
@Controller @SessionAttributes("user") public class UserController { @RequestMapping("/login") public ModelAndView login(User user){ System.out.println("username="+user.getName()); System.out.println("password="+user.getPwd()); ModelAndView mv = new ModelAndView("success"); return mv; } @RequestMapping("/ck") public void cookie(@CookieValue("JSESSIONID") String sessionId){ System.out.println("sessionId======"+sessionId); } }
- 使用传统servletAPI将数据携带到前台。
3.ModelAndView 和 ModelMap 的区别:
- ModelAndView可以指定试图名称,ModelMap不能。
- ModelAndView 和 ModelMap都可以携带数据。