• 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都可以携带数据。
  • 相关阅读:
    Web.config配置详解
    vs2010下创建webservice
    WinForm如何调用Web Service
    Android动画的两种使用方式。
    ES6介绍
    django批量form表单处理
    django生命周期示意图
    django中的构造字典(二级菜单,评论树,购物车)
    django中介模型,CBV模型,及logging日志配制
    django中csrftoken跨站请求伪造的几种方式
  • 原文地址:https://www.cnblogs.com/forever2h/p/6802136.html
Copyright © 2020-2023  润新知