




已阅读5页,还剩14页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
主讲:图灵鲁班时间:2019/7/7课程概要1. spring mvc 设计思想与体系结构组成2. mvc 执行流程解析一、spring mvc 功能特性1、回顾servlet 与jsp 执行过程流程说明:1. 请求Servlet2. 处理业务逻辑3. 设置业务Model4. forward jsp Servlet5. jsp Servlet 解析封装html 返回2、spring mvc 功能特性:spring mvc本质上还是在使用Servlet处理,并在其基础上进行了封装简化了开发流程,提高易用性、并使用程序逻辑结构变得更清晰a. 基于注解的URL映谢b. 表单参数映射c. 缓存处理d. 全局统一异常处理e. 拦截器的实现f. 下载处理3、请求处理流程4、spring mvc 示例:为便于理解,这里给出一个最简单,配置最少的spring mvc 示例:web.xml servlet配置: dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:/spring-mvc.xml dispatcherServlet /编写Control 方法:public class SimpleControl implements Controller Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception ModelAndView mv = new ModelAndView(/WEB-INF/page/userView.jsp); mv.addObject(name, luban is good man); return mv; 配置spring-mvc.xmll 执行测试演示:整个过程是如何实现的?1. dispatchServlet 如何找到对应的Control?2. 如何执行调用Control 当中的业务方法?在面试中要回答好上述问题,就必须得弄清楚spring mvc 的体系组成。二、mvc 体系结构详解spring mvc 框架解决的问题从技术角度去思考 任何一个现存的框架都有其存在理由,而这个理由就是解决实际的问题。或者提供更好的解决问题的方案。spring mvc 它解决了什么问题呢?1. URL映射2. 表单参数映射3. 调用目标Control4. 数据模型映射5. 视图解析6. 异常处理上术解决在spring mvc 中都体现在如下组件当中l HandlerMapping hndl mp url与控制器的映谢l HandlerAdapter hndldpt 控制器执行适配器l ViewResolver vju rizlv 视图仓库l view 具体解析视图l HandlerExceptionResolver hndl ksep()n rizlv 异常捕捕捉器l HandlerInterceptor hndl ntsept 拦截器其对应具体uml如下 图:mvc 各组件执行流程HandlerMapping 详解其为mvc 中url路径与Control对像的映射,DispatcherServlet 就是基于此组件来寻找对应的Control,如果找不到就会报 No mapping found for HTTP request with URI的异常。HandlerMapping 接口结构分析:HandlerMapping 作用是通过url找到对应的Handler ,但其HandlerMapping.getHandler()方法并不会直接返回Handler 对像,而是返回 HandlerExecutionChain 对像在通过 HandlerExecutionChain.getHandler() 返回最终的handler常用实现类:目前主流的三种mapping 如下:1. SimpleUrlHandlerMapping:基于手动配置 url 与control 映谢2. BeanNameUrlHandlerMapping: 基于ioc name 中已 / 开头的Bean时行 注册至映谢.3. RequestMappingHandlerMapping:基于RequestMapping注解配置对应映谢SimpleUrlHandlerMapping演示基于 SimpleUrlHandlerMapping配置映谢。编写mvc 文件 simpleControl SimpleUrlHandlerMapping体系结构:初始化SimpleUrlHandlerMapping流程关键源码:org.springframework.web.servlet.handler.SimpleUrlHandlerMapping#setUrlMaporg.springframework.web.servlet.handler.SimpleUrlHandlerMapping#initApplicationContextorg.springframework.web.servlet.handler.SimpleUrlHandlerMapping#registerHandlers/ /表示根路径 /* 表示默认路径org.springframework.web.servlet.handler.AbstractUrlHandlerMapping#registerHandler()获取 Handler流程关键源码:org.springframework.web.servlet.DispatcherServlet#doServiceorg.springframework.web.servlet.DispatcherServlet#doDispatchorg.springframework.web.servlet.DispatcherServlet#getHandlerorg.springframework.web.servlet.handler.AbstractHandlerMapping#getHandlerorg.springframework.web.servlet.handler.AbstractUrlHandlerMapping#getHandlerInternal / 获取URL路径org.springframework.web.util.UrlPathHelper#getPathWithinApplication/ 查找handlerorg.springframework.web.servlet.handler.AbstractUrlHandlerMapping#lookupHandler/ 封装执行链org.springframework.web.servlet.handler.AbstractHandlerMapping#getHandlerExecutionChain BeanNameUrlHandlerMappingBeanNameUrlHandlerMapping 实现上与 SimpleUrlHandlerMapping 一至,唯一区别在于 继承自AbstractDetectingUrlHandlerMapping ,通过对应detectHandlers 可以在无配置的情况下发现url 与handler 映射。结构图:RequestMappingHandlerMapping 其基于注解实现,在后续章节讲解注解映谢的时候在详细讲。Handler 类型在 AbstractUrlHandlerMapping 我们可以看到存储handler 的Map 值类型是Object ,是否意味着所有的类都可以做来Handler 来使用?Handler 对应类型如下如图:l Controller 接口:l HttpRequestHandler 接口:l HttpServlet 接口:l RequestMapping方法注解可以看出 Handler 没有统一的接口,当dispatchServlet获取当对应的Handler之后如何调用呢?调用其哪个方法?这里有两种解决办法,一是用instanceof 判断Handler 类型然后调用相关方法 。二是通过引入适配器实现,每个适配器实现对指定Handler的调用。spring 采用后者。HandlerAdapter详解这里spring mvc 采用适配器模式来适配调用指定Handler,根据Handler的不同种类采用不同的Adapter,其Handler与 HandlerAdapter 对应关系如下:Handler类别对应适配器描述ControllerSimpleControllerHandlerAdapter标准控制器,返回ModelAndViewHttpRequestHandlerHttpRequestHandlerAdapter业务自行处理 请求,不需要通过modelAndView 转到视图ServletSimpleServletHandlerAdapter基于标准的servlet 处理HandlerMethodRequestMappingHandlerAdapter基于requestMapping对应方法处理HandlerAdapter 接口方法HandlerAdapter 接口结构图l 演示基于Servlet 处理 SimpleServletHandlerAdapter/ 标准Servletpublic class HelloServlet extends HttpServlet Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException resp.getWriter().println(hello luban ); 上述例子中当IOC 中实例化这些类之后 DispatcherServlet 就会通过org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter() 方法查找对应handler的适配器 ,如果找不到就会报 如下异常。javax.servlet.ServletException: No adapter for handler com.tuling.control.SimpleControl3c06b5d5: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handlerorg.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1198)org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)ViewResolver 与View 详解找到应的Adapter 之后就会基于适配器调用业务处理,处理完之后业务方会返回一个ModelAndView ,在去查找对应的视图进行处理。其在org.springframework.web.servlet.DispatcherServlet#resolveViewName() 中遍历 viewResolvers 列表查找,如果找不到就会报一个 Could not resolve view with name 异常。BeanNameViewREsolver示例: 添加自定义视图:public class MyView implements View Override public void render(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception response.getWriter().print(hello luban good man.); 配置视图解析器:修改视图跳转方法 :public ModelAndView handleRequ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年电子商务行业跨境电商市场前景预测研究报告
- 2025年生物医药科技应用前景研究报告
- 2025年环境监测产业技术创新与市场前景研究报告
- 商场供应商培训课件
- 国家事业单位招聘2025国家文化和旅游部恭王府博物馆应届毕业生招聘4人笔试历年参考题库附带答案详解
- 2025福建龙岩市人力资源服务有限公司招聘6人笔试参考题库附带答案详解
- 2025年甘肃公交建集团校园招聘200人笔试参考题库附带答案详解
- 2025年江西安义县工投商业管理有限公司第一批公开招聘工作人员15人笔试参考题库附带答案详解
- 2025年国网电力公司招聘(第二批)笔试参考题库附带答案详解
- 2025山西杏花村汾酒集团有限责任公司销售业务岗社会招聘笔试参考题库附带答案详解
- 2.2创新永无止境教学课件 2025-2026学年度九年级上册 道德与法治 统编版
- 矿山爆破作业安全培训课件
- 2025-2026学年九年级英语上学期第一次月考 (四川成都专用) 2025-2026学年九年级英语上学期第一次月考 (四川成都专用)解析卷
- 高陡边坡稳定性控制技术及其工程实践
- 河南省委党校在职研究生入学考试真题及答案
- 2025年社区工作者招聘考试宗教学试卷
- 2025康复医学考试题库(含参考答案)
- 2025年十五五智能制造推进的战略思考报告-数字化转型基本普及 智能化升级战略突破
- 民兵护路基本知识培训课件
- 2024版中国难治性全身型重症肌无力诊断和治疗专家共识解读课件
- 2025年手卫生规范试题及答案
评论
0/150
提交评论