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

外卖网站建设文档乡镇社区教育中心网站建设

外卖网站建设文档,乡镇社区教育中心网站建设,分销电商,易语言可以做网站Bootstrap Tomcat运行是通过Bootstrap的main方法#xff0c;在开发工具中#xff0c;我们只需要运行Bootstrap的main方法#xff0c;便可以启动tomcat进行代码调试和分析。Bootstrap是tomcat的入口#xff0c;它会完成初始化ClassLoader#xff0c;实例化Catalina以及loa…Bootstrap Tomcat运行是通过Bootstrap的main方法在开发工具中我们只需要运行Bootstrap的main方法便可以启动tomcat进行代码调试和分析。Bootstrap是tomcat的入口它会完成初始化ClassLoader实例化Catalina以及load、start动作。在这一篇文章中我们将会对tomcat初始化过程进行分析。 main方法 首先实例化Bootstrap并调用init方法对其初始化 Bootstrap bootstrap new Bootstrap(); init 首先初始化commonLoader、catalinaLoader、sharedLoader默认情况下这三个是相同的实例用于加载不同的资源。然后使用反射实例化Catalina设置其parentClassLoader为sharedLoader public void init() throws Exception {// 初始化commonLoader、catalinaLoader、sharedLoader关于ClassLoader的后面再单独分析initClassLoaders();Thread.currentThread().setContextClassLoader(catalinaLoader);SecurityClassLoad.securityClassLoad(catalinaLoader);// 反射方法实例化Catalina后面初始化Catalina也用了很多反射不知道意图是什么Class? startupClass catalinaLoader.loadClass(org.apache.catalina.startup.Catalina);Object startupInstance startupClass.getConstructor().newInstance();// 反射调用setParentClassLoader方法设置其parentClassLoader为sharedLoaderString methodName setParentClassLoader;Class? paramTypes[] new Class[1];paramTypes[0] Class.forName(java.lang.ClassLoader);Object paramValues[] new Object[1];paramValues[0] sharedLoader;Method method startupInstance.getClass().getMethod(methodName, paramTypes);method.invoke(startupInstance, paramValues);// 引用Catalina实例catalinaDaemon startupInstance; load start 初始化Bootstrap之后接下来就是加载配置启动容器。而load、start实际上是由Bootstrap反射调用Catalina的load、start这一部分代码将在下面的Catalina部分进行分析 启动时Catalina.setAwait(true)其目的是为了让tomcat在关闭端口阻塞监听关闭命令参考Catalina.await()方法deamon.load(args)实际上会去调用Catalina#load(args)方法会去初始化一些资源优先加载conf/server.xml找不到再去加载server-embed.xml此外load方法还会初始化Serverdaemon.start()实例上是调用Catalina.start() // daemon即Bootstrap实例 daemon.setAwait(true); daemon.load(args); Catalina 由前面的分析可知Bootstrap中的load逻辑实际上是交给Catalina去处理的下面我们对Catalina的初始化过程进行分析 load(init) load阶段主要是通过读取conf/server.xml或者server-embed.xml实例化Server、Service、Connector、Engine、Host等组件并调用Lifecycle#init()完成初始化动作以及发出INITIALIZING、INITIALIZED事件 1、 首先初始化jmx的环境变量 2、 定义解析server.xml的配置告诉Digester哪个xml标签应该解析成什么类如果我们要改变server.xml的某个属性值(比如优化tomcat线程池)直接查看对应实现类的setXXX方法即可 3、 解析conf/server.xml或者server-embed.xml并且实例化对应的组件并且赋值操作比如Server、Container、Connector等等 4、 为Server设置catalina信息指定Catalina实例设置catalina的home、base路径 5、 调用StarndServer#init()方法完成各个组件的初始化并且由parent组件初始化child组件一层套一层这个设计真心牛逼 public void load() {initDirs();// 初始化jmx的环境变量initNaming();// Create and execute our Digester// 定义解析server.xml的配置告诉Digester哪个xml标签应该解析成什么类Digester digester createStartDigester();InputSource inputSource null;InputStream inputStream null;File file null;try {// 首先尝试加载conf/server.xml省略部分代码......// 如果不存在conf/server.xml则加载server-embed.xml(该xml在catalina.jar中)省略部分代码......// 如果还是加载不到xml则直接return省略部分代码......try {inputSource.setByteStream(inputStream);// 把Catalina作为一个顶级实例digester.push(this);// 解析过程会实例化各个组件比如Server、Container、Connector等digester.parse(inputSource);} catch (SAXParseException spe) {// 处理异常......}} finally {// 关闭IO流......}// 给Server设置catalina信息getServer().setCatalina(this);getServer().setCatalinaHome(Bootstrap.getCatalinaHomeFile());getServer().setCatalinaBase(Bootstrap.getCatalinaBaseFile());// Stream redirectioninitStreams();// 调用Lifecycle的init阶段try {getServer().init();} catch (LifecycleException e) {// ......}// ......load时序图如下所示(查看原图) Digester利用jdk提供的sax解析功能将server.xml的配置解析成对应的Bean并完成注入比如往Server中注入ServiceEngineConfig它是一个LifecycleListener实现用于配置Engine但是只会处理START_EVENT和STOP_EVENT事件Connector默认会有两种HTTP/1.1、AJP不同的Connector内部持有不同的CoyoteAdapter和ProtocolHandler在Connector初始化的时候也会对ProtocolHandler进行初始化完成端口的监听ProtocolHandler常用的实现有Http11NioProtocol、AjpNioProtocol还有apr系列的Http11AprProtocol、AjpAprProtocolapr系列只有在使用apr包的时候才会使用到在ProtocolHandler调用init初始化的时候还会去执行AbstractEndpoint的init方法完成请求端口绑定、初始化NIO等操作在tomcat7中使用JIoEndpoint阻塞IO而tomcat8中直接移除了JIoEndpoint具体信息请查看org.apache.tomcat.util.net这个包 Catalina在load结束之前会调用Server的init()完成各个组件的初始化下面我们来分析下各个组件在init初始化过程中都做了哪些操作
http://www.dnsts.com.cn/news/246578.html

相关文章:

  • 更改网站名称做网站谁家好
  • 网站建设时间怎么查福州网站的优化
  • 怎么做网站赚流量wordpress语音插件下载
  • 网站建设哪家go网站模板中文乱码
  • 工厂弄个网站做外贸如何处理园林景观设计公司年度运营方案
  • 做网站卖产品app 开发
  • 毕业设计代做网站 知乎律师事务所网站建设方案
  • 昆明展示型网站开发创业平台app有哪些
  • 大连网站建设金豆上海十大管理咨询公司
  • 做网站编辑前景wordpress php.ini路径
  • 公司网站功能模块淘宝客如何建立自己的网站
  • 公司网站建设一定要求原图吗ui设计怎么收费
  • 网站建设公司的客户全国app开发
  • 怎样上传自己做的网站公司制作网站怎么做的
  • 网站网页进口长春吉林建设信息网站
  • 河南企业建站系统信息网站关联页面如何做
  • 金融跟单公司网站建设没备案的网站能用吗
  • 怎么做网站注册名密码河南网站推广优化
  • 石家庄便宜做网站华为网站建设的目标是否明确
  • 河北恒山建设集团网站网站鼠标特效代码
  • 白山网站seo设计师 个人网站
  • 传奇网站怎么制作教程网站开发服务合同印花税
  • 赣州本地网站私人app一键生成器
  • 宝格丽网站建设wordpress的psd
  • 河北衡水建设网站公司中国营销网站
  • 网站建设英文名词wordpress怎么建一个文章链接页面
  • 温州网站制作案例如何自建网站服务器
  • ps做网站原形网站开发公司流程
  • wordpress 外贸网站建设windows不能用wordpress
  • 网站淘宝客怎么做的落实二十条优化措施