前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java之spring mvc之数据处理

java之spring mvc之数据处理

作者头像
Vincent-yuan
发布2019-09-11 15:12:14
4460
发布2019-09-11 15:12:14
举报
文章被收录于专栏:Vincent-yuanVincent-yuan
1. 页面中数据提交到 Controller 中如何处理

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

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

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

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

Jsp 页面

代码语言:javascript
复制
<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 类

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

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

代码语言:javascript
复制
@RequestMapping("/login.do")
    public ModelAndView login(@RequestParam("username")String user,String password){
        ModelAndView mv = new ModelAndView();
        System.out.println("username="+user+"  \tpassword="+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 类型

代码语言:javascript
复制
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 页面

代码语言:javascript
复制
<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 类

代码语言:javascript
复制
@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()+"  \tpassword="+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 处理是一致的。

代码语言:javascript
复制
@RequestMapping("/login.do")
    public ModelAndView login(@RequestParam("username")String user,String password,HttpServletRequest req){
        ModelAndView mv = new ModelAndView();
        System.out.println("username="+user+"  \tpassword="+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 来获取数据

代码语言:javascript
复制
@RequestMapping("/login.do")
    public ModelAndView login(User user){
        ModelAndView mv = new ModelAndView();
        System.out.println("username="+user.getName()+"  \tpassword="+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 类型的数据,需要在处理方法的参数中声明:

代码语言:javascript
复制
@RequestMapping("/login.do")
    public ModelAndView login(User user,ModelMap map){
        ModelAndView mv = new ModelAndView();
        System.out.println("username="+user.getName()+"  \tpassword="+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 类型的数据,需要在处理方法的参数中声明

代码语言:javascript
复制
@RequestMapping("/login.do")
    public ModelAndView login(User user,Model model){
        ModelAndView mv = new ModelAndView();
        System.out.println("username="+user.getName()+"  \tpassword="+user.getPwd());
        if("siggy".equals(user.getName())&&"1111".equals(user.getPwd())){
            model.addAttribute("msg", "登录成功!!!");
            mv.setViewName("index");
        }else{
            mv.setViewName("login");
        }
        return mv;
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-07-31 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 页面中数据提交到 Controller 中如何处理
  • 2. 数据如何从后台响应到页面中
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档