当前位置: 首页 > news >正文

猪八戒做网站排名常州seo博客

猪八戒做网站排名,常州seo博客,哪个网站可以做司考题,5156智通人才招聘网前言#xff1a; 前面我们分析了 Spring MVC 的工作流程源码#xff0c;其核心是 DispatcherServlet#doDispatch 方法#xff0c;我们前面分析了获取 Handler 的方法 DispatcherServlet#getHandler 方法#xff0c;本篇我们重点分析一下获取当前请求的适配器 HandlerAdapt…前言 前面我们分析了 Spring MVC 的工作流程源码其核心是 DispatcherServlet#doDispatch 方法我们前面分析了获取 Handler 的方法 DispatcherServlet#getHandler 方法本篇我们重点分析一下获取当前请求的适配器 HandlerAdapter 的实现原理具体方法入口是 DispatcherServlet#getHandlerAdapter。 Spring MVC 知识传送门 详解 Spring MVCSpring MVC 简介 Spring MVC 初始化源码分析 Spring MVC 工作流程源码分析 Spring MVC 源码分析之 DispatcherServlet#getHandler 方法 ** DispatcherServlet#getHandlerAdapter方法源码分析** DispatcherServlet#getHandlerAdapter方法就是从 handlerAdapters 中查询匹配当前请求的 Handler只要找到了就不在循环直接返回我们我们重点关注adapter.supports(handler) 这行代码这里实际调用的是接口的抽象类 AbstractHandlerMapping 中的 getHandler 方法下面接着分析。 //org.springframework.web.servlet.DispatcherServlet#getHandlerAdapter protected HandlerAdapter getHandlerAdapter(Object handler) throws ServletException {this.handlerAdapters 为空判断 DispatcherServlet 初始化时注册的 handlerAdaptersif (this.handlerAdapters ! null) {//迭代遍历Iterator var2 this.handlerAdapters.iterator();while(var2.hasNext()) {HandlerAdapter adapter (HandlerAdapter)var2.next();//找到匹配当前 handler的 adapterif (adapter.supports(handler)) {//找到就返回return adapter;}}}//如果最后都没找到 抛出异常throw new ServletException(No adapter for handler [ handler ]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler); }AbstractHandlerMethodAdapter#supports 方法源码分析 AbstractHandlerMethodAdapter#supports 没有什么复杂的逻辑只是判断了 handler 是否是 HandlerMethod 类型至于 AbstractHandlerMethodAdapter#supportsInternal 方法它默认返回 fasle也就是说只要 handler 是 HandlerMethod 类型就算匹配成功。 //org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#supports public final boolean supports(Object handler) {//handler 是否是 HandlerMethod 类型 // this.supportsInternal 抽象方法 由子类实现 RequestMappingHandlerAdapter#supportsInternal 默认返回 truereturn handler instanceof HandlerMethod this.supportsInternal((HandlerMethod)handler); } //org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter#supportsInternal protected abstract boolean supportsInternal(HandlerMethod var1);//org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#supportsInternal protected boolean supportsInternal(HandlerMethod handlerMethod) {return true; }HandlerExecutionChain#applyPreHandle 方法源码分析 HandlerExecutionChain#applyPreHandle 方法的主要左右就是调用拦截器的 preHandle 方法如果有某个拦截器的 preHandle 方法返回 false就会逆向调用返回 true 的拦截器的 triggerAfterCompletion 方法。 //org.springframework.web.servlet.HandlerExecutionChain#applyPreHandle boolean applyPreHandle(HttpServletRequest request, HttpServletResponse response) throws Exception {//获取所有拦截器数组HandlerInterceptor[] interceptors this.getInterceptors();//为空判断if (!ObjectUtils.isEmpty(interceptors)) {//循环调用 拦截器的 preHandle 方法//this.interceptorIndex 记录当前拦截器的位置for(int i 0; i interceptors.length; this.interceptorIndex i) {HandlerInterceptor interceptor interceptors[i];//判断拦截器的 preHandle 方法返回值if (!interceptor.preHandle(request, response, this.handler)) {//拦截器 preHandle 方法返回 false 则反向调用返回 true 的那些拦截器的 afterCompletion 方法this.triggerAfterCompletion(request, response, (Exception)null);//返回 falsereturn false;}}}return true; }//org.springframework.web.servlet.HandlerExecutionChain#triggerAfterCompletion void triggerAfterCompletion(HttpServletRequest request, HttpServletResponse response, Nullable Exception ex) throws Exception {//获取所有拦截器HandlerInterceptor[] interceptors this.getInterceptors();//为空判断if (!ObjectUtils.isEmpty(interceptors)) {//反向遍历 这里是的 interceptorIndex 上面记录了的 --i 就是反向遍历for(int i this.interceptorIndex; i 0; --i) {HandlerInterceptor interceptor interceptors[i];try {//调用拦截器的 afterCompletion 方法interceptor.afterCompletion(request, response, this.handler, ex);} catch (Throwable var8) {logger.error(HandlerInterceptor.afterCompletion threw exception, var8);}}}}HandlerExecutionChain#applyPostHandle 方法源码分析 拦截器的 preHandle 方法调用完成后就会调用 handle 方法处理具体请求后面分析handle 方法调用完成后就会调用拦截器的 applyPreHandle 方法 HandlerExecutionChain#applyPreHandle 方法的主要左右就是逆向调用拦截器的 postHandle 方法。 //org.springframework.web.servlet.HandlerExecutionChain#applyPostHandle void applyPostHandle(HttpServletRequest request, HttpServletResponse response, Nullable ModelAndView mv) throws Exception {//获取所有拦截器HandlerInterceptor[] interceptors this.getInterceptors();//为空判断if (!ObjectUtils.isEmpty(interceptors)) {for(int i interceptors.length - 1; i 0; --i) {//逆向调用拦截器的 postHandle 方法HandlerInterceptor interceptor interceptors[i];interceptor.postHandle(request, response, this.handler, mv);}}}本篇主要分析了 Spring MVC 工作流程中比较简单的几个关键点HandlerAdapter 的适配过程、拦截器的前置后置处理等这些在流程中比较简单的环节就放在一起分析了希望可以帮助到有需要的朋友。 欢迎提出建议及对错误的地方指出纠正。
http://www.w-s-a.com/news/483294/

相关文章:

  • wordpress 网站遭篡改如何优化公司的网站
  • 汉中公司做网站网站建设的风格设置
  • 网站建议怎么写怎么做网页连接
  • 站长工具seo综合查询下载安装软件平台搭建包括哪几个方面
  • 做网站怎么存放视频支付功能网站建设
  • 庆阳手机网站设计兰州网站的优化
  • 企业网站托管有必要吗项目管理资格证书
  • 检索类的网站建设个人博客网页模板图片
  • 贵阳网站建设搜q479185700做网站有什么语言好
  • 制作公司主页网站贵阳网站建设技术托管
  • 广西建设网站网址多少钱南京江北新区地图
  • 网站建设及优化 赣icp外包服务美剧
  • wordpress添加菜单深圳优化网站排名
  • 免费下载建设银行官方网站重点专业建设验收网站
  • 建行官方网站登录怎样制作悬浮的WordPress
  • 建设一个网站需要几个角色广告设计与制作就业前景
  • 侵入别人的网站怎么做怎么修改网站排版
  • 网站如何提交百度收录什么最便宜网站建设
  • 商丘网站建设想象力网络做公司网站需要准备什么
  • 滁州新手跨境电商建站哪家好网站推广运作怎么做
  • 烟台有没有做网站大连建设工程信息网专家库
  • 网站建设明确细节商贸有限公司的经营范围
  • 南宁微网站开发做的好的有哪些网站
  • 好的素材下载网站读书网网站建设策划书
  • 东莞南城网站建设wordpress用户投稿插件
  • 开个网站做代理赚钱吗沽源网站建设
  • 做卖车网站需要什么手续wordpress 主题 demo
  • 上海外贸网站开发公司建设内容
  • 网站制作品牌公司网站的字体颜色
  • 外贸wordpress模板常德seo快速排名