在了解完J2ee的相關(guān)周邊產(chǎn)品之后需要深入J2ee規(guī)范內(nèi)部去了解一下到底這些規(guī)范
這里介紹幾個(gè)最常用的規(guī)范
再繼續(xù)說(shuō)下去之前有必要說(shuō)幾個(gè)常識(shí)
Java的誕生
Java之父James Gosling早年從cmu畢業(yè)之后
從事了一段時(shí)間的開發(fā)工作,后來(lái)意外碰到一個(gè)項(xiàng)目
這個(gè)項(xiàng)目要求他用C++開發(fā),但可愛(ài)的JG是天才,凡是天才在某方面特別突出的同時(shí)
必然有一些天生的缺陷,恩,或說(shuō)共性,比如說(shuō)懶,急躁和傲慢
JG既然是天才,那就必然具備這些共性,JG懶,以至于他學(xué)不好C++
不僅他學(xué)不好,當(dāng)年開發(fā)出Java的那個(gè)團(tuán)隊(duì)也都學(xué)不好C++
他們急噪,以至于他們中有人甚至威脅以辭職的方式離開這個(gè)需要使用CPP開發(fā)的項(xiàng)目
他們傲慢,所以他們決定開發(fā)出一種新的語(yǔ)言來(lái)取代那個(gè)該死的CPP
更可愛(ài)的是,他們一開始居然給這門語(yǔ)言起名C++++--//沒(méi)錯(cuò),我沒(méi)敲錯(cuò)
叫什么C加加 加加減減,意思是加上一些好東西,減去一些壞東西
天才的設(shè)定,有時(shí)候你會(huì)發(fā)現(xiàn)天才和傻瓜真的只有一線之隔
還好這個(gè)可愛(ài)的名字沒(méi)有被繼承下來(lái),這些天才們給他們的產(chǎn)物起名叫Oak//橡樹
只是后來(lái)當(dāng)他們?nèi)プ?cè)這個(gè)名字的時(shí)候,發(fā)現(xiàn)這個(gè)名字已經(jīng)被注冊(cè)了
于是在Sun公司的一個(gè)女職員//mm就是心細(xì),這個(gè)說(shuō)法也是我們公司mm告訴我的
的提議下,把這個(gè)可愛(ài)的語(yǔ)言起名為Java,就是他們當(dāng)時(shí)喝的咖啡的名字
所以我們看到Java的標(biāo)志就是一杯冒著熱氣的咖啡
JavaBean 了解完Java之后,再來(lái)說(shuō)說(shuō)什么是JavaBean//華為面試題
JavaBean是什么? 咖啡豆
ja,更為科學(xué)點(diǎn)的解釋是
用java語(yǔ)言編寫的可重用的軟件組件//組件的定義前面說(shuō)過(guò)了,不再重復(fù)
很形象不是么? 將javabean放入杯子//容器,還記得容器的概念么?web容器,ejb容器
就可以沖泡//編譯 成咖啡,供客人們品嘗//運(yùn)行
完美的服務(wù)
下面進(jìn)入正題 再談容器
前面介紹過(guò)容器,我覺(jué)得有必要再補(bǔ)充一點(diǎn)
容器從某種意義上說(shuō)其實(shí)就是一個(gè)可運(yùn)行的java寫的應(yīng)用程序
猶如c++/c編譯后生成的.exe文件
不同的是java編譯后的文件需要用命令行或者腳本啟動(dòng)執(zhí)行
由于容器是由java寫的,所以容器都能夠跨平臺(tái)
雖說(shuō)如此,似乎大部分容器都針對(duì)不同的操作系統(tǒng)提供了不同的版本
但可以肯定的一點(diǎn)是,相同容器間的移植組件不需要重新編譯
Servlet web容器組件
Servlet確切地說(shuō),就是web容器運(yùn)行的java組件
與普通javabean不同的是,Servlet定義了一系列方法//比如init()和destroy()
供容器調(diào)用,調(diào)用的主要目的是為了管理
當(dāng)一個(gè)request請(qǐng)求被web容器截獲之后,容器分析該請(qǐng)求地址
然后通過(guò)一個(gè)配置文件中的映射表//web.xml
調(diào)用相應(yīng)的Servlet組件處理后將結(jié)果返還給客戶端
JSP//Java Server Page
web容器組件
Servlet出現(xiàn)了之后,人們發(fā)現(xiàn)幾乎沒(méi)有辦法用一個(gè)非常直觀的方式去編寫頁(yè)面
畢竟頁(yè)面是html語(yǔ)言編寫的
而讓我們用一種流程式的處理方式去逐行教計(jì)算機(jī)如何寫html代碼太困難
在這種情況下JSP應(yīng)運(yùn)而生,JSP將java代碼嵌入html代碼內(nèi)部
然后存成.jsp文件,再由計(jì)算機(jī)編譯生成Servlet儲(chǔ)存起來(lái)//注意這個(gè)過(guò)程
所以JSP和Servlet對(duì)于web容器來(lái)說(shuō)其實(shí)是一種東西,雖然它們編寫遵循的標(biāo)準(zhǔn)有所不同
極大地簡(jiǎn)化了代碼同時(shí)增加了代碼的可讀性,生產(chǎn)維護(hù)成本下降
值得一提的是,在制定JSP規(guī)范的過(guò)程中,借鑒了ASP的很多規(guī)范
寫過(guò)ASP并熟悉Java語(yǔ)言的人應(yīng)該能很快掌握J(rèn)SP
EJB//Enterprise JavaBean
ejb容器組件
隨著時(shí)間的推移,人們發(fā)現(xiàn)普通的JavaBean似乎并不能滿足企業(yè)級(jí)應(yīng)用的需要
最典型的就是虛擬機(jī)提供的垃圾回收收集機(jī)制也就是GC不夠完善
可以優(yōu)化的余地極大,在這種情況下,EJB應(yīng)運(yùn)而生
EJB和其它組件一樣,不過(guò)遵循了某些規(guī)范而已
但是這些規(guī)范更多的是為充分利用機(jī)器并提高性能為主要目的的
舉個(gè)簡(jiǎn)單例子
比如某個(gè)web服務(wù)器有100個(gè)用戶同時(shí)連接上
由于網(wǎng)絡(luò)連接是瞬時(shí)連接,所以很多時(shí)候并發(fā)數(shù)并沒(méi)有100那么大
前一秒有可能有30個(gè)請(qǐng)求被發(fā)送過(guò)來(lái)并被處理
后一秒可以只有10個(gè)請(qǐng)求被發(fā)送過(guò)來(lái)并被處理
只有在非常非常極端的情況下才有可能發(fā)生100個(gè)請(qǐng)求同時(shí)被發(fā)送過(guò)來(lái)并被處理的情況
那么我們是否需要保留100個(gè)那么多個(gè)對(duì)象在服務(wù)器的內(nèi)存里面去處理這些請(qǐng)求呢?
很顯然,不需要,大多數(shù)時(shí)候//甚至可以說(shuō)是所有時(shí)候,我不相信有那么極端的情況
我們只需要保存其中的10-30%就夠了,那么什么時(shí)候需要20%,什么時(shí)候需要50%
甚至100%,這個(gè)過(guò)程就交給容器去管理,這就是ejb容器每天在干的事
管理內(nèi)存中活躍的對(duì)象
恩,必須強(qiáng)調(diào)的一點(diǎn)是,由于使用的不成熟
我們經(jīng)常把規(guī)范以及具體的應(yīng)用兩個(gè)名詞混用
舉個(gè)簡(jiǎn)單例子,我們說(shuō)Servlet,極有可能說(shuō)的是Servlet規(guī)范
也有可能說(shuō)的是一個(gè)具體的Servlet,這個(gè)就要看情況而定了
EJB,JSP也是如此
JDBC
和數(shù)據(jù)庫(kù)的連接
這個(gè)嚴(yán)格說(shuō)來(lái)是數(shù)據(jù)庫(kù)產(chǎn)商需要關(guān)心的事
關(guān)于AppServer如何與數(shù)據(jù)庫(kù)的連接
但是也需要開發(fā)人員做一點(diǎn)事,因?yàn)锳ppServer不知道什么時(shí)候組件需要用到數(shù)據(jù)庫(kù)
同時(shí)也需要開發(fā)人員告訴AppServer他們使用的是什么數(shù)據(jù)庫(kù),ip地址等等
JDBC就是關(guān)于這一套東東的規(guī)范
包括數(shù)據(jù)庫(kù)的產(chǎn)商應(yīng)提供什么樣的接口
AppServer應(yīng)用服務(wù)器應(yīng)該如何去連接
開發(fā)人員應(yīng)該如何去配置這些連接等等
還有一些數(shù)據(jù)源,連接池等概念參考相關(guān)數(shù)據(jù)在此就不再贅述
其它的規(guī)范比如JMX等確切地說(shuō)與開發(fā)人員關(guān)聯(lián)并不大了
這類高級(jí)應(yīng)用只對(duì)AppServer應(yīng)用服務(wù)器產(chǎn)商重要
也不再羅嗦了
---------
記得聽說(shuō)過(guò)這樣一種說(shuō)法
大一時(shí)候不知道自己不知道 大二時(shí)候知道自己不知道 大三時(shí)候不知道自己知道 大四時(shí)候知道自己知道 為什么呢,因?yàn)榇笠粫r(shí)候剛進(jìn)大學(xué),什么都不懂,很正常,大家都一樣
大二或者大三時(shí)候開始接觸知識(shí),雖然還是不懂,但慢慢地開始學(xué)習(xí),開始積累
過(guò)了一段時(shí)間,知道自己知道了//也就是前一種說(shuō)法的大四,后一種說(shuō)法的大三
開始屁癲,開始拽得不得了,覺(jué)得自己懷才不遇,千里馬難尋伯樂(lè)的那種感覺(jué)
有些人是大四畢業(yè)了以后開始拽,悟性高一點(diǎn)的,大三就開始拽,因人而異
這幾乎是每一個(gè)初學(xué)者經(jīng)過(guò)一段時(shí)間學(xué)習(xí)后的必然階段
不管如何,總之開始入門了,這也不是壞事
但最后每個(gè)人都會(huì)知道自己不知道的,也就是后一種說(shuō)法的大四階段
//前一種說(shuō)法里面的那些家伙估計(jì)要到工作以后才能明白
因?yàn)槿魏我婚T學(xué)科都博大精深,要是能在兩三年之內(nèi)就統(tǒng)統(tǒng)搞懂
那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此
那么到了本系列的第七集,可愛(ài)的讀者應(yīng)該處在什么階段呢?
恭喜,在看完這篇文章之后,你就基本處于知道自己不知道的那種階段
離拽起來(lái)還有那么一段距離,因?yàn)槟銈儺吘惯€沒(méi)有學(xué)習(xí)和積累一定的基礎(chǔ)知識(shí)
但是騙騙外行,蒙蒙國(guó)企那些吃閑飯的管理人員問(wèn)題不大
聯(lián)系客服