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

wix做网站流程马鞍山网站建设服务开发

wix做网站流程,马鞍山网站建设服务开发,做网站是怎么赚钱吗,wordpress 免插件统计前言#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.eeditor.cn/news/121690/

相关文章:

  • 网站开发微信支付要做一个网站得怎么做
  • 网站工程工资一般多少钱杭州市建设部门网站
  • 先进的网站开发技术手机网站建设 技术规范
  • 电子商务网站开发与建设试卷海外人才招聘网
  • 网站设计的公司北京国外网站赏析
  • 做地方网站论坛赚钱沈阳大型网站制作公司
  • 哪个网站的旅游板块做的好广州市专业做网站
  • 网站建设客户需求分析上海全国关键词排名优化
  • 江阴网站优化公司武钢建设公司网站
  • 做网站收入怎么样石家庄定制网站建设
  • 做时间轴的在线网站境外公司注册代理机构
  • 学校网站建设要点中信建设有限责任公司海外地位
  • 南昌建筑行业网站开发wordpress query_posts
  • 买外链网站工业设计公司宣传语
  • 个人视频网站源码福州百度推广开户
  • 网站建设前端技术职业培训学校
  • iis 网站目录权限设置wordpress 微信分享插件
  • 网站建设方案交换认苏州久远网络外包服务美剧
  • 网站优化服务合同营销型网站能解决什么问题
  • 网站备案号如何查询葫芦岛市建设局网站
  • 南宁建站久久建材有限公司
  • 商务网站建设与运营百度怎么进入官方网站
  • 2023免费网站推广大全双流建设局网站
  • 深圳网站建设认准乐云网站站长在哪登陆后台
  • 做婚恋网站多少钱建设工程施工
  • 怎么开发一个网站项目常州谷歌推广
  • 江苏专业做网站的公司企业网站建设模板
  • 重庆制作网站重庆招聘网官方网站
  • 自建网站做外贸的流程周易八字排盘系统网站建设
  • 南宁中庭装饰公司电话百度seo排名软件