方法返回的类型是String,必须用Model
@RequestMapping("/hello") public String hello(Model model) { //相当于request.setAttribute model.addAttribute("message","hello,my first spring mvc 000~ model ~~~~"); return "hello";//执行完hello方法后会跳转到hello.jsp 由前缀路径,+后缀.jsp拼接而成 }
方法返回类型ModelAndView
@RequestMapping("/hello2") public ModelAndView hello2() { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "hello2,modelAndView springmvc"); modelAndView.setViewName("hello2"); return modelAndView; }
setViewName方法可以直接指定jsp页面的路径,这里的地址前缀和后缀已经在spring-mvc.xml文件中定义好了,可直接简写modelAndView.setViewName("hello2");。如未定义前后缀可以使用 modelAndView.setViewName("/WEB-INF/views/hello2.jsp");或者new ModelAndView("/WEB-INF/views/hello2.jsp");完整的路径进行传入
这里的路径默认是转发的形式,如果要重定向,可以使用new ModelAndView("redirect:hello2");或者 modelAndView.setViewName("redirect:hello2");
接收页面参数,可以用@RequestParam("paramName") 来获取。如下就可以获取页面的name以及passWord
@RequestMapping("/login")//web.xml配置拦截"*.do"时,此处映射的/login.do可以省略为/login Spring底层实现的 public String login(@RequestParam("name")String name, @RequestParam("passWord") String passWord, Model model) { Map map = new HashMap(); map.put(null,"aaa"); System.out.println(map); model.addAttribute("name",name); return "success"; }
如果提交的页面参数过多,可以直接用对象的形式接收,此时对象是被组装好参数的对象
@RequestMapping("/login2") public String login2(User user,Model model) { String name = user.getName(); System.out.println(name); model.addAttribute("name",name); return "success"; }