一、通过实体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";//注册失败,返回注册页面
}
}