diyTomcat-功能模块
2022-05-06 10:48:43 0 举报
how2j-diyTomcat-功能模块,自己实现tomcat功能架构图,包括了如何使用类加载器
作者其他创作
大纲/内容
Engine
Bootstrap
Service
Connector implements Runnable
Server
启动多个线程准备接收请求
一个HOST里有多个Context
ContextXMLUtil解析 context.xml
DefaultServlet extends HttpServlet 单例
创建 Context
getWatchedResource
private String name; private Engine engine; private Server server; private List<Connector> connectors;init()
Context
getEngineDefaultHost()getHosts
创建监听器
private Service service;service.start()
server.start()设置这个线程的类加载器为CommonClassLoader
HttpProcessor
提供Engine
JspServlet extends HttpServlet 单例
提供Service
private String defaultHost; private List<Host> hosts; private Service service;
ServerXMLUtil解析 server.xml
InvokerServlet extends HttpServlet 单例
int port; private Service service;run()
否
提供数据
提供host
server.start()
关闭监听重载Context刷新Host
ContextFileChangeWatcher 文件监听器就是在监听 javaweb对应目录下的文件变化
监听当前文件的变化是否是 class xml jar
通过反射、invoke start()
getContexts()获得context添加到contextMap
servlet
请求处理
持续进行监听
Host
getServiceNamegetConnectors
服务器启动 加载器 bat运行 非热加载
是
WebappClassLoader extends URLClassLoader 子加载器--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\a--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/a/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\b--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/b/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\j2ee--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/j2ee/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\ROOT--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/ROOT/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\b--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/b/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\diytomcat\\webapps\\c--WebappClassLoader--url:--file:E:/javaproject/diytomcat/webapps/c/WEB-INF/classes/--WebappClassLoader--docBase:--E:\\javaproject\\javaweb\\web //加载外部web项目的--WebappClassLoader--url:--file:E:/javaproject/javaweb/web/WEB-INF/classes/
没有extends HttpServletservice() Class servletClass = context.getWebappClassLoader().loadClass(servletClassName); 从 加载器 中获取servlet,并用反射invoke其service方法
服务器启动 非加载器
服务器启动 加载器 bat运行 热加载
提供conectors
Request
CommonClassLoade extends URLClassLoader 父加载器URL[]:存储class、jar的路径包含:扫描lib下的包加入file:E:/javaproject/diytomcat/lib/diytomcat.jarfile:E:/javaproject/diytomcat/lib/hutool-all-4.3.1.jarfile:E:/javaproject/diytomcat/lib/jsoup-1.12.1.jarfile:E:/javaproject/diytomcat/lib/jspc_all.jarfile:E:/javaproject/diytomcat/lib/junit-4.9.jarfile:E:/javaproject/diytomcat/lib/log4j-1.2.17.jarfile:E:/javaproject/diytomcat/lib/servlet-api.jar
静态资源 orjsp
收藏
收藏
0 条评论
下一页