springmvc 之 数据处理

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都可以携带数据。

posted on 2017-05-03 15:29  forever_2h  阅读(270)  评论(0编辑  收藏  举报

导航