设为首页 收藏本站
查看: 892|回复: 0

[经验分享] tomcat源码分析 StandardContext startInternal 过程

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-11 13:20:02 | 显示全部楼层 |阅读模式
  1、Send j2ee.state.starting notification



if (this.getObjectName() != null) {
Notification notification = new Notification("j2ee.state.starting",
this.getObjectName(), sequenceNumber.getAndIncrement());
broadcaster.sendNotification(notification);
}
  
  2、实例化webappResources
  有两个实现类,new FileDirContext(), new WARDirContext()
  在我本机环境上是new FileDirContext()
  
  3、webappResources 属性做一些初始设置,并生成ProxyDirContext对象。
  在resourcesStart()方法中完成。
  4、WebappLoader实例化
  



if (getLoader() == null) {
WebappLoader webappLoader = new WebappLoader(getParentClassLoader());
webappLoader.setDelegate(getDelegate());
setLoader(webappLoader);
}
  5、CharsetMapper实例化
  



@Override
public CharsetMapper getCharsetMapper() {
// Create a mapper the first time it is requested
if (this.charsetMapper == null) {
try {
Class<?> clazz = Class.forName(charsetMapperClass);
this.charsetMapper = (CharsetMapper) clazz.newInstance();
} catch (Throwable t) {
ExceptionUtils.handleThrowable(t);
this.charsetMapper = new CharsetMapper();
}
}
return (this.charsetMapper);
}
  6、work directory 设置。
  在我本机环境上是:work\Catalina\localhost\_
  7、Validate required extensions



try {
dependencyCheck = ExtensionValidator.validateApplication
(getResources(), this);
} catch (IOException ioe) {
log.error("Error in dependencyCheck", ioe);
dependencyCheck = false;
}
  
  8、NamingContextListener注册
  9、之前的WebappLoad 启动。
  



if ((loader != null) && (loader instanceof Lifecycle))
((Lifecycle) loader).start();
  10、resources 启动。
  11、触发CONFIGURE_START_EVENT事件。
  



fireLifecycleEvent(Lifecycle.CONFIGURE_START_EVENT, null);
  将触发ContextConfig、TldConfig等重要监听器。
  12、StandardPipeline启动。



((Lifecycle) pipeline).start();
  13、session管理器实例化,如无特别设置,实现类应该是new StandardManager()
  14、InstanceManager实例化,并设置
  15、servletContext 上下文参数设置
  16、触发ServletContainerInitializer的onStartUp方法
  17、监听器启动



if (!listenerStart()) {
log.error( "Error listenerStart");
ok = false;
}
  
  18、session管理器启动。



if ((manager != null) && (manager instanceof Lifecycle)) {
((Lifecycle) getManager()).start();
}
  19、启动后台线程:ContainerBackgroundProcessor
  20、过滤器启动。
  



if (!filterStart()) {
log.error("Error filterStart");
ok = false;
}
  21、启动设置load on startup元素的servlet



loadOnStartup(findChildren());
  22、关闭打开的jar文件。



if (getLoader() instanceof WebappLoader) {
((WebappLoader) getLoader()).closeJARs(true);
}
  23、设置成功启动状态。
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-97469-1-1.html 上篇帖子: 把tomcat的8080改为80端口 下篇帖子: tomcat 配置SSL,keystoreType和truststoreType参数设置支持PKCS12和jks两种的格式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表