TOMCAT原始碼學習所得(二)

2021-09-01 04:22:49 字數 2872 閱讀 4963

這裡主要學習工具類,digester和convertutils,stringtokenizer,file類的3個獲取路徑的方法

1.stringtokenizer

如果為字串的簡單分隔,那麼如果由split方法來分隔字串,效率必然低下(其引數被識別為正規表示式)

這時,我們可以使用stringtokenizer類,來進行字串的分隔,其效率略高

string str = "test1;test2;test3;test4;test5;";

stringtokenizer st = new stringtokenizer(str,";");

while(st.hasmoreelements())

2.file類的3個獲取路徑的方法

file.getpath()

file.getabsolutepath()

file.getcanonicalpath()

從3個例子中來學習

file file = new file("f:/export/./../00");

system.out.println(file.getpath());

system.out.println(file.getabsolutepath());

system.out.println(file.getcanonicalpath());

file file2 = new file("f:/export/as3corelib.swc");

system.out.println(file2.getpath());

system.out.println(file2.getabsolutepath());

system.out.println(file2.getcanonicalpath());

file file3 = new file("./..");

system.out.println(file3.getpath());

system.out.println(file3.getabsolutepath());

system.out.println(file3.getcanonicalpath());

3.digester

digester主要用於將xml檔案解析為物件,其好處在於,事前定義好規則,則在xml解析的過程中,物件也生成了,簡化了**的編寫,另乙個方面,digester採用的是sax的方法解析xml,對程式的記憶體影響很小,舉例如下

首先定義乙個物件student類如下:

public class student 

public void setname(string name)

public string getage()

public void setage(string age)

public string getdesc()

public void setdesc(string desc)

@override

public string tostring()

}

然後在src下面,放置乙個作為測試資料的xml檔案,students.xml

<?xml version="1.0" encoding="utf-8"?>		

然後是digester的測試類

public class digestertest 

private liststus = new arraylist();

public void addstu(student stu)

}

執行後,則可以看到,2個學生的資料,都被新增到了當前類的stus集合物件中

簡單解析,其中測試類的一些方法需要加以說明:

//放入當前物件,方便後面的方法呼叫

dig.push(dt); 

//指明student物件,對應著xml中的哪個節點

dig.addobjectcreate("students/student", student.class);

//指明student物件中,name屬性對應著xml中的哪個屬性,

//可以看到這個方法跟下面方法的比較,從xml的屬性和節點給物件新增資料,使用的方法是不同的

dig.addsetproperties("students/student", "namexml", "name");

//指明student物件中,name屬性對應著xml中的哪個節點,

dig.addbeanpropertysetter("students/student", "desc");

//當出現多個物件節點後,使用哪個方法進行新增,方法為之前push的那個物件中定義的方法

dig.addsetnext("students/student","addstu"); 

//開始解析,方法執行完,即解析完成

dig.parse(in);

4.convertutils

此類用於字串,轉化成其他型別的資料,此類內建支援的物件較少,貌似只有一些基本型別,不過可以通過converter介面進行擴充套件,以下為網上傳遍的dateconverter的乙個簡單實現,僅供參考

public class dateconverter implements converter  catch (parseexception e) 

return null;

}}

測試的類如下:

public class converttest 

}

另外需要說明的是,convertutils和digester需要引入apache commons的一些jar包,具體見附件吧

Tomcat原始碼分析

本文將會介紹tomcat的原始碼,並給出一些分析。org.apache.catalina.startup.bootstrap 該類是tomcat啟動的入口類,包含有main方法。它的主要工作包括 引數解析 環境變數讀取 設定 類載入器初始化 通過反射的方式來呼叫catalina。org.apache...

Tomcat 原始碼分析

tomcat 原始碼分析 bootstrap 引導過程 1 初始化自定義的類載入器 common shared catalina 2 建立並例項化第乙個元件類 catalina tomcat 元件體系 server service connector engine host context 實現li...

tomcat原始碼分析

1 執行環境 tomcat 版本 8.0.x 編譯工具 ant 執行ide idea13.1 2 tomcat架構組成 如下圖所示 server 其實就是background程式,在tomcat裡面的server的用處是啟動和監聽服務端事件 諸如重啟 關閉等命令。service 在tomcat裡面,...