MoDou Blog

Thinking will not overcome fear but action will.

死磕Tomcat系列(4)——Tomcat中的类加载器

死磕Tomcat系列(4)——Tomcat中的类加载器

死磕Tomcat系列(4)——Tomcat中的类加载器 在学习Tomcat中的类加载器,并且Tomcat为什么要实现自己的类加载器打破双亲委派模型原因之前,我们首先需要知道Java中定义的类加载器是什么,双亲委派模型是什么。 Java中的类加载器 类加载器负责在程序运行时将java文件动态加载到JVM中 从Java虚拟机的角度来讲的话,存在两种不同的类加载器: 启动类...

死磕Tomcat系列(3)——Tomcat如何做到一键式启停的

死磕Tomcat系列(3)——Tomcat如何做到一键式启停的

死磕Tomcat系列(3)——Tomcat如何做到一键式启停的 在没有SpringBoot内嵌有Tomcat之前,我们都是将项目打为War包放在Tomcat的webapp目录下面,然后如果是Linux系统,运行命令start.sh、如果是Windows系统,运行命令start.bat以后就能启动起来并访问到页面。如果是想要停止运行只需要运行shutdown.sh或者shutdown.bat...

死磕Tomcat系列(2)——EndPoint源码解析

死磕Tomcat系列(2)——EndPoint源码解析

死磕Tomcat系列(2)——EndPoint源码解析 在上一节中我们描述了Tomcat的整体架构,我们知道了Tomcat分为两个大组件,一个连接器和一个容器。而我们这次要讲的EndPoint的组件就是属于连接器里面的。它是一个通信的端点,就是负责对外实现TCP/IP协议。EndPoint是个接口,它的具体实现类就是AbstractEndpoint,而AbstractEndpoint具体的...

徒手撸一个简单的RPC框架(2)——项目改造

徒手撸一个简单的RPC框架(2)——项目改造

徒手撸一个简单的RPC框架(2)——项目改造 在上一篇的徒手撸一个简单的RPC框架中再最后的服务器和客户端连接的时候只是简单的写了Socket连接,觉得有些不妥。正好最近学习了Netty,在平时工作中没机会运用,于是自己就给自己出需求将之前的项目改造一下。 Netty是什么? 在学习Netty之前呢我们首先得了解IO和NIO IO模型 IO编程模型简单来说就是上一篇我写的服...

工作半年遇到最奇葩的问题

工作半年遇到最奇葩的问题

工作半年遇到最奇葩的问题 背景 公司最近买了一套项目,在启动的时候出现了一系列奇怪的问题,对方的技术栈要求是Tomcat7启动,但是由于我们公司出于安全的考虑所以是要求用Tomcat9进行启动的。 问题描述 下面情况都是相同war包相同Tomcat情况下 系统 Tomcat版本 能否启动 ...

死磕Tomcat系列(1)——整体架构

死磕Tomcat系列(1)——整体架构

死磕Tomcat系列(1)——整体架构 在许多的高端开发的岗位中都会或多或少有要求面试人员要研究过一些常用中间件源码。这是因为一切的秘密都是藏在源码中,阅读源码能够让我们对框架或者中间件的理解更加深刻,而我们也能够在源码的研究中获得其中一些优秀的设计方式。而我们的中间件和源码那么多,我们该从何入手呢?其实大部分的中间件或者框架都有一些共性的部分,例如网络编程、多线程、反射和类加载等技术。所...

NIO中和选择器Selector

NIO中和选择器Selector

NIO中选择器Selector 在上一篇的JAVA中NIO再深入我们学会了如何使用Buffer ,而在Java中IO和NIO中我们略微了解到Channel的概念,我们知道了Channel就像矿洞里的铁轨一样,Buffer就像铁轨上的矿车,对于数据真正的操作都是对于Buffer的操作。而在NIO中还有一个非常重要的概念就是Selector,它就像矿洞里的调度系统一样。 为什么要有Selec...

如何断点调试Tomcat源码

如何断点调试Tomcat源码

如何断点调试Tomcat源码 Tomcat作为一个老牌的一个Web容器框架,用途十分的广泛。无论是为了学习其框架的整体设计还是为了碰到问题更好的解决,作为程序员我们都应该对于Tomcat有一定的了解。而了解一个框架最好的办法就是看官方文档,但是有时候官方文档解答不了我们的问题,这时候就需要看源码了。 无论是使用编译器Idea还是Eclipse,或者是内嵌Tomcat的SpringBoot...

一次奇怪的StackOverflowError问题查找之旅

一次奇怪的StackOverflowError问题查找之旅

一次奇怪的StackOverflowError问题查找之旅 公司最近买了一套老代码,在测试环境部署的时候发生了nested exception is java.lang.StackOverflowError的异常,当时看到这个异常首先想到是栈内存溢出,网上给出的解决办法就是加栈内存大小就行。趁着这个机会也了解一下什么是Java虚拟机栈。 Java虚拟机栈 我们想要解决StackOver...

你不得不知道的数据库连接池的信息

你不得不知道的数据库连接池的信息

你不得不知道的数据库连接池的信息 数据库连接池是用来保持与数据库的连接,从而便于复用。 首先我们需要知道程序与数据库是一个非常耗费资源的事情,尤其是程序与数据库不在同一台机器上时,必须要开启网络的连接,以及双方的互相验证等等。如果没有连接池的话,那么每次查询都要进行连接、验证、关闭等操作,会非常的耗时耗力,连接池能够保持连接,从而避免了多次建立连接的损耗。 上图就是一个简单...