国产18禁黄网站免费观看,99爱在线精品免费观看,粉嫩metart人体欣赏,99久久99精品久久久久久,6080亚洲人久久精品

編程經(jīng)驗系列-Java學習雜談(八)

時間:2008-10-06 16:57:00   來源:無憂考網(wǎng)     [字體: ]
終于正式進入J2ee的細節(jié)部分了,首當其沖的當然是Servlet和Jsp了,上篇曾經(jīng)提到過J2ee只是一個規(guī)范和指南,定義了一組必須要遵循的接口,核心概念是組件和容器。曾經(jīng)有的人問Servlet的Class文件是哪里來的?他認為是J2ee官方提供的,我舉了一個簡單的反例:稍微檢查了一下Tomcat5.0里面的Servlet.jar文件和JBoss里面的Servlet.jar文件大小,很明顯是不一樣的,至少已經(jīng)說明了它們不是源自同根的吧。其實Servlet是由容器根據(jù)J2ee的接口定義自己來實現(xiàn)的,實現(xiàn)的方式當然可以不同,只要都遵守J2ee規(guī)范和指南。
  上述只是一個常見的誤區(qū)罷了,告訴我們要編譯運行Servlet,是要依賴于實現(xiàn)它的容器的,不然連jar文件都沒有,編譯都無法進行。那么Jsp呢? Java Server Page的簡稱,是為了開發(fā)動態(tài)網(wǎng)頁而誕生的技術(shù),其本質(zhì)也是Jsp,在編寫完畢之后會在容器啟動時經(jīng)過編譯成對應的Servlet.只是我們利用Jsp 的很多新特性,可以更加專注于前后臺的分離,早期Jsp做前臺是滿流行的,畢竟里面支持Html代碼,這讓前臺美工人員可以更有效率的去完成自己的工作。然后Jsp將請求轉(zhuǎn)發(fā)到后臺的Servlet,由Servlet處理業(yè)務邏輯,再轉(zhuǎn)發(fā)回另外一個Jsp在前臺顯示出來。這似乎已經(jīng)成為一種常用的模式,最初學習J2ee的時候,大量時間也在編寫這樣的代碼。
  盡管現(xiàn)在做前臺的技術(shù)越來越多,例如Flash、Ajax等,已經(jīng)有很多人不再認為Jsp重要了。覺得Jsp帶來的不僅僅是前后端分離的設(shè)計理念,它的另外一項技術(shù)成就了我們今天用的很多框架,那就是Tag標簽技術(shù)。所以與其說是在學習Jsp,不如更清醒的告訴自己在不斷的理解Tag標簽的意義和本質(zhì)。
  1.Servlet以及Jsp的生命周期
  Servlet是Jsp的實質(zhì),盡管容器對它們的處理有所區(qū)別。Servlet有init()方法初始化,service()方法進行Web服務, destroy()方法進行銷毀,從生到滅都由容器來掌握,所以這些方法除非你想自己來實現(xiàn)Servlet,否則是很少會接觸到的。正是由于很少接觸,才容易被廣大初學者所忽略,希望大家至少記住Servlet生命周期方法都是回調(diào)方法;卣{(diào)這個概念簡單來說就是把自己注入另外一個類中,由它來調(diào)用你的方法,所謂的另外一個類就是Web容器,它只認識接口和接口的方法,注入進來的是怎樣的對象不管,它只會根據(jù)所需調(diào)用這個對象在接口定義存在的那些方法。由容器來調(diào)用的Servlet對象的初始化、服務和銷毀方法,所以叫做回調(diào)。這個概念對學習其他J2ee技術(shù)相當關(guān)鍵!
  那么Jsp呢?本事上是Servlet,還是有些區(qū)別的,它的生命周期是這樣的:
  a)一個客戶端的Request到達服務器 ->
  b)判斷是否第一次調(diào)用 -> 是的話編譯Jsp成Servlet
  c)否的話再判斷此Jsp是否有改變 -> 是的話也重新編譯Jsp成Servlet
  d)已經(jīng)編譯最近版本的Servlet裝載所需的其他Class e) 發(fā)布Servlet,即調(diào)用它的Service()方法
  所以Jsp號稱的是第一次Load緩慢,以后都會很快的運行。從它的生命的周期確實不難看出來這個特點,客戶端的操作很少會改變Jsp的源碼,所以它不需要編譯第二次就一直可以為客戶端提供服務。這里稍微解釋一下Http的無狀態(tài)性,因為發(fā)現(xiàn)很多人誤解,Http的無狀態(tài)性是指每次一張頁面顯示出來了,與服務器的連接其實就已經(jīng)斷開了,當再次有提交動作的時候,才會再次與服務器進行連接請求提供服務。當然還有現(xiàn)在比較流行的是Ajax與服務器異步通過 xml交互的技術(shù),在做前臺的領(lǐng)域潛力巨大。