tomcat源码阅读(一) 入口
2015-11-10 18:17
656 查看
程序启动入口: org.apache.catalina.startup.Bootstrap的main方法,其最终会调用到org.apache.catalina.startup.Catalina的load()和start()方法。
Bootstrap中的关键代码:
一个是创建createStartDigester(),另外一个是对digester的解析。只要把这几个调用搞懂了,tomcat的结构基本上就出来了。
Bootstrap中的关键代码:
public static void main(String args[]) { if (daemon == null) { daemon = new Bootstrap(); try { daemon.init(); } catch (Throwable t) { t.printStackTrace(); return; } } try { String command = "start"; if (args.length > 0) { command = args[args.length - 1]; } if (command.equals("startd")) { args[args.length - 1] = "start"; daemon.load(args); daemon.start(); } else if (command.equals("stopd")) { args[args.length - 1] = "stop"; daemon.stop(); } else if (command.equals("start")) { daemon.setAwait(true); daemon.load(args); daemon.start(); } else if (command.equals("stop")) { daemon.stopServer(args); } else { log.warn("Bootstrap: command \"" + command + "\" does not exist."); } } catch (Throwable t) { t.printStackTrace(); } }Catalina中load()方法的关键代码:
// Create and execute our Digester Digester digester = createStartDigester(); try { inputSource.setByteStream(inputStream); digester.push(this); digester.parse(inputSource); inputStream.close(); } catch (Exception e) { log.warn("Catalina.start using " + getConfigFile() + ": " , e); return; }
一个是创建createStartDigester(),另外一个是对digester的解析。只要把这几个调用搞懂了,tomcat的结构基本上就出来了。
相关文章推荐
- eclipse+tomcat+jvm,刚刚参加工作的一些简单问题
- 利用awstats分析tomcat日志
- Tomcat 源码分析
- tomcat热部署
- SercureCRT部署项目到tomcat
- Windows下让Tomcat6定时重启服务的方法
- 网上商城项目实战之maven热部署
- 04(maven+SSH)网上商城项目实战之maven热部署
- ubuntu下idea maven项目与tomcat集成
- 启动tomcat报错:at org.apache.jsp.login_jsp._jspInit(login_jsp.java:27
- tomcat中 JVM 内存溢出及合理配置
- Tomcat优化详解
- Tomcat配置详解
- Flume 配置和读取tomcat文件到指定位置
- Tomcat
- tomcat以指定用户启动
- tomcat详解
- Confluence5.8.15 tomcat JVM堆内存设置
- 关于新建包目录以后,tomcat项目启动报错问题
- tomcat结合nginx使用小结