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

有做微信婚介网站的吗企业站群cms官网免费

有做微信婚介网站的吗,企业站群cms官网免费,一个购物网站开发语言,天峨县建设局网站1、内嵌tomcat boot框架是默认内嵌tomcat的#xff0c;不需要手动安装和配置外部的 Servlet 容器。 简单的介绍一下tomcat服务器的构成#xff1a; Catalina#xff1a; Catalina 是 Tomcat 的核心组件#xff0c;负责处理 HTTP 请求、响应以及管理 Servlet 生命周期。它包…1、内嵌tomcat boot框架是默认内嵌tomcat的不需要手动安装和配置外部的 Servlet 容器。 简单的介绍一下tomcat服务器的构成 Catalina Catalina 是 Tomcat 的核心组件负责处理 HTTP 请求、响应以及管理 Servlet 生命周期。它包括一个 Web 容器和一个 Servlet 引擎用于处理 Servlet 和 JSP 页面。Connector 连接器是 Tomcat 与外部客户端之间通信的桥梁负责处理传入的 HTTP 请求并将其传递给 Catalina 处理。Tomcat 提供了多种类型的连接器包括 HTTP 连接器用于处理 HTTP 请求、AJP 连接器用于与 Apache HTTP Server 连接等。Realm Realm 是 Tomcat 的安全认证和授权机制用于验证用户身份并控制用户对受保护资源的访问权限。Tomcat 支持多种类型的 Realm如基于内存的 Realm、基于数据库的 Realm 等。Valves 阀门是 Tomcat 的拦截器组件用于在请求处理过程中执行特定的操作如访问日志记录、安全验证、压缩等。Tomcat 提供了多种类型的阀门可以通过配置文件进行灵活配置。Host Host 是 Tomcat 的虚拟主机用于在同一物理服务器上托管多个域名或应用程序。每个 Host 都有一个唯一的名称和基础目录可以配置不同的域名和应用程序。Engine Engine 是 Tomcat 的引擎用于管理多个虚拟主机Host。它负责调度请求到相应的虚拟主机并协调虚拟主机之间的资源共享和管理。Context Context 是 Tomcat 的上下文容器用于管理和配置单个 Web 应用程序的运行环境。每个 Web 应用程序都有一个对应的 Context包括其配置信息、Servlet 映射、Session 管理等。 我们来模拟一下tomcat的执行过程 其中第四步是将下面自定义的servlet程序放入servletContext上下文中并且手动指定映射路径相当于Controller层加入RequestMapping及派生注解指定路径 public class A36 {public static void main(String[] args) throws IOException, LifecycleException {//1.创建tomcat对象Tomcat tomcat new Tomcat();tomcat.setBaseDir(tomcat);//准备docBase,存放项目文件File docBase Files.createTempDirectory(boot.).toFile();docBase.deleteOnExit();//3.创建tomcat项目 contextContext context tomcat.addContext(, docBase.getAbsolutePath());//4.编程添加servletcontext.addServletContainerInitializer(new ServletContainerInitializer() {Overridepublic void onStartup(SetClass? set, ServletContext servletContext) throws ServletException {servletContext.addServlet(test,new MyServlet()).addMapping(/test);}}}, Collections.emptySet());//5.启动tomcattomcat.start();//6.设置协议创建连接器Connector connector new Connector(new Http11Nio2Protocol());connector.setPort(8080);tomcat.setConnector(connector);} } 编写一个自定义的servlet程序 public class MyServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().print(abc);} }而内嵌的tomcat如何与Spring进行整合 其关键点在于Config配置类中的 public DispatcherServletRegistrationBean registrationBean(DispatcherServlet dispatcherServlet) 方法。这个方法用于注册DispatcherServlet springmvc入口并创建一个 DispatcherServletRegistrationBean Bean将传入的 DispatcherServlet 注册到 Spring 应用程序中。 Config配置类又是在refresh容器前注册的 public static WebApplicationContext webApplicationContext(){AnnotationConfigWebApplicationContext context new AnnotationConfigWebApplicationContext();context.register(Config.class);context.refresh();return context;} 我们只需要在编程添加servlet这一步获取容器中所有的bean并且通过.onStartup() 方法完成注册 //得到applicationContextWebApplicationContext applicationContext webApplicationContext();//4.编程添加servletcontext.addServletContainerInitializer(new ServletContainerInitializer() {Overridepublic void onStartup(SetClass? set, ServletContext servletContext) throws ServletException {servletContext.addServlet(test,new MyServlet()).addMapping(/test);//得到ServletRegistrationBean中每一个注册的beanfor (ServletRegistrationBean value : applicationContext.getBeansOfType(ServletRegistrationBean.class).values()) {value.onStartup(servletContext);}}}, Collections.emptySet()); .onStartup() 方法底层调用的依旧是 servletContext.addServlet()  方法 boot在整合tomcat时首先是创建了Spring容器然后在调用onfresh()方法时会将tomcat创建出来并且执行到添加servlet。 在finishRefresh(); 方法会启动tomcat服务器并且设置协议创建连接器。 2、自动装配原理 现在有如下的场景在某个包下创建了两个bean并且将其注册到了两个配置类中 public class Bean1 {}public class Bean2 { }Configuration public class Config1 {Beanpublic Bean1 bean1(){return new Bean1(第三方);} } Configuration public class Config2 {Beanpublic Bean2 bean2(){return new Bean2();} } 假设这两个bean都是与数据库连接有关的组件具有通用性。那么难道是每次在别的地方用到的时候都去临时注册吗答案肯定是否定的就和方法封装一样我们可以在其他运用到的地方进行导入 Import 注解的作用就是导入其他配置类或组件类如果在  Import 注解中将Config1和Config2 的class 写死这样不太好 Configuration Import(MyInportSelector.class) public class MyConfig {Beanpublic Bean1 bean1(){return new Bean1(本项目);} }我们可以将Config1和Config2注册在自定义的MyInportSelector类中统一管理 在Spring中某个自定义ImportSelector类下需要统一装配的组件不是写死在自定义ImportSelector类中的而是放在META-INF下的spring.factories中统一进行管理。 /*** 读取配置文件中的引用*/ public class MyInportSelector implements ImportSelector {/*** 在方法中会读取所有jar包 META-INF下的spring.factories 做自动装配* param importingClassMetadata* return*/Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {//需要自动装配的类不是写死在代码中的而是放在配置文件中的//从配置文件中读取信息 META-INF下的spring.factories//com.itbaima.a37.MyInportSelector\//com.itbaima.a37_1.Config1,\//com.itbaima.a37_1.Config2ListString strings SpringFactoriesLoader.loadFactoryNames(MyInportSelector.class, null);return strings.toArray(new String[0]);} } 完成EnableAutoConfiguration的自动装配 /*** 读取配置文件中的引用*/ public class MyInportSelector implements ImportSelector {/*** 在方法中会读取所有jar包 META-INF下的spring.factories 做自动装配* param importingClassMetadata* return*/Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {for (String name : SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class, null)) {System.out.println(name);}} } 那如果在本项目注册的bean和其他外部引用的bean同名的问题呢 生效的是本项目中的。因为bean加载的时机不同第三方的bean先加载后加载的bean会覆盖先加载的同名的bean。然而在boot中默认是false不允许覆盖。解决方法 自定义的InportSelector实现DeferredImportSelector接口可以推迟第三方bean的加载。并且需要在注册第三方bean时加上 ConditionalOnMissingBean 注解表明当容器中没有该名称的bean时才需要加载。因为此时本项目中的bean已先于第三方的bean加载 Configuration public class Config1 {BeanConditionalOnMissingBean//当容器中缺少某个bean时才会添加public Bean1 bean1(){return new Bean1(第三方);} }3、AopAutoConfiguration AopAutoConfiguration是用于负责配置和启用 AspectJ 面向切面编程AOP功能。 我们模拟一下它的自动装配 Configuration Import(MyImportSelector.class) public class Config { }public class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return new String[]{AopAutoConfiguration.class.getName()};} } public class A38 {public static void main(String[] args) {GenericApplicationContext context new GenericApplicationContext();//注册各种后处理器AnnotationConfigUtils.registerAnnotationConfigProcessors(context.getDefaultListableBeanFactory());context.registerBean(Config.class);context.refresh();for (String name : context.getBeanDefinitionNames()) {System.out.println(name);}} } 下面这四条便是AopAutoConfiguration通过自动装配得到的BeanDefinitionName org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration$CglibAutoProxyConfiguration org.springframework.aop.config.internalAutoProxyCreator org.springframework.boot.autoconfigure.aop.AopAutoConfiguration$AspectJAutoProxyingConfiguration org.springframework.boot.autoconfigure.aop.AopAutoConfiguration 那么AopAutoConfiguration是如何选择装配哪些bean的呢我们点进AopAutoConfiguration的源码看一下 ConditionalOnProperty(prefix spring.aop, name auto, havingValue true, matchIfMissing true) 是一个针对properties配置文件内容的判断此处判断的含义是如果配置文件中没有spring.aop前缀的键或者有并且它的值为true时会进入这个类。显然目前的条件是成立的我们自定义的配置类中没有spring.aop前缀的键。 在静态内部类AspectJAutoProxyingConfiguration上也有一个注解ConditionalOnClass(Advice.class) 作用是判断是否存在一个名为Advice的类在boot中是存在的所以会进入AspectJAutoProxyingConfiguration类 在JdkDynamicAutoProxyConfiguration和CglibAutoProxyConfiguration静态内部类上分别有两个注解 ConditionalOnProperty(prefix spring.aop, name proxy-target-class, havingValue false) 判断properties配置文件中是否有spring.aop前缀的键并且值要为false。ConditionalOnProperty(prefix spring.aop, name proxy-target-class, havingValue true, matchIfMissing true) 判断properties配置文件中是否有spring.aop前缀的键并且值要为ture或者不存在。 而两个静态内部类上标注的EnableAspectJAutoProxy 注解实际上也是加上了Import 注解的自动装配配置类 自定义的自动装配了类实现了ImportBeanDefinitionRegistrar接口用于用编程的方式确定装配的内容 在AopConfigUtils.registerAspectJAnnotationAutoProxyCreatorIfNecessary(registry); 方法中实际上是注册了AnnotationAwareAspectJAutoProxyCreator 复习一下第三篇AnnotationAwareAspectJAutoProxyCreator是用于自动创建代理以实现切面功能的Spring后处理器将高级的Aspect切面分解并转换成低级的Advice切面并且根据设置去选择JDK或CGLIB代理方式proxyTargetClass属性在AnnotationAwareAspectJAutoProxyCreator中有两个重要的方法 protected ListAdvisor findEligibleAdvisors(Class? beanClass, String beanName)用于查找符合条件的切面通知器Advisors。protected Object wrapIfNecessary(Object bean, String beanName, Object cacheKey)内部调用 .findEligibleAdvisors得到存放符合条件切面通知器的集合如果集合不为空就创建代理。 根据条件应该会自动装配CglibAutoProxyConfiguration 可从容器中获取AnnotationAwareAspectJAutoProxyCreatorisProxyTargetClass的取值是true代表无论是否实现了接口走的都是CGLIB代理方式。 AnnotationAwareAspectJAutoProxyCreator proxyCreator context.getBean(AnnotationAwareAspectJAutoProxyCreator.class); System.out.println(proxyCreator.isProxyTargetClass()); 4、DataSource 在DataSourceAutoConfiguration中主要有两部分 EmbeddedDatabaseConfigurationSpring Framework 中用于配置内嵌式数据库Embedded Database的自动配置类之一PooledDataSourceConfigurationSpring Framework 中用于配置连接池数据源Pooled DataSource的自动配置类之一。 EmbeddedDatabaseConfiguration很少用到我们重点看PooledDataSourceConfiguration DataSourceConfiguration的每个静态内部类上都加入了ConditionalOnClass 条件判断注解。 Boot中默认是有HikariDataSource源的 所以会将HikariDataSource注册成bean并设置连接信息 5、MybatisAutoConfiguration 在MybatisAutoConfiguration类上有如下的注解 ConditionalOnClass({SqlSessionFactory.class, SqlSessionFactoryBean.class}) 表明必须要存在SqlSessionFactory和SqlSessionFactoryBean两个类。因为mybatis与boot整合需要数据源连接信息。ConditionalOnSingleCandidate(DataSource.class) 表明数据源必须是唯一的不能存在多份不同的数据源EnableConfigurationProperties({MybatisProperties.class}) 表明将来会创建一个MybatisProperties对象用于将环境中的键值信息与对象绑定要求配置中的键名必须前缀mybatisAutoConfigureAfter({ DataSourceAutoConfiguration.class, MybatisLanguageDriverAutoConfiguration.class }) : 表明该配置类是在DataSourceAutoConfiguration、MybatisLanguageDriverAutoConfiguration加载完成后再进行初始化。 上述任何一个条件不满足都不会进入MybatisAutoConfiguration public SqlSessionFactory sqlSessionFactory(DataSource dataSource) 方法用于创建SqlSessionFactory的bean注意加上了ConditionalOnMissingBean 代表容器中没有其他第三方的SqlSessionFactory的bean时才会初始化MybatisAutoConfiguration中的SqlSessionFactory。 public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) 方法用于创建SqlSession模板 SqlSessionTemplate是线程安全的在同一个线程中不同方法可以共用一个实例。 最后还有一个MapperScannerRegistrarNotFoundConfiguration内部类         它只有在没有自定义的MapperFactoryBean和MapperScannerConfigurer时才会生效 然后通过Import(AutoConfiguredMapperScannerRegistrar.class) 注解导入了AutoConfiguredMapperScannerRegistrar作用是扫描和引导类同包下的被Mapper注解控制的mapper/dao接口将这些定义为bean 6、DataSourceTransactionManagerAutoConfiguration DataSourceTransactionManagerAutoConfiguration是用于自动配置数据源事务管理器DataSource Transaction Manager的类之一。 在类上标注了ConditionalOnClass({ JdbcTemplate.class, TransactionManager.class }) 注解要求必须要有事务管理器和JDBC模板方法。 EnableConfigurationProperties(DataSourceProperties.class) 会将配置文件中以spring.datasource为前缀的key绑定到DataSourceProperties对象中设置数据库连接信息username,password... 并且导入了EnableConfigurationPropertiesRegistrar自动装配类。 同样JdbcTransactionManagerConfiguration静态内部类限定容器中只能有一份数据源 DataSourceTransactionManager创建处理与JDBC 数据源相关的事务的Bean。 下面介绍一些与整合Spring MVC相关的配置类 7、TransactionAutoConfiguration TransactionAutoConfiguration 是用于自动配置事务管理的类之一。 ConditionalOnClass(PlatformTransactionManager.class) 表明容器中必须要有PlatformTransactionManager类简单来说它定义了事务管理器的核心功能。      AutoConfigureAfter({ JtaAutoConfiguration.class, HibernateJpaAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, Neo4jDataAutoConfiguration.class }) 表明TransactionAutoConfiguration是在AutoConfigureAfter 注解value中的类初始化成后再加载。EnableConfigurationProperties(TransactionProperties.class) 可以将配置文件中以spring.transaction为前缀的key绑定到TransactionProperties对象上。 并且导入了EnableConfigurationPropertiesRegistrar自动装配类 TransactionAutoConfiguration类中提供了声明式和响应式事务的支持 以及创建事务管理器 还有配置声明式事务的管理 8、ServletWebServerFactoryAutoConfiguration 是 Spring Boot 中负责配置 Servlet 容器工厂的自动配置类之一 ConditionalOnClass(ServletRequest.class)ServletRequest类存在条件成立。ServletRequest定义了客户端向服务器发送的 HTTP 请求的主要属性和操作。它是一个核心组件用于在服务器端处理 HTTP 请求HttpServletRequest就是它的子类ConditionalOnWebApplication(type Type.SERVLET) 应用程序是一个 Servlet Web 应用程序时条件成立EnableConfigurationProperties(ServerProperties.class)用于启用特定类型的配置属性绑定到ServerProperties对象中。 这个类中主要注册了两个Bean: ServletWebServerFactoryCustomizer:这个方法的主要作用是根据传入的参数定制 Servlet Web 服务器工厂的行为包括配置服务器属性、注册 Web 监听器以及处理 Cookie 的 SameSite 属性。TomcatServletWebServerFactoryCustomizer:这个方法的主要作用是根据传入的参数定制 Tomcat Servlet Web 服务器的行为包括配置服务器属性、Session 会话管理、安全性等方面。 9、DispatcherServletAutoConfiguration 用于配置和启用 DispatcherServlet。DispatcherServlet 是 Spring MVC 中的中央调度器用于处理传入的 HTTP 请求并将它们分发到相应的处理程序Controller进行处理 ConditionalOnWebApplication(type Type.SERVLET) 应用程序是一个 Servlet Web 应用程序时条件成立ConditionalOnClass(DispatcherServlet.class) 容器中必须包含DispatcherServlet类条件成立AutoConfigureAfter(ServletWebServerFactoryAutoConfiguration.class 在ServletWebServerFactoryAutoConfiguration类装配完成后 Servlet 容器工厂创建完成装配本类。 在这个类中较为重要的是DispatcherServletConfiguration和DispatcherServletRegistrationConfiguration两个静态内部类 DispatcherServletConfiguration主要是将DispatcherServlet注册成bean以及一个解析客户端发送的包含文件上传的 HTTP 请求并将上传的文件转换成可操作的对象的beanDispatcherServletRegistrationConfiguration主要作用是将DispatcherServletRegistrationBean注册成bean并且设置tomcat容器启动时即进行DispatcherServlet初始化 10、WebMvcAutoConfiguration 主要用于配置和初始化 Spring MVC 的各种组件 RequestMappingHandlerAdapter: RequestMappingHandlerMapping: ExceptionHandlerExceptionResolver: 11、ErrorMvcAutoConfiguration 主要作用是在应用程序启动时自动配置一些默认的错误处理策略和错误页面。 此前提到的BasicErrorController处理基本的错误页面和错误信息ErrorPageRegistrar转发到自定义的错误页面在本类中都有体现
http://www.zqtcl.cn/news/765578/

相关文章:

  • 怎么申请域名建网站凡科网站建设总结
  • 温州网站设计定制外贸人才网哪家最好
  • 永康门业微网站建设做一个网站要多长时间
  • 南山网站建设哪家好四川省微信网站建设公
  • 网件路由器做网站网站建设中 提示
  • 全运网站的建设徐州网络推广公司排名
  • 成品网站源码1688体验区南宁网络推广服务商
  • 广州品牌网站开发公司网站建设价位
  • 网站首页没排名但内页有排名wordpress网站收录插件
  • 在线相册jsp网站开发与设计微信小程序app下载
  • 广元市建设局网站首页网站建设首选公司哪家好
  • 商务网站建设策划思路平台网站如何做推广方案设计
  • 哈尔滨网站快速排名通辽网站建设
  • 雄安专业网站建设哪家好分销系统网站建设
  • 咨询行业网站开发wordpress5.0新版如何发布文章
  • 做网站要什么技术saas建站和开源建站的区别
  • 大型网站建设哪家服务好qq对话制作器app
  • 做免费小说网站怎样赚钱网络推广方案最新
  • 电商网站的建设与运营揭阳专业的网站建设价格
  • 网站策划书包括哪些内容百度官方营销推广平台有哪些
  • 成都企业网站seo重庆企业网站推广费用
  • 广东电白建设集团有限公司网站wordpress 静态地址
  • 微网站和手机站区别工业设计专业学什么
  • 兰州网站建设哪里好素材图片高清
  • 公司网站建设进度设计官网登录入口
  • 中牟高端网站建设wordpress可视化文章
  • 那家公司做网站广西网络营销外包公司
  • 成品网站速成网站知名网站建设加盟合作
  • 零基础学pytho 网站开发Drupal对比WordPress
  • 网站开发 例子快影