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

网站pv访问量统计怎么做网站设计与管理教程

网站pv访问量统计怎么做,网站设计与管理教程,系统优化软件哪个好,区块链开发违法吗本篇对Spring MVC 的执行流程做一个简单总结 MVC执行流程总结 当浏览器发送一个请求#xff0c;例如http://localhost:8080/hello#xff0c;请求到达服务器后#xff0c;一般会进行如下操作#xff1a; 1、首先会经过DispatcherServlet#xff0c;默认映射路径为 /…本篇对Spring MVC 的执行流程做一个简单总结 MVC执行流程总结 当浏览器发送一个请求例如http://localhost:8080/hello请求到达服务器后一般会进行如下操作 1、首先会经过DispatcherServlet默认映射路径为 /即会匹配到所有请求 URL可作为请求的统一入口也被称之为前控制器jsp 不会匹配到 DispatcherServlet 非Spring Boot 程序需要手动进行创建此前的案例中已多次演示 /*** 创建DispatcherServlet* return*/Beanpublic DispatcherServlet dispatcherServlet(){return new DispatcherServlet();} Spring Boot 程序由 DispatcherServletAutoConfiguration 进行自动装配 DispatcherServlet默认是在首次使用时由tomcat容器初始化也可以进行设置setLoadOnStartup() 为启动时初始化 /*** 注册DispatcherServlet springmvc入口* param dispatcherServlet* return*/Beanpublic DispatcherServletRegistrationBean dispatcherServletRegistrationBean(DispatcherServlet dispatcherServlet,WebMvcProperties webMvcProperties){DispatcherServletRegistrationBean registrationBean new DispatcherServletRegistrationBean(dispatcherServlet, /);//设置tomcat容器启动时即进行DispatcherServlet初始化registrationBean.setLoadOnStartup(webMvcProperties.getServlet().getLoadOnStartup());return registrationBean;}DispatcherServlet 初始化时会优先到容器里寻找各种组件作为它的成员变量 下面的init方法有一个共同点首先会去父子容器中寻找有无相关组件如果没有会使用默认的组件 HandlerMapping 初始化时记录映射关系。初始化时会收集所有映射信息封装为 MapHandlerAdapter 初始化时准备参数解析器、返回值处理器、消息转换器 。分派请求HandlerExceptionResolver 初始化时准备参数解析器、返回值处理器、消息转换器。处理异常ViewResolver 准备视图处理 容器初始化时会收集所有 RequestMapping 映射信息封装为 Map // RequestMappingHandlerMapping 初始化时会收集所有 RequestMapping 映射信息封装为 Map // k请求方式 路径{ /test4} v 方法信息com.itbaima.a18.Controller1#test4()MapRequestMappingInfo, HandlerMethod handlerMethods handlerMapping.getHandlerMethods();handlerMethods.forEach((k,v)-{System.out.println( k v);}); 2、DispatcherServlet 会利用HandlerMapping 的实现去查找控制器方法我们使用最常用的 RequestMappingHandlerMapping 举例 根据 /hello 路径找到 RequestMapping(/hello) 对应的控制器方法控制器方法会被封装为 HandlerMethod 对象并结合匹配到的拦截器一起返回给 DispatcherServletHandlerMethod 和拦截器合在一起称为 HandlerExecutionChain调用链对象 //发送请求了根据路径K 获取RequestMappingHandlerMapping 封装的 Map 对应的V HandlerMethod //获取的结果会包装在拦截器链中 //HandlerExecutionChain with [com.itbaima.a18.Controller1#test1()] and 0 interceptors HandlerExecutionChain chain handlerMapping.getHandler(request); 3、DispatcherServlet 接下来会 调用拦截器的 preHandle 方法如果与preHandle方法中定义的拦截规则不匹配就直接返回错误信息不再向下执行。 RequestMappingHandlerAdapter 调用 handle 方法准备数据绑定工厂、模型工厂、ModelAndViewContainer、将 HandlerMethod 完善为 ServletInvocableHandlerMethod ControllerAdvice 全局增强点1️补充模型数据通过解析ModelAttribute  标注的方法补充模型数据到container中。 ControllerAdvicestatic class MyControllerAdvice {ModelAttribute(a)public String aa() {return aa;}}/*** ModelAttribute注解加在参数上由参数解析器负责解析* 加在方法上由HandlerAdapt进行解析*/Controllerstatic class Controller1 {ResponseStatus(HttpStatus.OK)public ModelAndView foo(ModelAttribute(u) User user) {System.out.println(foo);return null;}} ControllerAdvice 全局增强点2补充自定义类型转换器通过InitBinder 注解标记一个用于初始化DataBinder对象自定义数据绑定行为的方法它会在控制器处理请求之前被调用。如果InitBinder注解加在被ControllerAdvice 注解标记的控制器类的方法中时其作用范围是全局的并且是由RequestMappingHandlerAdapter 在初始化时解析并记录。而InitBinder 注解加在被Controller 标记的控制器中的方法上时会在控制器方法首次执行时解析并记录。 ControllerAdvicestatic class MyControllerAdvice {InitBinderpublic void binder3(WebDataBinder webDataBinder) {webDataBinder.addCustomFormatter(new MyDateFormatter(binder3 转换器));}}Controllerstatic class Controller1 {InitBinderpublic void binder1(WebDataBinder webDataBinder) {webDataBinder.addCustomFormatter(new MyDateFormatter(binder1 转换器));}public void foo() {}}RequestMappingHandlerAdapter中有两个成员变量 private final MapControllerAdviceBean, SetMethod initBinderAdviceCache用于存储被ControllerAdvice标记的控制器中 InitBinder 标注的方法。private final MapClass?, SetMethod initBinderCache用于存储Controller 标记的控制器中InitBinder标注的方法。 然后会使用 HandlerMethodArgumentResolver 准备参数 ControllerAdvice 全局增强点3RequestBody 增强         调用 ServletInvocableHandlerMethod 、使用 HandlerMethodReturnValueHandler 处理返回值。 ControllerAdvice 全局增强点4ResponseBody 增强 ResponseBody返回响应体前包装 ControllerAdvicestatic class MyResponseAdvice implements ResponseBodyAdviceObject {/*** 支持的方法** param returnType 返回值类型* param converterType 转换类型* return*/Overridepublic boolean supports(MethodParameter returnType, Class? extends HttpMessageConverter? converterType) {//如果方法上加了ResponseBody注解或者类上加了ResponseBody/RestController注解才进行转换if (returnType.getMethodAnnotation(ResponseBody.class) ! null|| AnnotationUtils.findAnnotation(returnType.getContainingClass(), ResponseBody.class) ! null) {return true;}return false;}/*** 增强的逻辑** param body 返回值* param returnType 返回类型* param selectedContentType 所选的响应内容类型。* param selectedConverterType 所选的消息转换器类型。* param request 当前的请求对象。* param response 当前的响应对象。* return*/Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType, Class? extends HttpMessageConverter? selectedConverterType, ServerHttpRequest request, ServerHttpResponse response) {//如果返回值就是Result类型则直接返回if (body instanceof Result) {return body;}//否则包装成Result类型返回return Result.ok(body);}} 最后会根据 ModelAndViewContainer 获取 ModelAndView 返回值处理器调用了 HttpMessageConverter 来将结果转换为 JSON这时 ModelAndView 就为 null如果返回的 ModelAndView 为 null不会进行后续的视图渲染与解析。 ModelAndView、String、未被ResponseBody 注解控制的对象类型返回值无论是否显式声明了ModelAttribute都要经历视图渲染的过程。         ModelAndView找视图是根据ModelAndView构造中的viewName寻找同名的视图还会使用.addObject() 方法中指定的数据对视图进行渲染 。         如果没有指定视图名则会         根据请求路径推断视图名 如果在处理器方法中没有显式指定视图名Spring MVC 会根据请求路径来推断视图名。          根据返回值类型推断视图名 如果处理器方法的返回值类型是String类型并且没有使用 ResponseBody 注解Spring MVC 会将返回的字符串作为视图名处理。         默认视图名 如果以上两种方式都没有找到视图名Spring MVC 会使用默认的视图名。默认的视图名通常是处理器方法所在的类名转换而来再加上适当的前后缀。         String找视图是根据返回值的名称去找同名的视图。         未被ResponseBody 注解控制的对象类型返回值找视图时如果方法上使用 RequestMapping(/) 及其派生注解声明了路径则按照路径的值去匹配视图。如果没有则需要手动指定路径。         HttpEntity、HttpHeaders、加上了ResponseBody 注解的对象返回值类型因为对应解析器的handleReturnValue 方法中标记了请求已经被处理无需继续渲染视图所以不走渲染视图流程。其区别在于返回的响应头和响应体的完整性。 4、调用拦截器的 postHandle 方法 5、处理异常或视图渲染 ControllerAdvice 全局增强点5️ExceptionHandler 异常处理 6、调用拦截器的 afterCompletion 方法
http://www.tj-hxxt.cn/news/220000.html

相关文章:

  • 2015微信网站网站建设销售职责
  • 网站建设项目成本估算表注册城乡规划师报名
  • 东阳市建设规划局网站企业做一个网站多少钱
  • 营销型网站文案怎么做永久免费跨境浏览app
  • 怎么用支付宝做发卡网站英雄联盟网站源码
  • 钓鱼网站的主要危害百度竞价推广方案的制定
  • 网站代码下载优秀网站建设哪个公司好
  • 有什么做衣服的网站购物车网站建设
  • 网站建设 平易公司大厅设计效果图大全
  • 科技公司网站设计欣赏中国建设银行网站上不去
  • 南通专业网站排名推广有什么网站可以做名片
  • 北京北排建设公司招标网站做网站公司分为国内还是国外
  • 天河商城网站建设普通话考试最后一题万能模板
  • 大望路网站建设直播软件哪个最好用
  • seo优化网站推广专员招聘wordpress企业营销主题
  • 建设网站一般多少钱北京市建设教育协会网站首页
  • 网站开发的最后5个阶段电话销售做网站推销
  • 网站标识描述可以填关键词吗网站系统建设的主要意义
  • 阆中网站建设01hl泰州网站整站优化
  • 深圳网站建设怎样容易wordpress不使用缩略图
  • 做网站泉州wordpress 男科医院主题
  • 番禺建设局网站首页seo网站权重
  • 常州商城网站建设创意经济型网站建设
  • 哪个网站银锭专业做银锭的上海行业门户网站建设技术
  • 有些网站为什么可以做资讯兰州光辉网站建设
  • 做零食网站的原因抖音代运营需要抖音什么条件
  • 网站接入空间百度联盟项目看广告挣钱
  • 袜子网站建设规划书医院的网站建设目标
  • 前端自己写代码建网站要花多少钱郑州医疗网站建设
  • 做网站一天打多少个电话自己建一个电商网站吗