




已阅读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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 滇西科技师范学院《建筑工程施工1》2024-2025学年第一学期期末试卷
- 西安明德理工学院《调味品学》2024-2025学年第一学期期末试卷
- 陕西电子信息职业技术学院《科研基本方法概论》2024-2025学年第一学期期末试卷
- 宁夏财经职业技术学院《工程图学基础土木》2024-2025学年第一学期期末试卷
- 制鞋专业知识培训课件
- 制造模型专业知识培训内容课件
- 常州大学《小学综合活动课程》2024-2025学年第一学期期末试卷
- 湖南文理学院《统计与数据分析》2024-2025学年第一学期期末试卷
- 景德镇陶瓷大学《国际贸易理论与实务》2024-2025学年第一学期期末试卷
- 四川大学《国际税收》2024-2025学年第一学期期末试卷
- 2025年档案管理与信息资源利用考试试题及答案
- 工业空调培训课件模板
- 临床护理值班管理制度
- 老年呼吸系统疾病及护理
- 施工现场生态环境保护措施
- 2024年江苏省阜宁县安监局公开招聘试题含答案分析
- 2025年乡镇土地租赁合同范本
- 快递柜安装协议书
- 2025年真空抽滤桶项目市场调查研究报告
- 陕西省特种设备隐患排查清单(2025年)
- 燃气公司加气站操作规程及安全要求
评论
0/150
提交评论