Tomcat原始碼 容器啟動六 3

2021-08-30 12:54:04 字數 2323 閱讀 8281

我們來了解一下部暑war檔案

// deploy wars, and loop if additional descriptors are found

* deploy war files.

*/if (files == null)

return;

for (int i = 0; i < files.length; i++)

}}

* @param contextpath

* @param war

* @param file

*/protected void deploywar(string contextpath, file war, string file)

ostream.write(buffer, 0, n);

}ostream.flush();

ostream.close();

ostream = null;

istream.close();

istream = null;

entry = null;

jar.close();

jar = null;

}} catch (exception e) catch (throwable t)

ostream = null;

}if (istream != null) catch (throwable t)

istream = null;

}} finally catch (throwable t)

jar = null;}}

}//這個是用來存放已經部暑好的檔案

if(log.isinfoenabled())

log.info(sm.getstring("hostconfig.deployjar", file));

try

} finally

}context.setconfigfile(xml.getabsolutepath());

(xml.getabsolutepath(), new long(xml.lastmodified()));

} else

// populate redeploy resources with the war file

(war.getabsolutepath(), new long(war.lastmodified()));

if (context instanceof lifecycle)

context.setpath(contextpath);

context.setdocbase(file);

//以下這一步跟進去,standardcontext的啟動

host.addchild(context);

// if we're unpacking wars, the docbase will be mutated after

// starting the context

if (unpackwars && (context.getdocbase() != null)) else else

}name = name.replace('/', '#');

file docbase = new file(name);

if (!docbase.isabsolute())

//將部暑完的工程存放進該map中

new long(docbase.lastmodified()));

} else

} catch (throwable t)

}

//以下這一步跟進去,standardcontext的啟動

host.addchild(context);
private void addchildinternal(container child)  catch (lifecycleexception e)  finally }}

firecontainerevent(add_child_event, child);

}}

standardcontext#start//由於裡面的方法過長,就對裡面的個別呼叫進行詳解

public synchronized void start() throws lifecycleexception  catch( exception ex ) 

}}

以上是對環境部暑啟動的簡單除錯過程,沒能全部理解清楚,,會根據後面的除錯補全

new long(docbase.lastmodified()));以備訪問呼叫 

Tomcat原始碼 初始化容器五

一,上面文章完成了對server.xml載入以及解析,現在主要做的是就是對裡面所定義的容器進行初始化工作.檢視org.apache.catalina.startup.catalina load standarserver開始進行例項化 server.initialize 預設情況下是org.apac...

六 Tomcat 原始碼系列之 請求處理

前面已經詳細介紹了 tomcat 的執行緒模型,那麼對於乙個請求,tomcat 到底是如何處理的呢 由 nioendpoint 的內部類 acceptor 監聽連線 acceptor 實現類 runable 介面,直接檢視 run 方法 int errordelay 0 一直迴圈,直到收到 shut...

tomcat原始碼學習2 啟動過程

這一次將會對tomcat的啟動過程進行乙個分析。tomcat的入口函式是 org.apache.catalina.startup.main 在這個函式中最關鍵的 段是 public static void main string args if command.equals startd else ...