欢迎访问本站!

首页科技正文

usdt钱包支付(www.caibao.it):Apache Solr 启动历程源码剖析

admin2021-03-1052安全技术WEB安全

USDT自动充值

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

Solr,着实是一个webapp,参考网上的文章,我们去看web.xml,查看到 SolrDispatchFilter类,该类的注释:此过滤器查看传入的URL,将其映射到solrconfig.xml中界说的处置程序。既然已经传入URL了,那就是已经启动完成了呗,以是我们要看的并不是这之后的代码,而是之前的启动历程。

Solr着实是一个webapp,Apache官方给出的安装包(http://archive.apache.org/dist/lucene/solr/ )内置了一个jetty容器,这里给出启动历程的调试参数下令:

java -Xdebug -Xrunjdwp:transport=dt_socket,address=10010,server=y,suspend=y -jar start.jar --module=http

再下载Solr的源码设置idea的Remote,即可更先调试。

更先之前,先来领会一下jetty,它是一个sevlet容器,http的客户端,感受和tomcat差其余是它自己可以以嵌入性的方式集成到自己的应用,用jetty就相当于把http服务塞进了自己的应用,而Solr就是这么做的。以是,我们要明晰Solr的启动历程,需要先去看看jetty的启动历程。

一、Jetty

参考毗邻:https://mp.weixin.qq.com/s/OQ24UmRHjoQObs_gpjJ7Ww

重点关注WebAppContext,先来看下WebAppContext主要做了什么,主要的初始化事情是两个方面:

  • war包的解压为其确立事情目录并将其中WEB-INF下的classes文件和依赖jar包加入到classpath中,还需要为应用确立一个ClassLoader。
  • 将治理的SessionHandler、SecurityHandler、ServletHandler和WebAppContext构建成一个Handler链,用来处置请求,再将请求交给其它链中的其它节点处置之前,还需要对请求举行url和目的主机的校验,若是校验不通过则直接返回。

主要的启动逻辑和资源加载逻辑都放在doStart()方式里,以是从dostart()方式更先剖析Solr的启动历程。

1.首先进入doStart()的preConfigure()方式

可以看到当前额context已经是solr-webapp了

这里加载了solr-home/server/lib/ 目录下的jars 以及file:///C:/Solr/solr-6.4.0/server/solr-webapp/webapp/WEB-INF/lib/ 下的jars

2.挪用父类ServlerContextHandler的super.doStart()

然后挪用了父类ServlerContextHandler的doStart()方式

关于ServletContextHandler:

是ContextHandler的直接子类,具有ContextHandler的大部门特征,差其余地方是ServletContextHandler中治理了三个Handler:ServletHandler、SessionHandler、SecurityHandler.

3.再进入父类ContextHandler的doStart() 方式

它的doStart()方式直接走到了父类(ContextHandler)的doStart() 方式。

Contexthandler是Scopehandler的直接子类,从名字来看是上下文handler,在servlet中每个web应用都有一个上下文。ContextHandler实现了CycelLife和handler接口,重写了doStart() 方式,这里我们直接去看它的doStart()方式

4.再进入WebAppContext的startContext()

跟进startContext(),由于当前this工具为WebAppContext,以是会进入它的startContext

this.configure() 照样会走到WebInfConfigureation的加载jars逻辑中,resolve 剖析元数据,跟进去看了一下,是对一些jar包的处置,应该是加载jar包的操作。

,

Usdt第三方支付接口

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

我们直接关注startWebapp,跟进去

5.进入ServletContextHandler的startContext()

well会进入super的starContext,也就是ServletContextHandler,ServletContextHandler就是重写了父类的startContext()方式,将SessionHandler、SecurityHandler、ServletHandler组成一个Handler链来对请求举行处置,而且在startContext()方式中举行了ServletHandler的初始化(remember this)

我们继续跟进父类的startContext方式。

6.进入ContextHandler的startContext()

挪用父类方式之前前两个步骤获取的都为null,继续跟进父类的方式

7.进入Scopedhandler的doStart() 方式

Scopedhandler主要是处置handler链,要害焦点在doScope方式中,这里doStart() 也是直接挪用了父类的doStart() 方式

8.进入AbstractHandler的dostart() 方式

AbstrachHandler是大部门handler都继续的父类,AbstractHandler并没有对父类要害方式doStart() doStop() 举行重写,也没有详细实现handler() 方式,唯一重写的就是setServer() 方式,以是还要继续往上跟。

9.进入ContainerLifeCycle的dostart() 方式

生命周期的治理,进入启动程序:这里会依次启动各个handler

10.this._servletHandler.initialize()

所有的handler(处置程序)都start起来了,再一层一层的返回去,回忆一下,在ServletContextHandler中有一个_servletHandler属性,它会有initalize()方式,这里就是我们的webapp(Solr)启动初始化,加载设置文件入口。

二、Solr

1.ServletHandler的initialize()

进入ServlerHandler的initialize()方式,动态调试的历程中查看一下它的各个属性再经由了一些列doStart(),startContext() 之后被初始化什么样了,看这样,Solr就是一个Webapp嘛~

这里我们重点关注一下this._filters,在读取web.xml中已经初始化(WebXmlConfiguration预加载剖析web.xml),这个filters很主要,我们查看web.xml 界说了这个filter。

2.SolrDispatchFilter的init()

Jetty中所有组件都是受LifeCycle治理,首先是启动这个SolrRequestFilter,f.start(),然后进入SolrRequestFilter的初始化方式FilterHolder.initialize(),这里先将FilterHolder转化成SolrDispatchFilter,增添它的Filter属性,贴一张SolrDispatchfilter的类图

转化完成后后新建Config工具,然后举行config的初始化

跟进SolrDispatchFilter的init()方式,注释中标明晰也许做了什么

3.SolrDispatchFilter的creatCoreContainer()

将creatCoreContainer单独拎出来,由于它算是整个init内里很焦点的方式,它的返回值初始化了this.cores,cores也就是CoreContainer,CoreContainer单独的剖析文章:

它就是盛放core的容器,使用creatCoreContianer方式举行初始化。跟进creatCoreContianer,首先是loadNodeConfig,返回一个NodeConfig工具,NodeConfig也在上面文章中有先容:每个私有属性都对应着solr.xml界说的字段,我们跟进loadNodeConfig方式

4.loadNodeConfig方式

行使SolrResourceLoader 加载solr.xml文件,然后再挪用SolrXmlConfig的fromSolrHome方式加载剖析loader中存储的solr.xml

此时的挪用栈(部门)

fromSolrHome:141, SolrXmlConfig (org.apache.solr.core)
loadNodeConfig:265, SolrDispatchFilter (org.apache.solr.servlet)
createCoreContainer:233, SolrDispatchFilter (org.apache.solr.servlet)
init:167, SolrDispatchFilter (org.apache.solr.servlet)

网友评论