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

seo网站优化代码wordpress 4.9优化

seo网站优化代码,wordpress 4.9优化,scrm管理系统,旅游信息管理网站开发文件1、前言简单介绍SpringBoot的自动配置就是SpringBoot的精髓所在#xff1b;对于SpringBoot项目是不需要配置Tomcat、jetty等等Servlet容器#xff0c;直接启动application类既可#xff0c;SpringBoot为什么能做到这么简捷#xff1f;原因就是使用了内嵌的Servlet容器…1、前言简单介绍SpringBoot的自动配置就是SpringBoot的精髓所在对于SpringBoot项目是不需要配置Tomcat、jetty等等Servlet容器直接启动application类既可SpringBoot为什么能做到这么简捷原因就是使用了内嵌的Servlet容器默认是使用Tomcat的具体原因是什么为什么启动application就可以启动内嵌的Tomcat或者其它Servlet容器ok本文就已SpringBoot嵌入式Servlet的启动原理简单介绍一下环境准备SmartGitIntelliJ IDEAMavenSpringBoot2.2.1本文先创建一个SpringBoot项目基于最新的2.2.1版本阅读源码之前先进行一些必要的应用代码实践先学习应用实践有助于理解源码在SpringBoot官网找到嵌入式Servlet容器相关的描述Under the hood, Spring Boot uses a different type of ApplicationContext for embedded servlet container support. The ServletWebServerApplicationContext is a special type of WebApplicationContext that bootstraps itself by searching for a single ServletWebServerFactory bean. Usually a TomcatServletWebServerFactory, JettyServletWebServerFactory, or UndertowServletWebServerFactory has been auto-configured.这是比较重要的信息简单翻译一下里面提到ServletWebServerApplicationContext这是一种特殊的ApplicationContext 类也就是启动时候用来扫描ServletWebServerFactory类型的类的ServletWebServerFactory类是一个接口类具体的实现类是TomcatServletWebServerFactory, JettyServletWebServerFactory, or UndertowServletWebServerFactory etc.2、定制servlet容器然后如何自定义嵌入式Servlet容器的配置在官方文档里找到如图对应的描述方法1修改application配置从官方文档可以看出支持的配置有如下所示所以要修改servlet容器配置直接在application配置文件修改即可网络设置: 监听端口(server.port)、服务器地址(server.address)等等Session设置: 会话是否持久 (server.servlet.session.persistent),会话超时(server.servlet.session.timeout), 会话数据的位置 (server.servlet.session.store-dir), 会话对应的cookie配置 (server.servlet.session.cookie.*) 等等错误管理: 错误页面位置 (server.error.path)等等SSL设置具体参考Configure SSLHTTP compression具体参考Enable HTTP Response Compression方法2自定义WebServerFactoryCustomizer定制器类从文档里还找到了通过新建自定义的WebServerFactoryCustomizer类来实现属性配置修改WebServerFactoryCustomizer也就是一种定制器类import org.springframework.boot.web.server.WebServerFactoryCustomizer;import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;import org.springframework.stereotype.Component;/** * * 自定义的WebServerFactory定制器类 * * author nicky * * 修改记录 * 修改后版本: 修改人 修改日期: 2019年12月01日 修改内容: * */Componentpublic class WebServerFactoryCustomizationBean implements WebServerFactoryCustomizer { Override public void customize(ConfigurableServletWebServerFactory server) { server.setPort(8081); }}ok官方文档里提供了如上的代码实例当然也可以通过bean注解进行设置代码实例如Configurationpublic class MyServerConfig { /** * 自定义的WebServerFactory定制器类 * return */ Bean public WebServerFactoryCustomizer webServerFactoryCustomizer(){ return new WebServerFactoryCustomizer() { Override public void customize(ConfigurableServletWebServerFactory factory) { factory.setPort(8082); } }; }}3、变换servlet容器SpringBoot2.2.1版本支持的内嵌servlet容器有tomcat、jetty(适用于长连接)、undertow(高并发性能不错但是默认不支持jsp)不过项目默认使用的是Tomcat的我们可以找新建的一个SpringBoot项目要求是集成了spring-boot-starter-web的工程在pom文件右键-Diagrams-Show Dependencies可以看到对应的jar关系图ok从图可以看出SpringBoot默认使用是Servlet容器是Tomcat然后如果要切换其它嵌入式Servlet容器要怎么实现我们可以在图示选择spring-boot-starter-tomcat右键exclusion然后引入其它的servlet容器pom配置如图org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat org.springframework.boot spring-boot-starter-jetty 4、servlet容器启动原理ok有了前面应用方面的学习之后就可以简单跟一下Springboot是怎么对servlet容器进行自动配置的内嵌的默认Tomcat容器是怎么样启动的从之前博客的学习可以知道Springboot的自动配置都是通过一些AutoConfiguration类进行自动配置的所以同理本博客也找一些对应的类ServletWebServerFactoryAutoConfiguration 就是嵌入式servlet容器的自动配置类简单跟一下其源码Configuration(proxyBeanMethods false)AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE)ConditionalOnClass(ServletRequest.class)ConditionalOnWebApplication(type Type.SERVLET)EnableConfigurationProperties(ServerProperties.class)//使ServerProperties配置类起效Import({ ServletWebServerFactoryAutoConfiguration.BeanPostProcessorsRegistrar.class, ServletWebServerFactoryConfiguration.EmbeddedTomcat.class, ServletWebServerFactoryConfiguration.EmbeddedJetty.class, ServletWebServerFactoryConfiguration.EmbeddedUndertow.class })//Import是Spring框架的注解作用是将对应组件加载到容器这里关键的是BeanPostProcessorsRegistrar一个后置处理类public class ServletWebServerFactoryAutoConfiguration { Bean public ServletWebServerFactoryCustomizer servletWebServerFactoryCustomizer(ServerProperties serverProperties) { return new ServletWebServerFactoryCustomizer(serverProperties); }//Tomcat的定制器类起作用的条件是有Tomcat对应jar有引入项目的情况默认是引入的所以会执行Tomcat的servletWeb工厂定制类 Bean ConditionalOnClass(name org.apache.catalina.startup.Tomcat) public TomcatServletWebServerFactoryCustomizer tomcatServletWebServerFactoryCustomizer( ServerProperties serverProperties) { return new TomcatServletWebServerFactoryCustomizer(serverProperties); } .... //注册重要的后置处理器类WebServerFactoryCustomizerBeanPostProcessor在ioc容器启动的时候会调用后置处理器 public static class BeanPostProcessorsRegistrar implements ImportBeanDefinitionRegistrar, BeanFactoryAware { private ConfigurableListableBeanFactory beanFactory; //设置ConfigurableListableBeanFactory Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { if (beanFactory instanceof ConfigurableListableBeanFactory) { this.beanFactory (ConfigurableListableBeanFactory) beanFactory; } } Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) { if (this.beanFactory null) { return; } registerSyntheticBeanIfMissing(registry, webServerFactoryCustomizerBeanPostProcessor, WebServerFactoryCustomizerBeanPostProcessor.class); registerSyntheticBeanIfMissing(registry, errorPageRegistrarBeanPostProcessor, ErrorPageRegistrarBeanPostProcessor.class); } private void registerSyntheticBeanIfMissing(BeanDefinitionRegistry registry, String name, Class beanClass) { if (ObjectUtils.isEmpty(this.beanFactory.getBeanNamesForType(beanClass, true, false))) { RootBeanDefinition beanDefinition new RootBeanDefinition(beanClass); beanDefinition.setSynthetic(true); registry.registerBeanDefinition(name, beanDefinition); } } }}从自动配置类里我们并不能很明确地理解自动配置是怎么运行的只看重关键的一些信息点比如注册了Tomcat的ServletWebServer工厂的定制器类方法是tomcatServletWebServerFactoryCustomizer还有一个后置处理类BeanPostProcessorsRegistrar后置处理是Spring源码里是很关键的所以这里可以继续点一下TomcatServletWebServerFactoryCustomizerTomcat的webServer工厂定制器类也是一个WebServerFactoryCustomizer类型的类从前面的应用学习这个类是进行servlet容器的一些定制这个是关键的方法主要是拿ServerProperties配置类里的信息进行特定属性定制所以这里就可以知道Tomcat的配置是通过定制器类TomcatServletWebServerFactoryCustomizer进行定制的其工厂类是TomcatServletWebServerFactoryTomcatServletWebServerFactory工厂类进行Tomcat对象的创建必要参数的自动配置ok简单跟了一下源码之后我们知道了TomcatServletWebServerFactoryCustomizer是Tomcat的定制器类Tomcat对象的创建是通过TomcatServletWebServerFactory类的然后有个疑问这个定制器类是什么时候创建的为什么一启动Application类嵌入式的Tomcat也启动了打成jar格式的Springboot项目只要运行jar命令不需要启动任何servlet容器项目也是正常运行的然后这个BeanPostProcessorsRegistrar后置处理类有什么作用ok带着这些疑问我们还是用调试一下源码如图打断点调试看看Tomcat定制器是怎么创建的定制器类被调用了其对应的工厂类也会起作用打个断点看看工厂类是怎么调用的ok启动Application类在idea里调试如图可以跟着调用顺序一点点跟源码如图所示调用了Springboot的run方法run方法里的刷新上下文方法refreshContext其实也就是创建ioc容器初始化ioc容器并创建容器的每一个组件这里注意到了调用到了ServletWebServerApplicationContext类的refresh方法ServletWebServerApplicationContext类前面也介绍到了这个类是一种特殊的ApplicationContext类也就是一些ioc的上下文类作用于WebServer类型的类创建webServer类先创建ioc容器调用基类的onRefresh方法然后再调用createWebServer方法ioc的servletContext组件没被创建的情况调用ServletWebServerFactory类获取WebServer类有servletContext的情况直接从ioc容器获取扫描ioc容器里是否有对应的ServletWebServerFactory类TomcatServletWebServerFactory是其中一种通过调试是有扫描到的所以从ioc容器里将这个bean对应的信息封装到ServletWebServerFactory对象接着是ioc容器创建bean的过程这个一个比较复杂的过程因为是单例的所以是调用singleObjects进行存储bean被创建之后调用了后置处理器这个其实就是Spring的源码里的bean的创建过程后置处理器是很关键的在bean被创建还没进行属性赋值时候就调用了后置处理器关键点这里是检测是否有WebServerFactory工厂类前面的调试发现已经有Tomcat的WebServer工厂类所以是会调用后置处理器的调用了WebServerFactoryCustomizerBeanPostProcessor这个后置处理类然后拿到一个WebServerFactoryCustomizer定制器类也就是TomcatWebServerFactoryCustomizer通过后置处理器调用定制方法customize然后WebServerFactoryCustomizerBeanPostProcessor这个后置处理器是什么注册的往前翻Springboot的自动配置类在这里找到了WebServerFactoryCustomizerBeanPostProcessor的注册ok继续调试源码BeanWrapperImpl创建bean实例okTomcat定制器类被调用了是通过后置处理器调用的然后就是之前跟过的定制方法customize执行Tomcat的WebServer工厂类创建Tomcat对象实例进行属性配置引擎设置等等端口有设置就创建TomcatwebServer对象TomcatWebServer启动Tomcat如图代码所示ok跟了源码您是否有一个疑问Tomcat的工厂类TomcatServletWebServerFactory是什么时候创建的好的返回前面配置类看看如图这里用import引入了EmbeddedTomcat类okEmbeddedTomcat是一个内部的配置类条件是有引入Tomcat对应的jar就会自动创建工厂类很显然Springboot默认是有引入的ok经过源码比较简单的学习思路就很清晰了Springboot的ServletWebServerFactoryAutoConfiguration是嵌入式Servlet容器的自动配置类这个类的主要作用是创建TomcatServletWebServerFactory工厂类创建定制器类TomcatServletWebServerFactoryCustomizer创建FilterRegistrationBean类同时很关键的一步是注册后置处理器webServerFactoryCustomizerBeanPostProcessor然后Springboot的Application类一启动就会执行run方法run经过一系列调用会通过ServletWebServerApplicationContext的onRefresh方法创建ioc容器然后通过createWebServer方法createWebServer方法会去ioc容器里扫描是否有对应的ServletWebServerFactory工厂类(TomcatServletWebServerFactory是其中一种)扫描得到就会触发webServerFactoryCustomizerBeanPostProcessor后置处理器类这个处理器类会获取TomcatServletWebServerFactoryCustomizer定制器并调用customize方法进行定制这时候工厂类起作用调用getWebServer方法进行Tomcat属性配置和引擎设置等等再创建TomcatWebServer启动Tomcat容器ok本问只是简单跟一下嵌入式Tomcat容器的启动过程可以看出Springboot的强大还是基于Spring框架的比如本博客提到的后置处理器以及bean工程创建bean实例的过程都是通过Spring框架实现的
http://www.sadfv.cn/news/157341/

相关文章:

  • 注册域名以后怎么做网站山东裕达建设工程咨询有限公司网站
  • 深圳涂料网站建设租服务器多少钱
  • 淮阴区城乡建设管理局网站简单网站建设合同
  • 中文网站建设小组台州做网站seo的
  • dz建站与wordpressseo网站关键词优化
  • 网站封装成全高清视频免费观看
  • 大浪网站建设网站备案公司
  • 网站备案需要当面核验哪些信息郴州新网交友手机版
  • dz旅游网站模板广西柳州网站建设公司
  • 织梦茶叶网站模板免费下载北京高端建站公司
  • 网站验证钱的分录怎么做wordpress英文企业主题下载
  • 网站直播软件开发卖磁铁的网站怎么做
  • 百度网站排名查询单页网站下载
  • 外贸网站啥需要掌握在自己手里城市建设规划网站
  • 网站解决访问量超载wordpress欢迎新会员
  • 网站推广优化是什么意思网站前端交互功能案例分析
  • 科技网站制作公司鄂尔多斯网站建设
  • 做自己的网站多少钱做seo网站诊断书怎么做
  • 网站群集约化建设wordpress 网络电台
  • 设计本官方网站 网络服务成都最好的编程培训机构
  • 郑州网站建设新闻wordpress zip 升级
  • 家装网站自己做的建筑工程承包
  • 官网优化包括什么内容seo网站建设是什么
  • 在百度上做网站找谁北京网站建设兴田德润官网多少
  • 网站素材模板旅游python做网页界面
  • 做的比较好网站有哪些大通县公司网站建设
  • 南昌网站建设怎么样郑州直播app开发
  • 怀化订水网站网络营销是一种什么样的营销
  • 网站开发编码选择一般是做网站去哪里做好
  • 南通住房和城乡建设局网站首页福建设计招聘网站