SpringMVC:Controller接收请求参数的常见方式

一、通过实体bean接收请求参数

适用于get和post提交请求方式,需要注意的是,bean的属性名称必须与请求参数名称相同。

例:我们通过在register.jsp页面提交一个表单form,提交的有三项,分别是uname,upass,urepass,即用户姓名,用户密码,用户再次确认的密码。在form里面三个<input/>标签里的name属性里分别写上name="uname",name="upass",name="reupass",在提交表单的时候就会将这三项name提交并跳转到form 的action属性的指定路径页面。

而表单的提交请求会被提交的目的页面路径的控制器Controller捕获,捕获以后怎么获取表单信息呢?

这时候需要写一个UserForm.java,即封装表单信息的实体bean类,将uname,upass,urepass作为这个类的属性(类的属性必须要与提交表单的name值相同,类里写setter() getter()方法,可以加上构造函数),SpringMVC会自动将表单的提交信息赋给实体bean类的属性,在Controller的方法里传入使用即可。

/*UserForm对象user接收注册页面提交的请求参数*/
public String register(UserForm user, Model model){
    if("zhangsan".equals(user.getUname()) && "123456".equals(user.getUpass()))
        return "login";//注册成功,跳转到login.jsp
    else{
        model.addAttribute("uname",user.getUname());//将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

二、通过处理方法的形参接收请求的参数

适用于get和post提交请求方式,通过处理方法的形参接收请求参数,也就是直接把表单参数写在Controller相应方法的形参中,即形参名称和请求参数名称完全相同。

/*通过形参接收请求参数,形参名称与请求参数名称完全相同*/
public String register(String uname,String upass, Model model){
    if("zhangsan".equals(uname) && "123456".equals(upass))
        return "login";//注册成功,跳转到login.jsp
    else{
        model.addAttribute("uname",uname);//将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

三、通过HttpServletRequest接收请求参数

适用于get和post提交请求方式。

/*通过HttpServletRequest接收请求参数*/
public String register(HttpServletRequest request, Model model){
    String uname=request.getParameter("uname");
    String upass=request.getParameter("upass");

    if("zhangsan".equals(uname) && "123456".equals(upass))
        return "login";//注册成功,跳转到login.jsp
    else{
        model.addAttribute("uname",uname);//将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

四、通过@PathVariable接收URL中的请求参数

@RequestMapping(value="/register/{uname}/{upass}",method=RequestMethod.GET)
//必须加method属性
/*通过@PathVariable获取URL中的参数*/
public String register(@PathVariable String uname,@PathVariable String upass,Model model){
    if("zhangsan".equals(uname) && "123456".equals(upass))
        return "login";//注册成功,跳转到login.jsp
    else{
        model.addAttribute("uname",uname);//将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

五、通过@RequestParam接收参数

适用于get和post请求参数。通过@RequestParam接收请求参数与通过处理方法的形参接收请求参数的区别是:当请求参数名与接收参数名不一致时,通过处理方法的形参接收请求参数不会报404错误,而@RequestParam接收请求参数会报404错误。

/*通过@RequestParam获取URL中的参数*/
public String register(@RequestParam String uname,@RequestParam String upass,Model model){
    if("zhangsan".equals(uname) && "123456".equals(upass))
        return "login";//注册成功,跳转到login.jsp
    else{
        model.addAttribute("uname",uname);//将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

六、通过@ModelAttribute接收请求参数

适用于get和post提交请求方式。@ModelAttribute注解放在处理方法的形参上时,用于将多个请求参数封装到一个实体对象,从而简化数据绑定流程,而且自动暴露为模型数据,于视图页面展示时使用。而上述第一个方法只是将多个请求参数封装到一个实体对象,并不能暴露为模型数据(需要使用model.addAttribute()语句才能暴露为模型数据)。

public String register(@ModelAttribute("user") UserForm user, Model model){
    if("zhangsan".equals(user.getUname()) && "123456".equals(user.getUpass()))
        return "login";//注册成功,跳转到login.jsp
    else{
        //使用@ModelAttribute("user")与model.addAttribute("user",user)功能相同
        //将输入的用户姓名装入model,在注册页可以用EL表达式取出model中的该值。
        return "register";//注册失败,返回注册页面
    }
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值