复杂参数Model、Map解析原理【用model、map操作请求参数】
早在Mvc阶段就知道,能用Model、Map存储数据然后在页面展示。现在探索的是拿到数据解析完参数,怎么把数据放在域中,展示在页面上。也就是如何完成渲染视图的过程的
控制器方法
这里把两个参数的required属性设置为不必须false(测试懒得改代码就要学会改属性),是因为在底下那个即将转发到这个控制器方法里面的请求内没有携带这两个名字的参数,required默认值是true,在访问请求时会报没有参数的错,所以设置为false
@ResponseBody
@RequestMapping("/requestParam")
public Map testRequestParam(@RequestAttribute(value = "msg",required = false) String msg,
@RequestAttribute(value = "code",required = false) String code,
HttpServletRequest request){
Map map = new HashMap();
map.put("msg",msg);
map.put("code",code);
Object msg1 = request.getAttribute("msg");
System.out.println("msg1 = " + msg1);
Object baby = request.getAttribute("baby");
map.put("baby",baby);
Object model1 = request.getAttribute("model1");
map.put("model",model1);
Object req1 = request.getAttribute("req1");
map.put("req",req1);
return map;
}
@RequestMapping("/map")
public String testModel(Map<String,Object> map,
Model model,
HttpServletRequest request,
HttpServletResponse response){
map.put("baby","PaKe");
model.addAttribute("model1","Petter");
request.setAttribute("req1","value1");
Cookie cookie = new Cookie("k1","v1");
response.addCookie(cookie);
return "forward:/requestParam";
}
首先启动服务器,然后请求map,发现能够转发并通过request.getAttribute方法获取到存储在map、Model内的数据,这说明map、model存储的数据实际上在处理过程中被放在了request域中,即map、model会把数据放在request域中,然后通过reuqest对象操作获取,想知道为什么放进去、具体执行如何执行的
请求map,开始debug
首先来到DispatcherServlet中,确定处理请求控制器方法的适配器为RequestMappingXXXX,
然后来到mv = ha.handle....这一行处理参数解析器和执行控制器方法,进入
来到AbstractHandlerMethodAdapter--->>handle方法