springMVC表单提交数据时,后台表现层接收数据时能作为方法参数的几种情况和返回类型的几种情况

一、表单提交数据时,后台表现层接收数据时能作为方法参数的几种情况:

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;
}	

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值