一、表单提交数据时,后台表现层接收数据时能作为方法参数的几种情况:
1、作用域对象
/**
* 能作为方法参数的第一种类型:作用域对象HttpServletRequest req, HttpServletResponse res, HttpSession session
* 它们在作为参数时的特点是:参数个数和参数顺序 可以自定义(一个不要都可以,全要也行)
* @param req
* @return
*/
@RequestMapping(value = "/login02")
public ModelAndView login02(HttpServletRequest req) {
String loginName = req.getParameter("loginName");
String password = req.getParameter("password");
log.info(loginName);
log.info(password);
ModelAndView mv = new ModelAndView("/layout/main");
return mv;
}
2、页面表单提交项(页面表单的数据的name必须和接收参数的名字一样,才能接收到数据;用@RequestParam注解可以绑定参数,该注解的value对应表单数据的name,那么参数名字就可以随便写了,同时还可以为该参数赋初值,如果没有值接受到,默认以你写的值赋值)
/**
* 能够作为方法参数的第二种类型:页面表单提交项
* 只适合提交项较少的情况下
* @param loginName
* @param pwd
* @return
*/
@RequestMapping(value = "/login03")
public ModelAndView login03(String loginName,@RequestParam(value="password",defaultValue="123456") String pwd) {
log.info(loginName);
log.info(pwd);
ModelAndView mv = new ModelAndView("/layout/main");
return mv;
}
3、页面表单提交项的封装对象(对象的属性必须包含表单提交项的数据,并且属性名字必须和表单提交的name一样,对象中的属性必须比表单提交项的数据多或者相等,才可以)
/**
* 能够作为方法参数的第三种类型:页面表单提交项的封装对象(JavaBean)
* 要求:JavaBean的属性名称 >= 表单提交项
* 比较常用(重点掌握)
* @param user
* @return
*/
@RequestMapping(value = "/login04")
public ModelAndView login04(UserBean user) {
log.info(user);
ModelAndView mv = new ModelAndView("forward:/sys/login06");
return mv;
}
4、Map对象(只不过这时的Map不是用来接收数据的,对它赋值等同于request.setAttribute("user",user)这种)
/**
*
* 能够作为方法参数的第四种类型:Map对象
* String 来作为方法返回时,返回值就是逻辑视图名
* Map作为参数的时候,并不是用来装页面提交的数据,而是用来装Model对象
* 它在装Model对象时,作用等同于:request.setAttribute("user",user);
* @param map
* @return
*/
@RequestMapping(value="/login05")
public String login05(UserBean user,Map map) {
log.info(user);
user.setUserName("将手移开!");
map.put("user", user);
return "/layout/main";
//在springmvc中,如果需要完成请求转发,只需要使用"forward:转发的完整路径" 即可
// return "forward:/sys/login06";
//在springmvc中,如果需要完成重定向,只需要使用"redirect:重定向的完整路径" 即可
// return "redirect:/sys/login06";
// return "redirect:http://www.baidu.com";
}
5、Model对象(它和Map一样,不是用来接收数据的,对它赋值等同于request.setAttribute("user",user)这种)
/**
* 能够作为方法参数的第五种类型:Model对象
* String 来作为方法返回时,返回值就是逻辑视图名
* Model 对象作为参数时,可以用于向页面返回数据
* 同样等同于:request.setAttribute("user",user);
*
* @param map
* @return
*/
@RequestMapping(value="/login06")
public String login06(UserBean user,Model model) {
log.info(user);
user.setUserName("冯小康,将手拿开!");
model.addAttribute("user", user);
return "/layout/main";
}
6、PrintWriter对象(向页面写入数据,方法的返回是void)
/**
* 能够作为方法参数的第六种类型:PrintWriter
* 通常配合Ajax实现交互
* @param user
* @param out
*/
@RequestMapping(value="/login07")
public void login07(UserBean user,PrintWriter out) {
log.info(user);
out.println(true);
}
7、Cookie作为参数
/**
* 能够作为方法参数的第七种类型:Cookie作为参数
* @param user
* @param jsessionid
* @return
*/
@RequestMapping(value="/login08")
public String login08(UserBean user,@CookieValue("JSESSIONID") String jSessionId) {
log.info(user);
log.info(jSessionId);
return "/layout/main";
}
8、请求头数据作为参数
/**
* 能够作为方法参数的第八种类型:请求头数据作为参数
* @param userAgent
* @param acceptLanguage
* @return
*/
@RequestMapping(value="/login09")
public String login09(UserBean user,@RequestHeader("User-Agent")String userAgent,@RequestHeader("Accept-Language")String acceptLanguage) {
log.info(user);
log.info(userAgent);
log.info(acceptLanguage);
return "/layout/main";
}
二、表单提交数据时,后台表现层方法返回的几种情况:
1、ModelAndView对象(解析页面,用作页面跳转的,不能返回null)
@RequestMapping(value = "/login02")
public ModelAndView login02(HttpServletRequest req) {
String loginName = req.getParameter("loginName");
String password = req.getParameter("password");
log.info(loginName);
log.info(password);
ModelAndView mv = new ModelAndView("/layout/main");
return mv;
}
2、String字符串(返回的是跳转页面,不能返回null,否则以请求方法名"/login05"作为跳转路径)
在springmvc中,如果需要完成请求转发,只需要使用"forward:转发的完整路径" 即可 return "forward:/sys/login06";
在springmvc中,如果需要完成重定向,只需要使用"redirect:重定向的完整路径" 即可 return "redirect:/sys/login06";
@RequestMapping(value="/login05")
public String login05(UserBean user,Map map) {
log.info(user);
user.setUserName("冯小康,将手移开!");
map.put("user", user);
return "/layout/main";
//在springmvc中,如果需要完成请求转发,只需要使用"forward:转发的完整路径" 即可
// return "forward:/sys/login06";
//在springmvc中,如果需要完成重定向,只需要使用"redirect:重定向的完整路径" 即可
// return "redirect:/sys/login06";
// return "redirect:http://www.baidu.com";
}
3、void(不跳转页面)
@RequestMapping(value="/login07")
public void login07(UserBean user,PrintWriter out) {
log.info(user);
out.println(true);
}
4、Map对象(以请求方法名"/login05"作为跳转路径,向map设置等同于:request.setAttribute("user",user)这种)
/**
* Map作为返回类型时,向中间加入内容等同于:request.setAttribute("user",user);
* @param user
* @return
*/
@RequestMapping(value="/login10")
public Map login10(UserBean user) {
Map map = new HashMap<>();
map.put("user", user);
return map;
}