zoukankan      html  css  js  c++  java
  • java之spring mvc之数据处理

     1. 页面中数据提交到 Controller 中如何处理

    a) 如果自定义 Controller 是实现 spring 的 Controller 的接口,那么可以通过 HttpServletRequest 来获取数据。

    b) 如果自定义的 Controller 没有实现 spring 的 Controller 的接口,那么可以通过在处理方法上,添加一个 HttpServletRequest 类型的参数,在请求被方法处理时, spring 会自动的将 HttpServletRequest 注入到该参数中。

    注意:以上两种方式均可以获取表单数据,但是获取的方式和 servlet 一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

    c) 在处理方法上,直接声明参数,参数名称和表单中的域的名称一致,那么在提交数据时,会自动将表单域中的值,直接注入给参数。

    Jsp 页面

    <form action="login.do" method="post">
        username:<input type="text" name="username"/><br>
        password:<input type="password" name="password"/><br>
        <input type="submit" value="登录"/>
     </form>

    Controller 类

    @RequestMapping("/login.do")
        public ModelAndView login(String username,String password){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+username+"  	password="+password);
            if("siggy".equals(username)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    如果表单域中的名称和参数名不一致,可以使用 @RequestParam("username") 进行声明

    @RequestMapping("/login.do")
        public ModelAndView login(@RequestParam("username")String user,String password){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user+"  	password="+password);
            if("siggy".equals(user)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    d) 对于提交对象的处理:

    如果在表单域中提交的是对象,那么域中的名称为 vo 类的属性名即可,vo 类中提供 get/set 方法,Controller 类中的处理方法上,直接将参数声明为 vo 类型的对象即可。

    vo 类型

    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 页面

    <body>
        <form action="login.do" method="post">
        username:<input type="text" name="name"/><br>
        password:<input type="password" name="pwd"/><br>
        <input type="submit" value="登录"/>
        </form>
    </body>

    Controller 类

    @Controller
    public class UserController {
        @RequestMapping("/toLogin.do")
        public ModelAndView toLogin(){
            return new ModelAndView("login");
        }
        @RequestMapping("/login.do")
        public ModelAndView login(User user){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }
    }

    2. 数据如何从后台响应到页面中

    a) 可以通过 ServletAPI 将数据携带到前台,和 servlet 处理是一致的。

    @RequestMapping("/login.do")
        public ModelAndView login(@RequestParam("username")String user,String password,HttpServletRequest req){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user+"  	password="+password);
            req.setAttribute("hello", "world");
            if("siggy".equals(user)&&"1111".equals(password)){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    b) 通过 ModelAndView 将数据携带到前台,前台使用 el 和 jstl 来获取数据

    @RequestMapping("/login.do")
        public ModelAndView login(User user){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                mv.addObject("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    c) 也可以通过 ModelMap 来携带数据, ModelMap 类型的数据,需要在处理方法的参数中声明:

    @RequestMapping("/login.do")
        public ModelAndView login(User user,ModelMap map){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                map.addAttribute("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }

    d) 也可以通过 Model 来携带数据,Model 类型的数据,需要在处理方法的参数中声明

    @RequestMapping("/login.do")
        public ModelAndView login(User user,Model model){
            ModelAndView mv = new ModelAndView();
            System.out.println("username="+user.getName()+"  	password="+user.getPwd());
            if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
                model.addAttribute("msg", "登录成功!!!");
                mv.setViewName("index");
            }else{
                mv.setViewName("login");
            }
            return mv;
        }
  • 相关阅读:
    CodeForces 660D Number of Parallelograms
    【POJ 1082】 Calendar Game
    【POJ 2352】 Stars
    【POJ 2481】 Cows
    【POJ 1733】 Parity Game
    【NOI 2002】 银河英雄传说
    【NOI 2015】 程序自动分析
    【POJ 1704】 Georgia and Bob
    【HDU 2176】 取(m堆)石子游戏
    【SDOI 2016】 排列计数
  • 原文地址:https://www.cnblogs.com/Vincent-yuan/p/11273653.html
Copyright © 2011-2022 走看看