Spring MVC 关键点 理解
来源:互联网 发布:安卓手机网络修复工具 编辑:程序博客网 时间:2024/06/06 03:13
学习 Spring MVC 源码 理解
1.工作流程了解
跟踪了一下dispatch servlet的源码,结合这张图以及这篇博客分析了一下
http://www.cnblogs.com/davidwang456/p/4096530.html
了解了 springMVC的整个工作流程
2.参数传递
还有一点就是记不住 关于springMVC 的返回值类型,String,ModelAndView;
跟踪了一下源码
2.1 dispatch servlet类的 doDispatch 方法里面,调用适配器进行处理后,一定会返回一个 modelandview,跟踪进去
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
2.2 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter这个类里面进行handle处理,即返回这个modelandview,继续跟踪;
return invokeHandlerMethod(request, response, handler);
2.3 org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter这个类里面最关键的地方,创建了一个 modelandview,也就是说,返回的东西在这里一定会被包装,同样,modelMap也会被 塞进去参数
protected ModelAndView invokeHandlerMethod(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { ServletHandlerMethodResolver methodResolver = getMethodResolver(handler); Method handlerMethod = methodResolver.resolveHandlerMethod(request); ServletHandlerMethodInvoker methodInvoker = new ServletHandlerMethodInvoker(methodResolver); ServletWebRequest webRequest = new ServletWebRequest(request, response); ExtendedModelMap implicitModel = new BindingAwareModelMap(); Object result = methodInvoker.invokeHandlerMethod(handlerMethod, handler, webRequest, implicitModel); ModelAndView mav = methodInvoker.getModelAndView(handlerMethod, handler.getClass(), result, implicitModel, webRequest); methodInvoker.updateModelAttributes(handler, (mav != null ? mav.getModel() : null), implicitModel, webRequest); return mav; }
2.4换句话说,返回前台的参数都在 modelMap 里面,返回的 ModelAndView一定要携带modelMap,所以就有以下三种方式来传递参数回去,恩这样就理解了吧
@RequestMapping("/testIn") public String testIn( ModelMap model,@RequestParam(value = "templateId") Long templateId){ System.out.println("---------------testIn"); model.addAttribute("para01","para01"); return "test"; } @RequestMapping("/testIn2") public ModelAndView testIn2(@RequestParam(value = "templateId") Long templateId){ System.out.println("---------------testIn2"); ModelAndView mv = new ModelAndView("/test"); mv.addObject("para01","para002"); return mv; } @RequestMapping("/testIn3") public ModelAndView testIn3(@RequestParam(value = "templateId") Long templateId){ System.out.println("---------------testIn3"); ModelMap map = new ModelMap(); map.put("para01","para003"); ModelAndView mv = new ModelAndView("/test"); mv.addObject(map); return mv; }
0 0
- Spring MVC 关键点 理解
- tabhost 理解关键点
- Spring 关键点
- Spring 关键点
- Spring 关键点
- 理解RMI的关键点
- 理解ATL中的关键点
- memcache spring cache 关键点
- Spring自定义Handler关键点
- Spring mvc注意点
- Spring MVC的理解
- Spring Mvc 源码理解。
- spring mvc理解
- Spring MVC深入理解
- Spring Mvc 简单理解
- 深入理解Spring MVC
- 深入理解Spring MVC
- 深入理解spring-mvc
- poj 1364 King[差分约束]
- 23种设计模式(2):工厂方法模式
- Java之详解坦克大战游戏(五)
- 169. Majority Element
- 设计模式之单例模式
- Spring MVC 关键点 理解
- 常用Bracket插件
- Linux终端命令汇总
- JAVA面向对象-----成员内部类访问细节
- 根据jsonobject中的部分数据更新javabean中对应的属性[PATCH]
- 阅读积累
- 最小二乘法多项式曲线拟合原理与实现
- Java开发中利用枚举类来列举各个同一类型不同的值的情况
- Java中Synchronized的用法