這段時(shí)間工作不太忙,所以抽時(shí)間學(xué)習(xí)了TOMCAT,
TOMCAT實(shí)際就是負(fù)責(zé)保持TCP連接傳遞到部署的項(xiàng)目中。瀏覽器實(shí)質(zhì)就是TCP發(fā)送器。將用戶的請(qǐng)求封裝成TCP發(fā)送請(qǐng)求。當(dāng)然格式是雙方協(xié)定的。使用的socket連接。請(qǐng)求內(nèi)容為空格和換行符分割。看了下源碼解析請(qǐng)求頭,覺得寫得好精致啊。講請(qǐng)求轉(zhuǎn)換為byte數(shù)組。然后轉(zhuǎn)化為char值直接比較他們的值大小。如果和換行符或者空格char相同則提出。
int ix = 0 ; int ox = 0 ; String key = null ; String value = null ; while (ix < data.length) { byte c = data[ix++ ]; switch (( char ) c) { case '&' : value = new String(data, 0 , ox, encoding); if (key != null ) { key = null ; } ox = 0 ; break ; case '=' : key = new String(data, 0 , ox, encoding); ox = 0 ; break ; case '+' : data[ox ++] = ( byte )' ' ; break ; case '%' : data[ox ++] = ( byte )((convertHexDigit(data[ix++]) << 4 ) + convertHexDigit(data[ix++ ])); break ; default : data[ox ++] = c; } } // The last value does not end in '&'. So save it now. if (key != null ) { value = new String(data, 0, ox, encoding);
?
解析請(qǐng)求資源。根據(jù)資源名獲取類名。然后導(dǎo)入class文件URLLoader。然后執(zhí)行方法。提起要繼承HttpServlet 執(zhí)行service()方法。
還有一個(gè)好東西就是它的一場(chǎng)信息管理ResourceBundle讀取一場(chǎng)信息配置文件根據(jù)每個(gè)包構(gòu)成一個(gè)單例 放入一個(gè)靜態(tài)HashMap中使用的使用通過包名獲取。非常靈活。而ResourceBundle可以自動(dòng)的獲取服務(wù)器運(yùn)行環(huán)境獲取相應(yīng)的配置文件。比如獲取LocalStrings文件,如果在中國地區(qū),包下面還有一個(gè)LocalStrings_zh_CN的配置文件,將會(huì)優(yōu)先讀取。
/** 異常信息如何使用 * The string manager for this package. */ private StringManager sm = StringManager.getManager(Constants.Package); /** * 用于加載 properties 文件 國際化文件 * 當(dāng)在中文操作系統(tǒng)下,如果myres_zh_CN.properties、myres.properties兩個(gè)文件都存在 * ,則優(yōu)先會(huì)使用myres_zh_CN * .properties,當(dāng)myres_zh_CN.properties不存在時(shí)候,會(huì)使用默認(rèn)的myres.properties。 * * 沒有提供語言和地區(qū)的資源文件是系統(tǒng)默認(rèn)的資源文件。 * 資源文件都必須是ISO-8859-1編碼,因此,對(duì)于所有非西方語系的處理,都必須先將之轉(zhuǎn)換為Java Unicode * Escape格式。轉(zhuǎn)換方法是通過JDK自帶的工具native2ascii. */ private ResourceBundle bundle; private Demo1(String packageName) { String bundleName = packageName + ".LocalStrings" ; bundle = ResourceBundle.getBundle(bundleName); } public static void main(String[] args) { Demo1 c = new Demo1("com.util" ); System.out.println(c.bundle.getString( "Hello" )); }
看的比較馬虎。有新的在記錄吧。
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
