Tomcat
2024-07-20 18:20:37 2 举报
AI智能生成
登录查看完整内容
源码
作者其他创作
大纲/内容
子主题
整体架构图
以面向对象的思想,对web服务器的组件体系设计,非常的优秀,抽象的非常好
网络IO和多线程并发的模型,设计的成熟和稳定
web服务器的技术上的机制,设计的非常成熟和完善,包括但是不限于web容器的规范、servlet规范的支持、web应用的部署和加载、JSP模板解析引擎、安全机制、共享会话机制、集群机制、JNDI
亮点
1 当你执行一个他的启动脚本,startup.sh【本质启动jvm】
2 jvm进程启动,加载你指定的main类【对于tomcat而言,他的启动类就是 Bootstrap】
3 bootstrap会去构建一个catalina对象【catalina就代表了一个完整的tomcat吧】
4 Catalina会去解析配置文件,server.xml,然后根据配置,去动态的构建出来整个tomcat,包括server在内的各种组件,比如构建server,server内部会去构建和启动connector、engine一类的组件,mapper,executor这些东西
Bootstrap和catalina
外置tomcat(通过脚本启动的方式)通过解析web.xml启动spring容器【配置监听器】
外置tomcat通过零xml方式启动spring容器,(就是通过tomcat SPI机制进行启动)
springboot用到的容器是AnnotationConfigServletWebServerApplicationContext,他是可以解析注解的并且对他的refresh()里的onrefresh()进行了重写,进行创建tomcat实例,启动tomcat。
启动方式
外观模式
观察者模式
责任链模式
模板方法模式
命令模式
设计模式
破坏双亲委托机制【支持部署多应用】
tomcat的类加载机制
启动类加载器【%JAVA_HOME%/jre/lib】
扩展类加载器【%JAVA_HOME%加e/lib/ext】
应用程序类加载器【指定目录下的或者-classpath运行 参数指定的Jar包】
jvm的类加载机制
双亲委托机制是为了保证一个 Java 类在 JVM 中是唯一的
1 AppClassLoader 继承了 ClassLoader
2 ExtClassLoader 继承 ClassLoader
3 AppClassLoader 的 parent 成员变量指向 ExtClassLoader 对象
4 AppClassLoader ExtClassLoader 重写了 loadClass和findClass 方法,类没加载到的时候则调用 父类的类加载
代码实现的逻辑
1 自定义类加载器,继承 ClassLoader 抽象类
2 重写 findClass 和 loadClass 方法
破坏双亲委托机制
双亲委托机制
类加载机制
HttpServletService → 判断请求 如果Get请求 → FrameworkServleDoGet_方法 → DispatcherServletdoService方法→ doDispatch ();
SpringMVC和Tomcat关系
旧时代的web时代
serlvet
Tomcat 源码分析
0 条评论
回复 删除
下一页