一個牛人給JAVA初學者的建議(上篇)

      網友投稿 578 2025-04-04

      給初學者之一:淺談java及應用


      學java不知不覺也已經三年了,從不知java為何物到現在一個小小的j2ee項目經理。雖說不上此道高手,大概也算有點斤兩了吧,每次上網,泡bbs逛論壇,沒少去java相關的版面,總體感覺初學者多,高手少,精通的更少。由于我國高等教育制度教材陳舊,加上java自身發展不過十年左右的時間,還有一個很重要的原因就是java這門語言更適合商業應用,所以高校里大部分博士老師們對此語言的了解甚至不比本科生多。在這種環境下,很多人對java感到茫然,不知所措,不懂java能做什么,即便知道了java很有用,也不清楚該從哪里入手,所以就有了 java入門難這一說法。ok,那我們就從java到底能做什么聊起。

      先說什么是java,java是一種面向對象語言,真正的面向對象,任何函數和變量都以類(class)封裝起來。

      至于什么是對象什么是類,我就不廢話了。關于這兩個概念的解釋任何一本面向對象語言的教材里面都有。

      知道了什么是java,那自然就會對java能干什么感興趣。在說java能做什么之前,先說java作為一個真正面向對象語言的優點。首先第一個,既然是真正的面向對象,那就要做到徹底的封裝。這是java和c++最大的不同,java所有的源碼以及編譯后的文件都以類的形式存在。java沒有所謂的類外部定義,所有的函數(方法)以及變量(屬性)都必須在類內部定義。這樣就不會出現一個類被切割成這里一塊那里一塊的情況,c++就可以,不是么?這樣做使得整個程序的結構異常清晰,明了。其次第二個,最讓人歡呼雀躍的是完全屏蔽了指針,同時引入了垃圾回收機制(GC),任何一個寫過c/c++代碼的人,都會對內存管理深惡痛絕。因為這使得我們不能把主要精力放在我們關心的事情上,而需要考慮計算機內部的一些事情,作為一個軟件工程師,我想沒有一個人愿意把大量的時間花在內存管理上,畢竟我們不是電子工程師,此時java的優勢體現出來了,它完全屏蔽了內存管理。也就是說,如果你用java寫程序,寫出來的任何一個程序內存上的開銷,都不受你控制。乍一看,似乎你受到了束縛,但實際上不是這樣,因為雖然你的程序無法對內存進行管理,降低了一定的速度,但你的程序會非常非常的安全,因為你無法調用一個空指針

      而不像以前寫c的時候那樣,成天因為空指針而擔驚受怕。當然,如果你深入了解這一行,就會發現java其實也無法保證程序不去調用空的指針,但是它會在最大程度上避免空指針的調用。這已經很好了,安全,這是java的最突出的優點。第三個,虛擬機跨平臺,這是java最大的特點,跨平臺,可能所有人都知道windows,但是不是所有人都知道unix和java一樣,很多人都不知道unix這種操作系統干什么用,我不想多說unix的應用,這不是主要,但是我要說,大部分小型機,工作站,都跑在unix一族的操作系統上,比如linux/solaris,unix比起windows有一個最顯著的特點,穩定,這就好比思科和華為,思科的機器慢但穩定,華為的機器快但不穩定,作為服務器這一端來說,unix在服務器端還是非常有市場的,而且很重要的windows不安全,在ms的宣傳中我想所有人都很少看到安全二字,因為windows操作系統針對的是pc用戶,pc死機就死機咯,大不了重啟,瘟95最經常冒出來的就是藍屏,在服務器這一端上因為ms沒有自己的芯片,所以要做系統有些力不從心啊。扯遠了,那么java可以做到在windows上編譯

      然后在unix上運行,這是c/c++做不到的。那么說到這里,java能做什么逐漸清晰起來。剛才說到了,java程序有一個的特點是安全。這個安全是針對你的系統來說得,系統在跑了java程序之后會特別地穩定,而且還能跨平臺,那么很明顯,java主要應用于除了windows操作系統以外所有的平臺,比如手機,服務器。想想看,如果你寫的程序要跑在手機上,而手機有多少款用的是windows?就算有,那如果你用c/c++,是不是要針對每一款手機寫一套程序呢?累死,那跨平臺的java就不用,做到編譯一次,隨時運行。同樣,在服務器這一端,如果我想給一個網絡門戶站點,比如sina寫一個應用程序,pc的性能肯定無法滿足sina這樣大站點并發數量的要求,那么它就需要買服務器,那么服務器ms沒有市場,而且windows很不安全

      那么十之八九會買一個sun/ibm的機器,或者hp,但不管是誰的機器,它裝的操作系統也不會是windows,因為windows太不安全了,而且多核的支持太差了。這個有空再說,那么如果你要寫一個程序在這樣的機器上跑,難道我們就在這個機器上做開發么?當然不可能,一般程序員開發用的都是pc,windows那么該怎么辦?寫一個程序,然后再拿到服務器上去編譯,去調試?肯定不可能,所以我們就希望找到一個語言,編譯完生成程序之后,在pc上調試,然后直接移植到服務器上去,那么此時,我們就會毫不猶豫地選擇java,因為在跨平臺以及安全性來說,java永遠是第一選擇。ok,

      下面說java的缺點

      一慢,這其實是一種誤區,這就好比goto語句一樣,java也拋棄了指針,雖然看上去似乎變慢了,但是在這個兩三年硬件性能就能翻番的年代,速度已經不是我們關心的問題了,而且對于企業級的應用來說,沒有什么比安全穩定更重要的,換句話說,我們可以忍受慢,但是不能忍受死機和藍屏。而且越大型的應用,這種慢的劣勢體現得越模糊。因為當系統項目越做越大,任何一個環節做不好都可能影響全局的情況下,安全尤其重要,而且就像goto語句一樣。這種過分追求速度的主張會給系統開發和糾錯以及維護帶來無可挽回甚至不可避免的損失,把內存交給計算機去管理吧,這種代價值得。我們做的不是pc游戲,沒必要把內存的那一點點消耗當親爹。

      二難看,又是一個誤區,很多人甚至拿出java swing控件畫出的界面來說,呵呵,其實java不是不能畫得好看,IDEA就是java寫的IDE,挺漂亮的。但為什么難看呢,是因為swing控件它本身就是unix時代的產物,swing控件貼近unix界面,老外看unix界面其實挺順眼的,他們就是吃unix飯長大的,而unix又是吃百家飯的,不像ms那么唯利是圖,所以不怎么對中國人友好,加上我國又沒有公司在做操作系統,所以看上去是不怎么順眼,其實玩過unix的人都知道,unix對中文的支持一直不怎么好。

      給初學者之二:從JDK說起

      在知道了java有什么優點,能做什么之后,就該說一下java該如何去學了。在說java如何去學之前,有必要把java的幾個大方向做一個簡單說明,早在五年前,嗯,應該說是六年前,也就是99年的時候,sun公司做出了一個決定,將java應用平臺做一個劃分,畢竟在不同領域,語言應用特性是有區別的。針對不同領域內的應用,sun公司可以發布相關高端標準來統一規范代碼,這三大塊就是J2SE,J2EE以及J2M。這個舉措今天看來無疑是非常了不起的,正是由于這次革命性的發展,使java從一種小打小鬧游戲性的語言,發展成為今天企業級應用的基礎。這里要特別說明一下J2SE J2EE J2ME中2的意思,其實2就是英文單詞to的諧音,就是to的意思,而不是second edition,當然java 2本身版本號就是1.2,也有點2nd edition的味道。說點題外的,sun公司發布的java版本很有意思,雖然總是寫是1.X但其實外界對這種版的說法也就是X.0,比如java 2,其實就是java 1.2,1.3其實就是3.0,1.4就是4.0,現在所說的5.0其實就是1.5,只是以前我們更習慣叫1.X而已。可能到了5.0以后,就全改叫X.0而不是1.X了,所以以后聽到別人說java 5.0,千萬別驚訝,其實就是1.5。在這三個J2*E中J2SE是基礎,就是java 2的標準版(java 2 standard edition),也就是最基礎的java語言部分,無論學什么java技術,J2SE都是必須掌握的,要使用J2SE就必須安裝JDK(java development kit)。JDK在sun公司的主頁上可以免費下載,下載后需要安裝,具體安裝流程看教材。JDK包含有五個部分:核心API,集成API,用戶界面API,發布技術還有java虛擬機(JVM)。先說運行環境,運行環境最主要要說的就是java虛擬機(JVM)

      前面我們說過java是跨平臺的語言,那么如何做到跨平臺呢?畢竟每種操作系統都是不同的,java的設計者們提出了一個虛擬機的概念,在操作系統之上建立一個統一的平臺,這個平臺必須實現某些功能以支持程序的運行。如下圖:

      ----------------------------------------------------------------------------------------------------------

      |???????????? program?????????????? |

      ---------------------------------------------------------------------------------------------------------

      |??????????????? JVM??????????????? |

      ---------------------------------------------------------------------------------------------------------

      | UNIX | Windows | Linux | Solaris |..

      ----------------------------------------------------------------------------------------------------------

      程序員所寫的每一個程序都先運行在虛擬機上,所有操作都必須經過虛擬機才能和操作系統交互,這樣做不僅統一了所有操作系統,同時也保證了操作系統的安全。要死機的話,死的是虛擬機(JVM)而操作系統并不會受此影響,而我們所說的java運行環境指的主要是JVM,其他的不說了,省略。下面說說JDK(java development kit)的API,其實用JDK來包括運行環境以及開發工具,個人感覺是不恰當的,因為這三個單詞僅能說明開發工具,也就是幾個標準的API,而沒有讓人感覺到有運行環境的意思在里面,這是題外。那么什么是API?簡單地說就是Application Programming Interface,應用程序編程接口。在java里面,就是一些已經寫好了的類打成的包,這又要解釋什么是類什么是包了,簡單說一下,包就是類的集合,一個包包含零個或多個類,嗯,具體的可以去看書,這些類是java的基礎類,常用的類,可以簡單理解成java的工具集。最后說一下JDK的發布技術,其實按我的理解,講白了就是編譯器,將.java文件轉換成.class文件的一種技術。這三部分組成了JDK,有了JDK,就可以開發出J2SE應用軟件了,最原始的只要用一個記事本寫幾行代碼就可以了,但一般來說我們會使用效果比較好的開發工具,也就是IDE。在J2SE這一塊,特別推薦JCreator這款IDE?sun公司的產品,與JDK結合得幾乎是天衣無縫,非常適合初學者使用。

      教材方面中文的推薦電子工業出版社出版的《java教程》初級與高級篇各一本;還有就是《21天學通java》雖然有人說21天系列是爛書,但個人感覺對于j2se,這本書翻譯得已經很不錯了,基本沒有什么語法錯誤,語句也很通順;最后要說的就是《thinking in java》,這本書自然很經典,說得比較細,只是我覺得不太適合初學者,其實也不難,初學者直接看也不成問題,但個人感覺還是找本教材也就是前面推薦的兩款來看比較好?;靖拍畹睦斫膺€是用教材的,畢竟thinking in java有的版本翻譯得很爛,而且個人建議還是看原版比較好。當然這幾本都看最好了,但如果沒時間,至少精讀其中一本,然后再看其他兩本就可以,其實三本書內容也差不多,但看問題的角度方式以及面向的讀者也都不同,嗯,怎么說呢,找適合自己的吧。最后要說的是,由于虛擬機的存在,J2SE的大多數軟件的使用會比一般桌面軟件慢一些,效果不盡如人意,現在大概只有swing控件還在使用吧,其它沒怎么聽說。J2EE&J2ME,這是java應用的重中之重,如果想拿高薪,最好把J2EE學好,記得以前在csdn上看過一個調查,月薪上萬的程序員主要從事哪方面的工作,十個中有八個是做J2EE的,其他兩個一個做J2ME,還有一個做嵌入式,也許有些夸張,但也從某一方面說明J2EE人才的稀缺以及應用的廣泛。所以如果想學java,只精通j2se是永遠不夠的,至少還需要時間去了解其它兩個J2*E。

      給初學者之三:java企業級應用之硬件篇

      總算講到企業級應用了,內容開始逐漸有趣起來。java企業級應用分為硬件篇和軟件篇,重點在軟件,硬件是外延,嚴格地說與java沒有必然聯系。但是,由于java是網絡語言,不了解硬件的一些基礎知識,軟件知道再多也沒什么用,不要上了戰場還不知道為什么而打仗。硬件是軟件的基礎,在這個前提下,有必要專門花一點點篇幅來聊一下硬件。硬件,簡單地說就是我們實際生活中看得見摸得著的東西,也就是那些冰冷的機器,比如服務器,個人電腦還有網絡交換機,路由器等等。那么先拋開網絡設備不談,先來說說計算機電腦的歷史。在很早很早以前,人類創造了第一臺電腦,那時候的電腦只是一臺用來計算的機器,無比大,無比重,無比傻,除了算其它屁事不會做,沒有所謂的人工智能與計算機網絡。但是總算是誕生了,雖然以今天的眼光去看那時候的機器巨傻無比,只配叫做計算器而不是電腦,沒有邏輯思維能力,只會死算,但千里之行,始于足下,反正是造出來了?。然后隨著時間的推移,制造業發展發展發展,電腦性能逐漸得到提升,速度快了起來,成本也逐漸低了下來。于是人們造出了第二臺,第三臺,第四臺,第五臺……第n臺計算機,人們就造出了無數臺計算機并使其成為一種產品,逐漸應用于許多復雜計算領域,不僅僅是科研,許多生產領域也開始出現計算機的影子。然后又隨著時間的推移,人們發現不可能把所有的計算機都做成一個樣子,因為各行各業對計算機性能的要求各不相同,于是開始把計算機劃分檔次,最簡單地是按照計算機的大小劃分就是教科書上寫的大型機,中型機,小型機//個人感覺這樣分純粹扯淡,還以為是小孩子玩球,分為大球,中球和小球。但是不管怎樣,計算機不再是千篇一律一個樣子了。按照性能的不同,在不同領域,出現了滿足符合不同要求的計算機。幾乎在同時,人們也開始考慮計算機之間通訊問題。人們開始考慮將不同的計算機連接起來,于是網線出現了,網絡出現了。又隨著網絡的發展,出現了一下專門為了尋址而存在的機器,這就是路由器和交換機。然后又出現了一些公益性的組織或團體

      他們制定了一系列的標準來規范以及管理我們的網絡于是3w出現了,計算機的網絡時代來臨了。嗯,說到這里,計算機發展到今天的歷史大概說完了。我們來詳細說說網絡時代的計算機以及各個硬件供應商之間的關系。前面說到了,計算機分為大型機,中型機和小型機……但是現在市場上沒有人這樣分,要是出去買機器,對硬件供應商說,我要買一款中型機,或者說,我要買一款小型機,硬件供應商肯定會問問題

      他們會問你買機器干什么用的?科學計算啊還是居家用,是作服務器啊還是圖形設計,但不管怎樣,簡單地說大中小型機已經沒有什么意義了,我們按照使用范疇來劃分。簡單劃分為服務器,工作站還有微機,服務器(server)。服務器涵蓋了幾乎所有的大型機以及大部分中型機甚至一些小型機,用通俗點話說24小時不間斷運行提供服務的機器。比如賣飛機票(中航信),比如酒店預定(攜程),比如提供門戶站點相關服務(sina),比如電子商務(ebay,amazon,阿里巴巴),這些服務對機器都有一些特定的要求,尤其強調安全和穩定。工作站(workstation),工作站其實是圖形工作站的簡稱,說白了,就是某種功能極其強大的計算機,用于特定領域,比如工程設計,動畫制作,科學研究等。個人電腦/微機(pc)

      計算機網絡的最末端,這個應該不用我說太多了,網絡時代的pc已經普及到千家萬戶。說完了分類,我們就來說說各個硬件供應商,首先是服務器還有工作站,這兩類硬件供應商主要是以下三家Sun,IBM還有HP(惠普)。然后是PC,以前IBM還有PC事業部,現在被聯想吞并了(蛇吞象),現在國際市場上有聯想和DELL(戴爾),目前戴爾還是國際老大,還有HP康柏。然后是網絡,也就是路由器和交換機,這塊市場嘛,Cisco(思科)Brocade(博科)還有McDATA三足鼎立。內核(CPU),PC內核主要是AMD和Intel,前者最近與Sun公司合作,Sun也有一部分單雙核服務器用的是AMD的。服務器與工作站內核,這一塊與硬件廠商綁定,還是Sun,IBM,HP三家自己生產。題外,在一些大型主機應用市場,比如賣飛機票,德國的漢莎,中國的中航信,香港的國泰用的都是尤利(美國的公司,英文名我忘了),其它用的是IBM的機器,現在能做大型機的感覺似乎只有IBM可以,尤利已經快倒了,技術太落后了,現在他們的系統還是fortran寫的,連c都不支持。要特別說明的是,一個超大型主機然后多個小終端/pc的結構現在越來越沒市場了。將來的趨勢是用一整個包含多個服務器的分布式操作系統來取代這些大型主機。因為大型主機更新換代極其困難,一旦數據量超過了主機的處理能力,那么就要換主機,這個成本是極大的,但是如果用分布式操作系統,那就只需要增加小服務器就行了。硬件就大概說到這里,與大多數人沒什么關系,因為大多數人壓根不可能進入這些硬件領域,除非做銷售。說了這么多,只是為了給軟件部分打基礎而已。//做嵌入式的除外。

      給初學者之四:java企業級應用之軟件篇

      嗯,說過了硬件就該是軟件了,這篇是這個系列的重中之重。首先我們來說說什么是軟件,統一一下概念。

      所謂軟件通俗地說就是一套計算機程序,實現了某些功能的計算機程序。

      在很早很早以前,一臺計算機的軟件是不分層次結構的。一臺計算機只有一個系統,這個系統既是操作系統又是應用軟件,與硬件緊密綁定。后來經過許多年的發展發展發展,人們把一些與硬件緊密相連的又經常用到必不可少的功能做到一套程序中去,這一套程序就被人們稱做操作系統。另外一些可有可無的,不同工作適應不同環境的功能封裝到另外一套程序中去,而這一系列程序被人們稱作應用軟件。如下圖:

      -------------------------------------------

      |應用軟件:falshgat/IE/realplayer/winamp..|

      -------------------------------------------

      |操作系統:UNIX/Windows/Linux/Solaris...? |

      -------------------------------------------

      前一篇我們知道,硬件分為服務器工作站與pc,其實無論哪種硬件的軟件,都有操作系統與應用軟件。?ok,那下面我們來談應用軟件。在現在企業級應用中,我們的應用軟件一般分為三層,三層分別是表示層,業務邏輯層,數據持久層。

      ------------------------------

      |表示層|業務邏輯層|數據持久層|

      ------------------------------

      一個牛人給JAVA初學者的建議(上篇)

      1.表示層

      這一層一般在客戶端pc機上,最常見的是IE瀏覽器,這就是表示層的軟件。表示層是直接與使用者交互的軟件。

      2.業務邏輯層

      這一層一般在服務器端,顧名思義,所有業務邏輯處理都在這一層完成。最典型的是App Server,比如IBM的websphere,BEA的weblogic還有tomcat/jboss等。這一層也是三層中的重點,我們要說的大部分內容都是關于這一層的,這個等會再說,這一層就叫做中間層。

      3.數據持久層

      這一層典型的就是數據庫,一般也在服務器端。但該服務器一般與裝業務邏輯層軟件的服務器分開,當然你也可以用IO輸入輸出流往硬盤上寫東西,但沒人會建議你這么做,因為這樣做你的數據缺乏管理,不管怎樣,這一層要做的就是保存數據,業務邏輯層軟件一般不負責保留數據,或者說業務邏輯層只負責暫時儲存數據,一關機,業務邏輯層數據全部over了,那么數據的持久化(也就是儲存數據)就必須要在這一層完成。下面放著這些概念不談,我們來說說將來的趨勢。趨勢一:

      瘦客戶端,很早很早以前,當時C/S模式也就是client/server。客戶端軟件大行其道的年代,一個pc用戶,是采用一個傻終端連接到服務器上。然后進行相應的操作,最典型的就是我們上bbs經常用的c-term。這就是那個時代的產物,同樣還有我國現行的機票定座用的e-term。后來呢,瀏覽器變得非常流行,人們發現,瀏覽器也能傳遞一些數據,雖然這些數據并不像那些終端那樣準確,但應付大多數日常需求足夠了。于是人們就提出一個瘦客戶端概念,也就是說,將來表示層所有的其他軟件疾揮?我們唯一需要的就是一個網頁瀏覽器,然后通過瀏覽器輸入ip地址連接到服務器,然后進行相關的操作。由于網頁瀏覽器一般每個操作系統都有自帶一個。這樣做就達到了給我們客戶端瘦身的目的(不需要安裝額外軟件)。這樣模式被稱作B/S模式,也就是browser/server模式。但需要指出的是,雖然瘦客戶端是趨勢,但并不代表胖客戶端沒有市場。尤其是一些復雜的業務操作,還是瀏覽器這種簡單軟件無法勝任的。趨勢二:

      傻數據庫,ok,首先,我承認,這個名詞是我發明的,但我實在無法找到一個更好的表達什么是傻數據庫,如果誰對數據庫有所了解的話,就知道,以前的數據庫,有自己的一套管理體系,甚至有自己的客戶端,比如oracle,mysql,Sqlserver都有。在某個管理工具上寫什么sql語句查詢數據庫是我們以前常做的事。那么將來我們提倡的是:將所有的業務邏輯封裝到業務邏輯層去,管理的事情由軟件來做,由業務邏輯層的軟件來做,所謂傻數據庫就是說,將來的數據庫什么事都不用做,只用把數據給我保存好就行了,那些復雜的業務邏輯什么外鍵什么關聯,都沒數據庫什么事了,都交給業務邏輯層軟件來做,這樣做的好處就是:我們就不需要這些該死難懂又復雜的數據庫系列管理工具了,而且這些工具每個數據庫都有自己的工具,完全不一樣,亂七八糟,沒有人喜歡面對他們。除了數據庫維護人員,也就是DBA,我們是軟件工程師,維護的事讓他們去做,而且嚴禁數據庫維護人員改動數據庫的數據,他們只做備份,必要時候恢復一下就是了。了解了這兩個趨勢之后,是不是有種砍頭去尾保中間的感覺?沒錯,未來的趨勢就是中間件時代,中間件工程師將是未來計算機應用的主流。那再次統一一下概念,什么是中間件?記得我上學的時候,看IBM的教材,看了半天中間件定義,就看懂記住一句話,中間件是做別人不愿意去做的事情,現在想想,狗屁定義,呵呵。什么是中間件,中間件是業務邏輯層的應用軟件,是處理業務數據與客戶端之間業務邏輯的一種應用軟件,一種提供網絡服務的服務器端應用軟件。舉個非常簡單的例子,網上銀行,某個人想用IE進入工行的賬戶,然后轉帳。在這個例子中,客戶端表示層顯然是IE,數據持久層顯然是銀行的核心數據庫。那么中間件是什么?中間件就是提供這種服務的系統。這三層的劃分如下

      ------------------------------

      |表示層 |業務邏輯層 | 數據持久層 |

      ------------------------------

      |? IE? ?| ?網上銀行 ?|? ?數據庫 ??|

      ------------------------------

      給初學者之五:企業級應用之中間件

      前面一篇簡單介紹了一下應用軟件的分層,下面重點介紹一下中間件,也就是業務邏輯層的軟件結構?。從本系列第二篇我們知道,java程序是跑在虛擬機之上的,大致結構如下:

      ----------------------

      | grogram ?|

      -----------------------

      | ?虛擬機 ?|

      ----------------------

      | 操作系統 |

      -----------------------

      也就是說操作系統先運行一個java虛擬機,然后再在虛擬機之上運行java程序,這樣做的好處前面也說過了,就是安全,一旦出現病毒或是其他什么東西,掛掉的是虛擬機,操作系統并不會受多大影響?。這時候有人可能會問,為什么非要虛擬機?把操作系統當成虛擬機為什么不行?可以,當然可以,但是這樣做某一個應用軟件的bug就可能造成整個操作系統的死亡。比如說我們在某個服務器上安裝了一個收發電子郵件的軟件和java虛擬機,那么一旦黑客通過收發電子郵件的軟件入侵系統,那么操作系統就整個玩完。那么如果黑客通過java程序進行攻擊的話,那么死的將會是虛擬機而不是操作系統,大不了虛擬機崩潰,而操作系統正常運行不受任何影響。?舉個簡單例子,比如說最常見的是將數據庫(DB)與中間件放在同一臺服務器上

      ----------------------------------------------------------------------------------------------------

      | ?program | ??????????|

      ----------------------------------------------------------| ????DB ???|

      | ?虛擬機 ?| ??????????|

      ------------------------------------------------------------------------------------------------------

      | ???????操作系統 ?????|

      ------------------------------------------------------------------------------------------------------

      那么此時如果沒有虛擬機,黑客病毒攻擊中間件系統,就有可能造成操作系統的死亡,那此時數據庫也有可能跟著一起玩完,那損失可就大咯?。那如果此時有虛擬機,那么一旦被攻擊,死的是虛擬機,操作系統與數據庫不受任何影響。嗯,回顧完虛擬機,再來介紹中間件?。在很早很早以前,任何一家企業,想要搭建一個局域網系統,他需要請許多個工程師。比如說我們想搭建一個網上銀行,客戶端用瀏覽器,后臺數據庫比如說用oracle。那么搭建這樣一個網上銀行,可能需要用到多少個工程師,我們來算一算。首先,由于客戶端用的是瀏覽器,我們需要一些了解網絡通訊協議以及一些瀏覽器標準的網絡工程師。其次,由于后臺數據庫用的是oracle,那我們還需要請oracle的工程師,因為數據庫這一層每個數據庫公司的接口什么都不一樣。然后,我們還需要一些操作系統的工程師,因為我們的系統需要跟操作系統直接交互。最后,我們需要一些設計網上銀行系統及其相關業務的工程師?。太多了太多了,這樣一個中間件隊伍實在太龐大了,制作維護成本實在太高了。不僅如此,這樣一個中間件就算做出來,他們所寫的代碼也只能滿足這一家公司使用。其它公司統統不能再用,代碼重用率極低,近乎不可能重用?。畢竟這個系統中改動任何一個部分都有可能涉及到整個系統的改動?。那么如何降低成本?

      我舉出了四組的工程師:

      網絡工程師,數據庫工程師,操作系統工程師以及設計網上銀行系統的業務工程師

      除了最后一組設計網上銀行的業務工程師之外,前面三組工程師是不是每一個項目都需要的?就算不是每一個項目都需要,至少也是絕大多數項目需要的吧??哪個項目能夠脫離網絡,數據庫和操作系統?不可能,在這個時代已經很少很少了。好,那既然每個項目都需要,我們是不是可以用一個產品來取代這三組的工程師呢?我們的業務工程師只需要遵循這個產品所提供的接口,進行相應的開發就行了。人們提出了一種叫做App Server也就是應用服務器的東西,應用服務器是干什么的?按官方的說法,應用服務器是包括有多個容器的軟件服務器。那容器是什么?容器(Container)到底是個什么東西我想多數人還是不清楚。在說這個之前,先介紹一下組件?。什么是組件,組件是什么?組件其實就是一個應用程序塊?,但是它們不是完整的應用程序,不能單獨運行。?就有如一輛汽車,車門是一個組件,車燈也是一個組件?。但是光有車燈,車門沒有用,它們不能跑上公路?,在java中這些組件就叫做javabean,有點像微軟以前的com組件。要特別說明的是,由于任何一個java文件編譯以后都是以類的形式存在

      所以javabean肯定也是一個類,這是毫無疑問的。好,那么容器里裝載的是什么呢?就是這些組件。而容器之外的程序需要和這些組件交互必須通過容器?。舉個例子,IE發送了一個請求給容器,容器通過調用其中的一個組件進行相關處理之后。將結果反饋給IE,這種與客戶端軟件交互的組件就叫做Servlet。但是組件有很多種,那么如何區分這些組件呢??有多種管理辦法,比如同是同樣是SERVLET,有些是通過JSP生成的,而有些是開發人員自己寫的,那么通過JSP生成的SERVLET集中放在一個地方,而開發人員自己寫的則需要在XML里面配置一些基本的參數。同時,不同組件有可能還需要繼承一些特定的父類或者接口,這也是容器管理的需要.還有其他的一些組件,這里就不一一說明舉例了?.那么容器有很多種,按照他們裝載的組件類型劃分?,比如有裝ejb的ejb容器,有裝Servlet與jsp還有靜態頁面的web容器等.//這種只含有web容器的應用服務器也被叫做web服務器.當表示層的應用軟件通過網絡向App Server發送一個請求的時候,App Server自動找到相應容器中的組件,執行組件中的程序塊,把得到結果返還給客戶.而我們要做的事就是寫組件也就是javabean,然后放到App Server里面去就可以了.至于怎樣與IE通訊.怎樣截獲網絡上的請求,怎樣控制對象的數量等等.這些繁瑣而無味的工作我們都不管,都由App Server去做吧,把注意力集中在業務邏輯上.App Server與其他相關軟件的關系如下圖:

      -------------------------------------------------------

      | ???表示層 ???| ??????業務邏輯層 ???????|數據持久層 |

      -------------------------------------------------------

      | ?????????????| ???----------------- ???| ???????????|

      | ?????IE ?????| ???| ??javabean ???| ???| ???????????|

      | ?????????????-> ??----------------- ???-> ??DB ?????|

      | ???client ??<- ?????????????App Server?<- ???????????|

      | ?????????????|-------------------------| ???????????|

      | ?????????????| ???????虛擬機 ??????????| ???????????|

      |--------------|-------------------------|------------|

      | ???Windows ??| ???Linux/Saloris ???????|LinuxSaloris|

      |--------------|-------------------------|------------|

      圖上可以看出:虛擬機負責處理中間件與操作系統之間的交互?,App Server則負責組件的管理以及與其他兩層的業務交互.?要說明的是上圖中還包含有應用程序客戶端容器(Application client container),管理應用程序客戶端組件的運行,應用程序客戶端和它的容器運行在客戶機.這種情況比較復雜,一般說的是兩個 ???????????????????server之間的通訊,比如jsp/Servlet容器在一個服務器上,而ejb容器在另外一個服務器上等等。這是分布式操作系統大面積應用的基礎。嗯,那么話題再回到中間件上去,什么是中間件??App Server就是所謂的中間件,但是中間件不僅有App Server,還有其他的東西,換句話說,App Server只是中間件的一種。而關于中間件有諸多規范以及遵循這些規范的模型最流行的規范無非兩種,一個是j2ee還有一個是.net。但是.net幾乎只有微軟在用,所以很多人把.net這個規范就當成是微軟的中間件產品。也不為過,畢竟沒幾個公司喜歡跟著微軟屁股后面跑的。

      Java Java java學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:Excel表格導入Word不能全部顯示怎么辦 Excel表格導入Word全部顯示方法
      下一篇:在wps表格中如何刪除重復項(wps表格怎么快速刪除重復項)
      相關文章
      亚洲精品国产免费| 亚洲欧洲日韩不卡| 久久精品国产亚洲AV果冻传媒| 亚洲精品无码久久久久AV麻豆| 亚洲欧美日韩久久精品| 亚洲中文字幕无码中文字| 亚洲国产av高清无码| 亚洲国产精品久久人人爱| 亚洲最大的成网4438| 亚洲免费精彩视频在线观看| 久久久无码精品亚洲日韩蜜桃 | 亚洲精品国产第一综合99久久| 国内精品久久久久影院亚洲| 亚洲乱码在线卡一卡二卡新区| 精品亚洲国产成人| 亚洲综合色一区二区三区| 亚洲AV无码久久久久网站蜜桃| 亚洲伊人久久大香线蕉结合| 亚洲sss综合天堂久久久| 亚洲最大中文字幕无码网站| 亚洲区日韩精品中文字幕| 亚洲欧洲AV无码专区| 亚洲变态另类一区二区三区 | 久久久亚洲裙底偷窥综合| 亚洲网址在线观看| 亚洲熟妇无码爱v在线观看| 亚洲1区1区3区4区产品乱码芒果 | 亚洲 欧洲 自拍 另类 校园| 亚洲精品无码aⅴ中文字幕蜜桃| 亚洲国产区男人本色| 爱爱帝国亚洲一区二区三区| 亚洲精品国产综合久久一线| 亚洲综合AV在线在线播放| 亚洲精品成人av在线| 亚洲女人初试黑人巨高清| 亚洲一本一道一区二区三区| 国产精品亚洲小说专区| 最新精品亚洲成a人在线观看| 精品亚洲永久免费精品| 18gay台湾男同亚洲男同| 久久精品国产亚洲AV蜜臀色欲|