已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
概要:1. MVC拦截处理2. RequestMapping注解的使用与原理3. 自定义MVC的框架实现一、 MVC拦截处理知识点:HandlerExceptionResolver 异常处理HandlerInterceptor 拦截器处理dispatchServlet 初始化流程HandlerExceptionResolver 异常处理该组件用于指示 当出现异常时 mvc 该如何处理。 dispatcherServlet 会调用org.springframework.web.servlet.DispatcherServlet#processHandlerException() 方法,遍历 handlerExceptionResolvers 处理异常,处理完成之后返回errorView 跳转到异常视图。n 演示自定义异常捕捉public class SimpleExceptionHandle implements HandlerExceptionResolver Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) return new ModelAndView(error); HandlerExceptionResolver 结构ResponseStatusExceptionResolver(默认):用于解析带ResponseStatus的自定义异常DefaultHandlerExceptionResolver(默认):spring mvc 默认异常处理。SimpleMappingExceptionResolver:异常映射,将指定异常与错误页面相对应SimpleMappingExceptionResolver 示例: argumentError.jsperror.jsp提问:IllegalArgumentException 是 RuntimeException子类,如果IllegalArgumentException 异常同时满足映射的两个条件,这时会怎么选择跳转的视图?HandlerInterceptor 调用拦截HandlerInterceptor 用于对请求拦截,与原生Filter区别在于 Filter只能在业务执行前拦截,而HandlerInterceptor可以在业务处理前、中、后进行处理。l 演示HandlerInterceptorpublic class SimpleHandlerInterceptor implements HandlerInterceptor Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception System.out.println(preHandle); return true; Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception System.out.println(postHandle); Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception System.out.println(afterCompletion); 其实现机制是基于 HandlerExecutionChain 分别在 doDispatch 方法中执行以下方法:l preHandle :业务处理前执行l postHandle:业务处理后(异常则不执行)l afterCompletion:视图处理后具体逻辑源码参见:org.springframework.web.servlet.DispatcherServlet#doDispatch 方法。dispatchServlet 初始化流程初始化流程:1. 创建WebApplicationContext2. 基于策略模型加载各组件:创建WebApplicationContext 源码解析org.springframework.web.servlet.HttpServletBean#initorg.springframework.web.servlet.FrameworkServlet#initServletBeanorg.springframework.web.servlet.FrameworkServlet#initWebApplicationContext/ 基于当前存在的Spring 上下文做为Root 创建Mvc上下文。org.springframework.web.servlet.FrameworkServlet#createWebApplicationContext(org.springframework.context.ApplicationContext)org.springframework.web.servlet.FrameworkServlet#configureAndRefreshWebApplicationContextorg.springframework.context.support.AbstractApplicationContext#refresh基于策略模型加载各组件源码解析二、RequestMapping注解的使用与原理核心使用:l 演示基于注解配置mvc mapping / 注解方法RequestMapping(/hello.do)public ModelAndView hello() ModelAndView mv = new ModelAndView(userView); mv.addObject(name, luban); return mv;提问 为什么基于 配置就能实现mvc 的整个配置了,之前所提到的 handlerMapping 、与handlerAdapter 组件都不适用了?只要查看以类的源就可以知晓其中原因:l 认识NamespaceHandler 接口l 查看MvcNamespaceHandlerl 查看AnnotationDrivenBeanDefinitionParser结论:在 对应的解析器,自动向ioc 里面注册了两个BeanDefinition。分别是:RequestMappingHandlerMapping与BeanNameUrlHandlerMapping实现组成结构:1. RequestMappingHandlerMapping :URL 映射器2. RequestMappingHandlerAdapter:执行适配器3. InvocableHandlerMethod:Control目标对象,包含了control Bean 及对应的method 对像,及调用方法a. HandlerMethodArgumentResolverComposite:参数处理器b. ParameterNameDiscoverer:参数名称处理器c. HandlerMethodReturnValueHandlerComposite:返回结构处理器调用执行源码解析:查找mapping源码解析/ 基于注解查找 mappingorg.springframework.web.servlet.DispatcherServlet#getHandlerorg.springframework.web.servlet.handler.AbstractHandlerMapping#getHandlerorg.springframework.web.servlet.handler.AbstractHandlerMethodMapping#lookupHandlerMethodorg.springframework.web.servlet.handler.AbstractHandlerMethodMapping.MappingRegistry#getMappingsByUrl调用执行过程源码解析org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#handleorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#handleInternalorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#invokeHandlerMethod org.springframework.web.method.support.InvocableHandlerMethod#invokeForRequest org.springframework.web.method.support.InvocableHandlerMethod#doInvoke 三、自定义MVC的框架实现框架需求与目标框架需求:框架的需求包含功能性需求 和非功能性需求,功能性需求框架本身所提供的功能,而非功能性需求通常也指定体验性需求,即该框架对于开发者而言,是否易上手,是否需要较多的学习成本,以及在开发时需要过多的配置。有个时候两者是互相矛盾冲突的,比如当我们想让框架支持更的功能时,那么它的结构设计将会更复杂,抽像的层次将会越多,带来的负面影响时对框架使用者的学习成本增加了。 到底该选择更多的功能,还是更好的体验?这就需要框架作者要作出准确的定位与范围。定位是该框架要完成什么目标?范围是实现该目标需实现哪些功能?两者清晰之后 自然知道哪些是必须做的,哪些是可以做的。而体验则是在保证必须功能的情况越高越好,甚至可以为了提供体验可以牺牲部分功能的完整性。功能性需求用例图:1. URL映射a. 基于注解自动匹配调用方法2. a. Form表单参数自动转换成一般对像和复杂对像3. 请求调用a. 基于反射调用目标方法4. 视图支持a. 基于返回结果跳转至对应视图处理b. 支持的有jsp 视图,freemarke视图,Json视图5. 异常统一处理a. 出现异常统一处理,并跳转到异常页面非功能性需求与目标:1. 接近于零的配置2. 更少的学习成本a. 尽可能使用用户之前习惯b. 概念性的东西要少一些3. 24. 支持开发模式:动态装载配置框架设计与编码实现框架环境依赖:框架名称:tuling-mvcjdk:1.6 以上 依赖包:spring、freemarker、java-servlet-api框架流程分解:实现组件:1. FreemarkeViewa. freemarke视图2. HandlerServ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年西安电力机械制造公司机电学院单招(计算机)考试备考题库及答案1套
- 2026年平顶山文化艺术职业学院单招职业适应性测试题库附答案详解
- 2026年黄河交通学院单招综合素质考试题库附答案
- 2026年辽宁省朝阳市单招职业倾向性考试题库附答案
- 2025河北雄安容西青禾幼儿园、临泉幼儿园教师见习岗招聘(公共基础知识)综合能力测试题附答案解析
- 2026年江汉艺术职业学院单招职业适应性测试题库及参考答案详解1套
- 2026年西昌民族幼儿师范高等专科学校单招职业适应性考试模拟测试卷附答案
- 2026年黑龙江护理高等专科学校单招职业技能考试题库及参考答案详解一套
- 2026年江苏护理职业学院单招职业倾向性测试题库附答案详解
- 2026年苏州高博软件技术职业学院单招职业技能测试题库含答案详解
- 2025考研心理学专业基础(312)真题答案
- 2025年低压电工证题库(详细版)
- 2025年计算机应用基础期末考试试题
- 破产管理人培训课件大纲
- 冷菜承包协议书范本
- 2025至2030中国正畸矫治器行业项目调研及市场前景预测评估报告
- 气血不足的课件
- 乌兰木伦村“煤海探秘”工业旅游开发方案探索
- 2025地球小博士知识竞赛试题附答案
- 2025广东省南粤交通投资建设有限公司招聘笔试历年备考题库附带答案详解试卷2套
- 2025年公营养师(四级)试题及答案
评论
0/150
提交评论