在瞭解完J2ee的相關周邊產品之後需要深入J2ee規範內部去了解一下到底這些規範
這裡介紹幾個最常用的規範
再繼續說下去之前有必要說幾個常識
Java的誕生
Java之父James Gosling早年從cmu畢業之後
從事了一段時間的開發工作,後來意外碰到一個專案
這個專案要求他用C++開發,但可愛的JG是天才,凡是天才在某方面特別突出的同時
必然有一些天生的缺陷,恩,或說共性,比如說懶,急躁和傲慢
JG既然是天才,那就必然具備這些共性,JG懶,以至於他學不好C++
不僅他學不好,當年開發出Java的那個團隊也都學不好C++
他們急噪,以至於他們中有人甚至威脅以辭職的方式離開這個需要使用CPP開發的專案
他們傲慢,所以他們決定開發出一種新的語言來取代那個該死的CPP
更可愛的是,他們一開始居然給這門語言起名C++++——//沒錯,我沒敲錯
叫什麼C加加 加加減減,意思是加上一些好東西,減去一些壞東西
天才的設定,有時候你會發現天才和傻瓜真的只有一線之隔
還好這個可愛的名字沒有被繼承下來,這些天才們給他們的產物起名叫Oak//橡樹
只是後來當他們去註冊這個名字的時候,發現這個名字已經被註冊了
於是在Sun公司的一個女職員//mm就是心細,這個說法也是我們公司mm告訴我的
的提議下,把這個可愛的語言起名為Java,就是他們當時喝的咖啡的名字
所以我們看到Java的標誌就是一杯冒著熱氣的咖啡
JavaBean 瞭解完Java之後,再來說說什麼是JavaBean//華為面試題
JavaBean是什麼? 咖啡豆
ja,更為科學點的解釋是
用java語言編寫的可重用的軟體元件//元件的定義前面說過了,不再重複
很形象不是麼? 將javabean放入杯子//容器,還記得容器的概念麼?web容器,ejb容器
就可以沖泡//編譯 成咖啡,供客人們品嚐//執行
完美的服務
下面進入正題 再談容器
前面介紹過容器,我覺得有必要再補充一點
容器從某種意義上說其實就是一個可執行的java寫的應用程式
猶如c++/c編譯後生成的。exe檔案
不同的是java編譯後的檔案需要用命令列或者指令碼啟動執行
由於容器是由java寫的,所以容器都能夠跨平臺
雖說如此,似乎大部分容器都針對不同的作業系統提供了不同的版本
但可以肯定的一點是,相同容器間的移植元件不需要重新編譯
Servlet web容器元件
Servlet確切地說,就是web容器執行的java元件
與普通javabean不同的是,Servlet定義了一系列方法//比如init()和destroy()
供容器呼叫,呼叫的主要目的是為了管理
當一個request請求被web容器截獲之後,容器分析該請求地址
然後透過一個配置檔案中的對映表//web。xml
呼叫相應的Servlet元件處理後將結果返還給客戶端
JSP//Java Server Page
web容器元件
Servlet出現了之後,人們發現幾乎沒有辦法用一個非常直觀的方式去編寫頁面
畢竟頁面是html語言編寫的
而讓我們用一種流程式的處理方式去逐行教計算機如何寫html程式碼太困難
在這種情況下JSP應運而生,JSP將java程式碼嵌入html程式碼內部
然後存成。jsp檔案,再由計算機編譯生成Servlet儲存起來//注意這個過程
所以JSP和Servlet對於web容器來說其實是一種東西,雖然它們編寫遵循的標準有所不同
極大地簡化了程式碼同時增加了程式碼的可讀性,生產維護成本下降
值得一提的是,在制定JSP規範的過程中,借鑑了ASP的很多規範
寫過ASP並熟悉Java語言的人應該能很快掌握JSP
EJB//Enterprise JavaBean
ejb容器元件
隨著時間的推移,人們發現普通的JavaBean似乎並不能滿足企業級應用的需要
最典型的就是虛擬機器提供的垃圾回收收集機制也就是GC不夠完善
可以最佳化的餘地極大,在這種情況下,EJB應運而生
EJB和其它元件一樣,不過遵循了某些規範而已
但是這些規範更多的是為充分利用機器並提高效能為主要目的的
舉個簡單例子
比如某個web伺服器有100個使用者同時連線上
由於網路連線是瞬時連線,所以很多時候併發數並沒有100那麼大
前一秒有可能有30個請求被髮送過來並被處理
後一秒可以只有10個請求被髮送過來並被處理
只有在非常非常極端的情況下才有可能發生100個請求同時被髮送過來並被處理的情況
那麼我們是否需要保留100個那麼多個物件在伺服器的記憶體裡面去處理這些請求呢?
很顯然,不需要,大多數時候//甚至可以說是所有時候,我不相信有那麼極端的情況
我們只需要儲存其中的10-30%就夠了,那麼什麼時候需要20%,什麼時候需要50%
甚至100%,這個過程就交給容器去管理,這就是ejb容器每天在乾的事
管理記憶體中活躍的物件
恩,必須強調的一點是,由於使用的不成熟
我們經常把規範以及具體的應用兩個名詞混用
舉個簡單例子,我們說Servlet,極有可能說的是Servlet規範
也有可能說的是一個具體的Servlet,這個就要看情況而定了
EJB,JSP也是如此
JDBC
和資料庫的連線
這個嚴格說來是資料庫產商需要關心的事
關於AppServer如何與資料庫的連線
但是也需要開發人員做一點事,因為AppServer不知道什麼時候元件需要用到資料庫
同時也需要開發人員告訴AppServer他們使用的是什麼資料庫,ip地址等等
JDBC就是關於這一套東東的規範
包括資料庫的產商應提供什麼樣的介面
AppServer應用伺服器應該如何去連線
開發人員應該如何去配置這些連線等等
還有一些資料來源,連線池等概念參考相關資料在此就不再贅述
其它的規範比如JMX等確切地說與開發人員關聯並不大了
這類高階應用只對AppServer應用伺服器產商重要
也不再羅嗦了
————-
記得聽說過這樣一種說法
大一時候不知道自己不知道 大二時候知道自己不知道 大三時候不知道自己知道 大四時候知道自己知道 為什麼呢,因為大一時候剛進大學,什麼都不懂,很正常,大家都一樣
大二或者大三時候開始接觸知識,雖然還是不懂,但慢慢地開始學習,開始積累
過了一段時間,知道自己知道了//也就是前一種說法的大四,後一種說法的大三
開始屁癲,開始拽得不得了,覺得自己懷才不遇,千里馬難尋伯樂的那種感覺
有些人是大四畢業了以後開始拽,悟性高一點的,大三就開始拽,因人而異
這幾乎是每一個初學者經過一段時間學習後的必然階段
不管如何,總之開始入門了,這也不是壞事
但最後每個人都會知道自己不知道的,也就是後一種說法的大四階段
//前一種說法裡面的那些傢伙估計要到工作以後才能明白
因為任何一門學科都博大精深,要是能在兩三年之內就統統搞懂
那不是在吹牛就是坐井觀天,java如此,c如此,c++也是如此
那麼到了本系列的第七集,可愛的讀者應該處在什麼階段呢?
恭喜,在看完這篇文章之後,你就基本處於知道自己不知道的那種階段
離拽起來還有那麼一段距離,因為你們畢竟還沒有學習和積累一定的基礎知識
但是騙騙外行,濛濛國企那些吃閒飯的管理人員問題不大