首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Tomcat源码篇-启动核心流程-没你想的那么难哦

1.启动的入口   你可以通过脚本来启动Tomcat服务(startup.bat),但如果你看过脚本的命令,你会发现最终调用的还是Bootstrap中的main方法,所以我们需要从main方法来开始...通过反射的方式创建了Catalina的类对象,并通过反射创建了Catalina的实例 设置了类加载器的父子关系 用过成员变量catalinaDaemon记录了我们创建的Catalina实例   这个是通过...如果生命周期的内容不清楚,请看上一篇文章的介绍。 4.start方法   最后我们来看下start方法的代码。...5.核心流程的总结 我们可以通过下图来总结下Tomcat启动的核心流程   从图中我们可以看到Bootstrap其实没有做什么核心的事情,主要还是Catalina来完成的。   ...本文只是从Tomcat的启动核心流程来讲解,还有些具体的实现细节没有介绍到。

19120

JVM学习-类加载

接口方法表 如果这个类还有父类没有加载,先加载父类 加载和链接可能是交替运行的 注意 instabceKlass这样的【元数据】是存储方法区(1.8后的元空间内),但_java_mirror是存储堆中...} } 双亲委派模式 所谓的双亲委派,就是指调用类加载器的loadClass方法,查找类的规则 ClassLoader.loadClass()方法源码 protected Class<?...我们使用JDBC,都需要加载Driver驱动,不知道你注意到没有,不写 Class.forName("com,mysql.jdbc.Driver") 也是可以让com.mysql.jdbc.Driver...再看1)他就是大名鼎鼎的Service Provider Interface(SPI) 约定如下,jar包的META_INF/services包下,以接口全限定名为文件名,文件内容就是实现类名称 如上图...问问自己,什么时候需要自定义类加载器 想加载非classpath随意路径中的类文件 都是通过接口来使用实现,希望解耦,常用在框架设计 这些类希望予以隔离,不同应用的同名类都可以加载,不冲突,常见于tomcat

24510
您找到你想要的搜索结果了吗?
是的
没有找到

bootloader启动之【 lk -> kernel】分析笔记

LCM显示驱动,启动模式选择,加载logo资源, 具体代码流程如下时序图. */ platform_init(); ... /* app初始化,跳转到mt_boot_init入口开始执行,..., __apps_end],显然区间就是“.apps” 这个section内容了....,启动模式选择,加载logo资源 检测是否DA模式,检测分区中是否有KE信息,如果就KE信息,就从分区load 到DRAM, 点亮背光,显示logo,禁止I/D-cache和MMU,跳转到DA(??)...、facotry、fastboot、recovery等,然后从EMMC中的boot分区找到(解压) ramdisk跟zImage的地址通过read系统调用load到DRAM址中, kernel最终load...到DRAM; 3、解析dtb,写入到DRAM指定区域; 4关闭MMU、irq / fiq,关闭I/D-cache, 拉起 kernel; ?

2.1K20

Tomcat服务器顶层结构和启动过程

详细的配置文件文件内容可以到Tomcat官网查看:http://tomcat.apache.org/tomcat-8.0-doc/index.html 上边的配置文件,还可以通过下边的一张结构图更清楚的理解...Server标签设置的端口号为8005,shutdown=”SHUTDOWN” ,表示8005端口监听“SHUTDOWN”命令,乳沟接收到了就会关闭Tomcat。...Tomcat的启动入口main方法是Bootstrap类里,但具体的执行过程是Catalina里边,这样做可以使得把启动的入口和具体的管理类进行分开,从而可以方便的创建多种启动的方式。...来具体的执行; (4start命令的处理调用的时候有三个方法:setAwait、load 、start。...则进入,否则不进入;load方法用于加载配置文件,创建并初始化Server;start用于启动服务器。

92220

Bootstrap 模态框(Modal)插件的基本应用

模态框(Modal)通俗的说就是父窗体上弹出的一个子窗体。 通常用来显示一个单独的源内容或者是对一些模块进行进一步详细的介绍,可以不离开父窗体的情况下进行一些互动和内容的交互。...一、用法: 切换模态框(Modal)插件的隐藏内容通过 data 属性:控制器元素(比如按钮或者链接)上添加属性 data-toggle="modal",同时设置 data-target="#identifier...不能在同一加载多个模块,但可以页面上创建多个不同时间进行加载模态框中需要注意两点: 第一是 .modal,用来把 的内容识别为模态框。 第二是 .fade class。...4、remote 类型是 path ,默认值:false ,data-remote 使用 jQuery .load 方法,为模态框的主体注入内容。...如果添加了一个带有有效 URL 的 href,则会加载其中的内容

4.4K00

Jump Start Bootstrap4

通过JQuery触发下拉插件,你需要使用方法dropdown(); $().dropdown('toggle'); 页面加载后,我们可以使用这个方法把下拉插件的从关闭状态切换到开启状态。...它还应该有一个自定义属性data-ride,它告诉Bootstrap页面加载就可以启动滑动效果。如果没有这个属性,您第一次手动操作之前,幻灯片将不会自动更改。...添加data-dismiss使按钮单击关闭模式对话框。 对于本体,我们需要一个包含类modal-body的元素。您可以将几乎任何内容放到该元素中。...这些对于模式对话框中适当地填充内容非常有帮助。如果没有为modal-dialog元素提供额外的类,它的默认宽度是600px。...Bootstrap模式对话框有一个选项,当单击该句柄,将该链接加载到它的modal-body元素中。这个特性默认情况下是关闭的。

28.3K40

tomcat-超详细的启动流程(init)

daemon.setAwait(true); (6)执行daemon.load(args)。这段源码的作用是通过反射调用catalina中的load方法。将catalina组件load出来。...知道server.xml是catalina.load()方法中被解析的,并且不同的结点被发现需要解析,都有各自对应的类来进行解析。...自带的线程池,而现在被注释掉了是因为使用了java自带的线程池,后面会讲到启动流程是如何使用线程池的。...这一步即在构造Connector,指定了protocolHandler为Http11NioProtocol — NIO模式。...并且细心的同学可以发现,前面的类并不关心后面的类是如何init的,当自己被init结束后,传递给下一个类-即结点来进行处理或者返回处理完毕,这就是责任链模式tomcat中启动中就用了责任链模式

2.6K10

JVM类加载器机制与类加载过程

加载的结果;如果父加载器ExtClassLoader加载失败,AppClassLoader则会判断该类是否是引导的系统类(即是否是通过Bootstrap加载加载,这会调用Native方法进行查找);...如果引导类加载没有加载过该类,则当前的类加载器应该自己加载该类; 4. 若加载成功,返回 对应的Class 对象;若失败,抛出异常“ClassNotFoundException”。...一般情况下,双亲加载模型如下所示: ? Step 4....ExtClassLoader加载sun.security.pkcs11.P11Util也分析这个类内都使用了哪些类,并将这些类先加载内存后,才开始加载sun.security.pkcs11.P11Util...如上图所示: JVM方法区的类信息区是按照类加载器进行划分的,每个类加载器会维护自己加载类信息; 某个类加载加载相应的类,会相应地JVM内存堆(Heap)中创建一个对应的Class,

1.2K30

从源码探究双亲委派机制

就是根据类的限定名,类加载没有自己负责的加载路径中找到该类。...这里注意,我没有用父类加载器、子类加载器这样的语句,而是使用了**父亲加载器**,因为上图中这些箭头并**不表示继承关系**,而是一种**逻辑关系**, 实际上是通过组合的方式来实现的,这也是很多博客上没有写清楚...通过源码来看一下双亲委派具体是怎么实现的 代码很简单,来看java.lang.Class Loader中的load class方法 首先呢检查该类是否已经被加载了,如果没有,则开启加载流程,如果有...1第一次被破坏 一些情况下,双亲委派机制是可以主动破坏的,细心的同学可以发现,我自己通过匿名内部类直接重写了java.lang.classloader的load class方法,而我们的双亲委派机制是存在于这个方法内的...这个类加载器可以通过java.lang.Thread类的setContext-ClassLoader()方 法进行设置,如果创建线程还未设置,它将会从父线程中继承一个,如果在应用程序的全局范围内都没有设置过的话

49130

ElasticSearch详解——2.阅读源码详解ES启动过程

Debug模式中的一种,这里用的远程Debug模式。...);:根据log4j2.properties配置文件加载日志相关配置 PidFile.create(environment.pidFile(), true);:检查PID文件是否存在,不存在则创建,同时写入程序进程...添加一个ShutdownHook,当ES退出用于关闭必要的IO流,日志器上下文和配置器等 JarHell.checkJarHell(logger::debug);:Checks the current...} return threadPoolType; } } 如上,四种类型分别为: fixed(固定):fixed线程池拥有固定数量的线程来处理请求,没有空闲线程请求将被挂在队列中...queue_size参数可以控制没有空闲线程,能排队挂起的请求数 fixed_auto_queue_size:此类型为实验性的,将被更改或删除,不关注 scaling(弹性):scaling线程池拥有的线程数量是动态的

10400

深入浅出 Laravel 的 Facade 外观系统

外观模式是一种使用频率非常高的结构型设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互, 为复杂的子系统调用提供一个统一的入口,降低子系统与客户端的耦合度,且客户端调用非常方便。...加载外观服务 「外观」服务的加载工作由定义 Illuminate\Foundation\Http\Kernel 内核中的 \Illuminate\Foundation\Bootstrap\RegisterFacades...更优的解决方案是通过 spl_autoload_register 函数,将自定义的类加载程序作为 __autoload 的实现,以替代默认 __autoload() 模式函数或方法的行为。...() 方法作为自动加载程序的实现,使用「外观」服务动态引入这个类。...与此同时,load 方法通过 class_alias($original, $alias) 函数完成别名注册。

2.4K20

Class文件的加载过程

Bootstrap加载获取时会显示null 因为它是C++实现的 Java没有与其对应的class。...一个class文件load到内存中实际有两块内容: · 把二进制的文件扔到内存中(这块内容metaSpace(1.8之后)需要看JVM实现) · 与此同时生成了class类的对象,这个class对象指向了上面那一块内容...并且加载的时候加锁了(sychronized) 这里会检查是不是已经load进来了(findLoadedClass 再往下就是hospot源码了) 如果load进来了直接返回 如果没有load进来 会调用...,父加载器也没有加载成功,只能由我自己去加载,这里面调用了findClass(proctected修饰 只实现了一句话throw ClassNotFoundException ) 只可以子类去自己去实现...所以自定义classloader只需要重写findClass 即可 这个模式是模板模式方法 这个模式是模板模式方法 什么时候我们需要加载一个类呢?

19120

架构篇:Tomcat 高层组件构建一个商业帝国

Bootstrap 就像一个大神,初始化了类加载器,加载万物。 关于为何自定义各种类加载器详情请查看码哥的 Tomcat 架构设计解析 类加载器部分。 初始化类加载器 ?...如果 WebAppClassLoader自己没有加载到某个类,就会委托父加载器 SharedClassLoader去加载这个类,SharedClassLoader会在指定目录下加载共享类,之后返回给...通过向 JVM 注册一个「关闭钩子」,具体关键逻辑详见 org.apache.catalina.startup.Catalina#start 源码: Server 不存在则解析 server.xml 创建...也就是说启动和关闭 Server 的时候会分别先调用 Service 的 启动和停止方法。...除此之外,Server 组件还有一个重要的任务是启动一个 Socket 来监听停止端口,这就是为什么你能通过 shutdown 命令来关闭 Tomcat。

35720

JVM第六卷---类加载机制

("bootstrap F init"); } } 执行 public class Load5_1 { public static void main(String[] args) throws...---- 双亲委派模式 所谓的双亲委派,就是指调用类加载器的 loadClass 方法,查找类的规则 注意 这里的双亲,翻译为上级似乎更为合适,因为它们并没有继承关系 源码: 举例分析类加载过程...: 总结:是否已经加载,父类先尝试加载,父类找不到,再由当前类加载加载 ---- 线程上下文类加载器 我们使用 JDBC ,都需要加载 Driver 驱动,不知道你注意到没有,不写 Class.forName...打印 null,表示它的类加载器是 Bootstrap ClassLoader,会到 JAVA_HOME/jre/lib 下搜索类,但 JAVA_HOME/jre/lib 下显然没有 mysql-connector-java...,否则默认为应用程序类加载器 ---- 自定义类加载器 问问自己,什么时候需要自定义类加载器 1)想加载非 classpath 随意路径中的类文件 2)都是通过接口来使用实现,希望解耦,常用在框架设计

41110

Laravel5.3之bootstrap源码解析

说明:Laravel把Request通过管道Pipeline送入中间件Middleware和路由Router之前,还做了程序的启动Bootstrap工作,本文主要学习相关源码,看看Laravel启动程序做了哪些具体工作...Laravel入口index.php加载Composer加载器:Laravel5.2之Composer自动加载,然后进行Application的实例化:Laravel5.3之IoC Container...配置加载 LoadConfiguration 3. 日志配置 ConfigureLogging 4. 异常处理 HandleException 5....所以Route::get()的调用过程就是,首先发现没有Route类,就去自动加载函数堆栈中通过AliasLoader::load()函数查找到Route是IlluminateSupportFacadesRoute...load(array $providers) { // 查看bootstrap/cache/services.php有没有这个缓存文件 // 第一次启动没有

7K51
领券