官术网_书友最值得收藏!

1.5 Java Web開發所需要的技術

前面對JavaEE和MVC進行了講解,從講解中可以知道,要開發Java Web需要遵循上面的標準和規范,當然讀者可以自己實現上述規范,從而進行Java Web開發。但幸運的是,目前市場上有不少的開源框架已經實現了上述規范,比如Struts、Spring、Hibernate等,這些開源框架大大地減輕了開發人員的工作量。

1.5.1 Ajax

Ajax并不是一個新技術,它其實是整合了XMLHttpRequest、JavaScript、DOM、CSS、XML等眾多技術。

Google的Sugges(t搜索建議)、Map、Gmail等都實現了Ajax技術。它采用XMLHttpRequest對象進行數據的異步交互,使用JavaScript增強用戶體驗,使用DOM組織內容,使用CSS顯示外觀,使用XML封裝數據。在創建一個XMLHttpRequest對象時,一般采用如下寫法:

      var xmlhttp;
      if (window.XMLHttpRequest) {
          //其他瀏覽器
          xmlhttp = new XMLHttpRequest();
      } else if (window.ActiveXObject) {
          try {
              //IE瀏覽器
              xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
          } catch (e) {
              xmlhttp = new ActiveXObject('Msxml2.XMLHTTP');
          }
      }

采用Ajax還需要用到JavaScript、DOM、CSS、XML等技術,在后面的章節中筆者將詳細介紹上述技術。

隨著Ajax的逐漸流行,開發人員發現,Ajax的代碼非常零亂,難于維護。為了解決這個問題,很多的Ajax框架便應運而生了,比如Ext、Prototype、DOJO、DWR、GWT、Buffalo等。

這里以Ext為例進行簡單介紹。Ext最初來源于Yui-Ext,后來Ext又獨立于Yui發展,它積累了眾多的組件,有表格、表單、動態樹、菜單、工具條、對話框等,以方便開發人員的使用。Ext的官方網址為http://www.sencha.com/,首頁如圖1.14所示。

圖1.14 Ext的首頁

Ext一經推出,就以其優美的界面迅速流行起來,開發人員只需要很少的JavaScript代碼,就能實現一個漂亮的界面和復雜的功能,比如實現一個帶Tab的對話框,如圖1.15所示。

圖1.15 Ext實現帶Tab對話框的示例

上述復雜的對話框示例所需要的JavaScript代碼如下:

      Ext.onReady(function(){
          //定義變量tabs
          var tabs = Ext.createWidget('tabpanel', {
              renderTo: 'tabs1',
              width: 450,
              activeTab: 0,
              defaults :{
                  bodyPadding: 10
              },
              items: [{
                  contentEl:'script',
                  title: 'Short Text',
                  closable: true
              },{
                  contentEl:'markup',
                  title: 'Long Text'
              }]
          });
          //定義變量tabs2
          var tabs2 = Ext.createWidget('tabpanel', {
              renderTo: document.body,
              activeTab: 0,
              width: 600,
              height: 250,
              plain: true,
              defaults :{
                  autoScroll: true,
                  bodyPadding: 10
              },
              items: [{
                      title: 'Normal Tab',
                      html: "My content was added during construction."
                  },{
                      title: 'Ajax Tab 1',
                      loader: {
                          url: 'ajax1.htm',
                          contentType: 'html',
                          loadMask: true
                      },
                      listeners: {
                          activate: function(tab) {
                              tab.loader.load();
                          }
                      }
                  },{
                      title: 'Ajax Tab 2',
                      loader: {
                          url: 'ajax2.htm',
                          contentType: 'html',
                          autoLoad: true,
                          params: 'foo=123&bar=abc'
                      }
                  },{
                      title: 'Event Tab',
                      listeners: {
                          activate: function(tab){
                              alert(tab.title + ' was activated.');
                          }
                      },
                      html: "I am tab 4's content. I also have an event listener attached."
                  },{
                      title: 'Disabled Tab',
                      disabled: true,
                      html: "Can't see me cause I'm disabled"
                  }
              ]
          });
      });

通過上面的示例,讀者可以看出,要實現一個帶Tab的對話框,只需要不多的JavaScript代碼即可實現,這在沒有Ext之前,是很難想象的。Ext提供了與后臺進行交互的功能,但與Ext本身聯系比較緊密,不方便單獨使用它的Ajax功能。

1.5.2 MVC框架

目前實現MVC的框架非常多,比如大家都熟悉的Struts、Spring和WebWork等。通過前面對Mode l的介紹可以知道,Model 2會導致多個Controller的出現,并且對頁面導航的處理比較復雜,所以Craig R. McClanahan于2000年5月提交了一個框架給Java Community,這就是后來的Struts。2001年7月,Struts 1.0正式發布。截至到目前,Struts 2.2.3已經正式發布了。

Struts 2概覽圖如圖1.16所示。

圖1.16 Struts 2概覽圖

在2002年,Rod Johnson編寫了一本書《Expert One-on-One J2EE設計與開發》,在這本書中,他描繪了Spring的雛形。最終,他因為不能忍受EJB實現的繁雜,從而決定開發一個框架,這就是Spring。Spring由6部分組成,分別實現了開發Java應用程序的不同內容。得益于Spring框架設計的靈活性,使得它能與眾多開源框架相結合。

Spring 3框架圖如圖1.17所示。

圖1.17 Spring 3 框架圖

可以看到,Spring 3的整個框架的核心建立在Core的基礎之上,包括DAO、ORM、JEE、Web和AOP,由此也可以看出Spring 3的強大。

1.5.3 持久層技術

隨著EJB 3的發布,也有越來越多的人直接使用JPA。Hibernate 3也提供了對JPA的支持,因此,在當前的Java持久層框架中,Hibernate 3仍然是一個比較好的選擇。Hibernate在2001年發布了它的第一個正式版本;2003年6月,Hibernate 2發布;2003年年末,Hibernate被JBoss吸納;2005年3月,Hibernate 3正式發布。

為什么要使用ORM(Object/Relational Mapping)呢?這是因為開發人員使用的技術是面向對象技術,而使用的數據庫卻是關系型數據庫,一個完整的類很難以對象的方式存儲在一個關系型數據庫中,它更適合存儲在對象型數據庫中。但目前關系型數據庫仍然占主流位置,所以要使用ORM在對象型和關系型之間建立關系,從而可以使開發人員完全用面向對象的思想去設計業務邏輯,而數據的存儲仍然使用關系型數據庫。

Hibernate對Java和.NET的支持體系圖如圖1.18所示。

圖1.18 Hibernate對Java和.NET的支持體系圖

可以看到,因為JDK 5.0推出的Annotations,Hibernate也開始支持Annotations,從而推出了Hibernate Annotations,使得Hibernate 3的配置文件不再只有XML這一種選擇。

主站蜘蛛池模板: 临沂市| 阿拉善右旗| 怀集县| 繁昌县| 津市市| 舒城县| 宿松县| 大宁县| 石门县| 台湾省| 长武县| 屏山县| 陇川县| 通化市| 泾阳县| 明光市| 会理县| 玛曲县| 通道| 固安县| 延寿县| 通河县| 大丰市| 安远县| 馆陶县| 庆城县| 金秀| 纳雍县| 崇信县| 蓬安县| 永福县| 禄劝| 宿松县| 江门市| 玛曲县| 崇明县| 雅江县| 蒙自县| 磴口县| 洞头县| 桃江县|