SpringMVC-基础知识点(二)

	/**
	 * 目标方法的返回值可以是ModelAndView类型 其中可以包含视图和模型信息
	 * SpringMVC会把ModelAndView的model中数据放入到request域对象中。
	 * 
	 * @return
	 */
	@RequestMapping("/testModelAndView")
	public ModelAndView testModelAndView() {
		ModelAndView modelAndView = new ModelAndView(SUCCESS);
		// 将模型数据添加到ModelAndView中
		modelAndView.addObject("time", new Date());

		return modelAndView;
	}

1.SpringMVC的Handler方法可以支持ServletAPI的哪些原生的参数类型


	/**
	 * 可以使用Servlet原生的API作为目标方法的参数,具体支持以下类型
	 * HttpServletRequest 
	 * HttpServletResponse  
	 * HttpSession
	 * java.security.Principal
	 * Locale
	 * InputStream
	 * OutputStream
	 * Reader
	 * Writer
	 * 
	 * 
	 */
	@RequestMapping("testServletAPI")
	public void testServletAPI(HttpServletRequest request,HttpServletResponse response,Writer out) throws IOException{
		System.out.println("test testServletAPI:  "+request+" ----"+response);
		out.write("testServletAPI finished!");
//		return SUCCESS;
	}

2.处理模型数据


2.1ModelAndView

 

	/**
	 * 目标方法的返回值可以是ModelAndView类型 其中可以包含视图和模型信息
	 * SpringMVC会把ModelAndView的model中数据放入到request域对象中。
	 * 
	 * @return
	 */
	@RequestMapping("/testModelAndView")
	public ModelAndView testModelAndView() {
		ModelAndView modelAndView = new ModelAndView(SUCCESS);
		// 将模型数据添加到ModelAndView中
		modelAndView.addObject("time", new Date());

		return modelAndView;
	}

2.2Map及Model


/**
	 * 目标方法可以添加Map类型(实际上也可以是Model类型或ModelMap类型)的参数
	 * 开发的时候比较常用
	 * @param map
	 * @return
	 */
	@RequestMapping("testMap")
	public String testMap(Map<String, Object> map){
		map.put("names", Arrays.asList("tom","lily","james"));
		return SUCCESS;
	}

2.3 SessionAttributes

<span style="white-space:pre">	</span>/**
	 * 在@Controller上加上@SessionAttributes(value={"user"},types={String.class}), 只能放到类上,不能放在方法上
	 * 其中,value对应的键(user)会被既放到RequestScope中,也会被放到SessionScope中
	 * types则表示对应的对象(String)类型会被既放到RequestScope中,也会被放到SessionScope中 
	 */
	@RequestMapping("/testSessionAttributes")
	public String testSessionAttributes(Map<String, Object> map) {
		map.put("user", new User("zhangsan", "123456", "zhangsan@qq.com", 18));
		map.put("school", "yuduzhongxue");
		
		return SUCCESS;
	}

2.4ModelAttribute

	/**
	 * 有@ModelAttribute注解修饰的方法会在每个目标方法执行之前被SpringMVC调用
	 * @param id
	 * @param map
	 */
	@ModelAttribute
	public void getUser(@RequestParam(value="id",required=false)Integer id,Map<String, Object> map) {
		if(id!=null){
//			模拟从数据库中获取user对象
			User user = new User(1, "Tom", "123456", "tom@qq.com", 88);
			System.out.println("从数据库中模拟获取一个User对象 : "+user);
			map.put("user", user);
		}
	}

<span style="white-space:pre">	</span>/**
	 * 产生500异常的话,将类上的SessionAttributes去掉即可--〉org.springframework.web.
	 * HttpSessionRequiredException: Session attribute 'user' required - not
	 * found in session
	 * 执行流程:
	 * 1.执行@ModelAttribute注解修饰的方法:从数据库中取出对象,把对象放入到了Map中,键为user
	 * 2.SpringMVC从Map中取出user对象,把表单获取的参数赋值给对应的user对象属性,
	 * 3.SpringMVC把上述对象传入目标方法的参数。
	 * 
	 * 注意:在@ModelAttribute修饰的方法中,放入到Map时的健需要与目标方法入参类型的第一个字母小写的字符串一致。(user)
	 */
	@RequestMapping("/testModelAttributes")
	public String testModelAttributes(User user) {
		System.out.println("test testModelAttributes: " + user);

		return SUCCESS;
	}
HTML代码

<!-- 
	模拟修改操作
	1.原始数据为:1,tom,123456,tom@qq.com,12
	2.密码不能修改
	3.表单回显,模拟操作直接在表单填写对应的属性值
 -->
 <form action="/first/testModelAttributes" method="post">
  <input name="id" value="1" type="hidden" /><br>
 userName:<input name="username" value="tom" type="text" /><br>
<!--  password:<input name="password" value="123456" type="password" /><br>
 email:<input name="email" value="tom@qq.com" type="text" /><br> -->
 age:<input name="age" value="18" type="text" /><br>
  <input   value="Submit" type="submit" /><br>
 </form>
 <br>

入参全过程


 

源码分析





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值