最近中文字幕完整版高清,宅男宅女精品国产av天堂,亚洲欧美日韩综合一区二区,最新色国产精品精品视频,中文字幕日韩欧美就去鲁

首頁 > 考試輔導(dǎo) > 計算機考試 > IBM認(rèn)證 > IBM認(rèn)證復(fù)習(xí)指導(dǎo) > 基于Spring框架的WebSphere應(yīng)用開發(fā)1

基于Spring框架的WebSphere應(yīng)用開發(fā)1

        本文首先介紹使用spring開發(fā)web應(yīng)用的基本問題,然后結(jié)合websphere應(yīng)用服務(wù)器,講述spring應(yīng)用如何結(jié)合容器提供的服務(wù)。   概覽

  輕量級的企業(yè)應(yīng)用開發(fā)越來越受到廣大j2ee應(yīng)用開發(fā)者的追捧,而spring框架又是輕量級容器的杰出代表。由于spring的使用日漸廣泛,因此已有許多基于websphere應(yīng)用服務(wù)器(was)的應(yīng)用采用了spring框架。本文首先介紹使用spring開發(fā)web應(yīng)用的基本問題,然后結(jié)合websphere應(yīng)用服務(wù)器,講述spring應(yīng)用如何結(jié)合容器提供的服務(wù)。文章目的是與大家一起探討如何更好的采用spring框架開發(fā)基于websphere應(yīng)用服務(wù)器的應(yīng)用。

  spring框架的主要思想描述

  spring框架的核心思想我們可以用兩個字來描述,那就是"解耦"。應(yīng)用程序的各個部分之間(包括代碼內(nèi)部和代碼與平臺之間)盡量形成一種松耦合的結(jié)構(gòu),使得應(yīng)用程序有更多的靈活性。應(yīng)用內(nèi)部的解耦主要通過一種稱為控制反轉(zhuǎn)(ioc)的技術(shù)來實現(xiàn)?刂品崔D(zhuǎn)的基本思想就是本來由應(yīng)用程序本身來主動控制的調(diào)用等邏輯轉(zhuǎn)變成由外部配置文件來被動控制。通常我們用一個所謂的好萊塢原則(don't call me. i will call you.)來比喻這種控制反轉(zhuǎn)的關(guān)系。由于控制反轉(zhuǎn)的概念相對比較廣泛,很多應(yīng)用服務(wù)器實際上也實現(xiàn)了不同程度的控制反轉(zhuǎn)技術(shù),只是這些應(yīng)用服務(wù)器對應(yīng)用程序的侵入性太強。因此martin fowler專門寫了一篇文章討論控制反轉(zhuǎn)這個概念,并提出一個描述更為準(zhǔn)確的概念,叫依賴注入(dependency injection)。關(guān)于依賴注入具體可以參考martin fowler原文,見參考資料1。spring框架中的各個部分都充分使用了這種依賴注入的技術(shù)實現(xiàn),從而給應(yīng)用以最大的靈活度。實際上,這種依賴注入的參數(shù)化應(yīng)用控制并不是spring的首創(chuàng),比如ibm的多渠道應(yīng)用整合平臺(branch transformation toolkit,btt)很早就采用了這種外部參數(shù)化控制的技術(shù)。btt中的"對象工廠"與spring框架中的beanfactory也有著異曲同工之妙。

  spring框架另外一個比較重要的技術(shù)是它對于面向切面的編程(aop)的支持。隨著應(yīng)用復(fù)雜度的逐漸上升和對應(yīng)用靈活性要求的提高,it邏輯和業(yè)務(wù)邏輯盡量分離的呼聲也越來越高。aop技術(shù)作為實現(xiàn)這種分離的一種比較好的途徑而越來越受到大家的重視。spring提供的是一種動態(tài)aop實現(xiàn),也即通過代理模式動態(tài)地在目標(biāo)對象的方法前后插入相應(yīng)的處理代碼。應(yīng)用程序與底層應(yīng)用服務(wù)器平臺的解耦也可以借助aop技術(shù)來實現(xiàn)。spring內(nèi)置的aop支持是一種錦上添花的功能。它使得一些本來必須由容器支持的功能,比如事務(wù)控制可以脫離開容器運行,從而達(dá)到"瘦身"的目的。這也是為什么spring框架常被人成為輕量級容器的一個原因。

  spring框架可以與許多已有的框架技術(shù)結(jié)合使用。j2ee技術(shù)應(yīng)用的一個重要特點是相關(guān)的開源社區(qū)非常活躍。web應(yīng)用的不同層次都有非常多優(yōu)秀的開源框架存在。比如web層的struts,or映射層的hibernate等。spring框架并不重新發(fā)明輪子,它的出現(xiàn)不是為了替代這些已有的框架。相反,spring框架在設(shè)計上可以獨立構(gòu)建應(yīng)用或者結(jié)合已有的框架一起構(gòu)建應(yīng)用。另外一個值得指出的地方是spring框架的幾大模塊之間相互耦合度很小,因此spring框架的使用可以根據(jù)實際需要選其部分模塊循序漸進的使用,而非必須統(tǒng)統(tǒng)照搬。

  基于spring的web應(yīng)用基礎(chǔ)

  web應(yīng)用的典型層次

  web應(yīng)用一般在邏輯上根據(jù)功能分為以下幾層:

  1. 展示層

  這一層主要如何生成展示給最終用戶的界面,盡可能少的包含業(yè)務(wù)邏輯處理。對于基于j2ee的web應(yīng)用,jsp是其最為常見的一種技術(shù)。spring對于展示層的支持非常靈活,除了直接支持jsp之外,它還支持基于freemarker模板,基于velocity模板或其它文檔類型的界面等的表現(xiàn)層實現(xiàn)。

  2. 業(yè)務(wù)層

  業(yè)務(wù)層一般包含主要的業(yè)務(wù)邏輯,尤其是與用例相對應(yīng)的那些業(yè)務(wù)邏輯。另外,這一層也適合包含事務(wù)管理和安全控制方面的邏輯。良好的業(yè)務(wù)層設(shè)計可以使得展示層可以采用不同的技術(shù)而不影響業(yè)務(wù)層。業(yè)務(wù)層的功能上可以類比于j2ee技術(shù)中的無狀態(tài)會話bean層次。

  3. 數(shù)據(jù)訪問對象(dao)接口層

  dao實際上就是數(shù)據(jù)接口層,在應(yīng)用中建議通過接口來體現(xiàn)。dao的存在使得數(shù)據(jù)訪問可以與底層持久化層的具體實現(xiàn)相分離。一般在dao接口中主要就是實現(xiàn)數(shù)據(jù)對象的查詢、存儲、刪除等操作。從理論上講,dao層與底層數(shù)據(jù)的存儲方式是獨立的,也就是說并不一定要求是關(guān)系型數(shù)據(jù)庫。spring框架在設(shè)計的時候也考慮到了其它非關(guān)系型數(shù)據(jù)庫數(shù)據(jù)源的情況。

  4. 持久業(yè)務(wù)對象

  持久業(yè)務(wù)對象是問題域中業(yè)務(wù)對象的持久化表示,比如一個用戶對象,一個銀行帳戶等。我們一般通過某種o/r映射技術(shù)來實現(xiàn)這些業(yè)務(wù)對象的持久化。持久業(yè)務(wù)對象是可以包含業(yè)務(wù)邏輯的,與業(yè)務(wù)層所包含的業(yè)務(wù)邏輯不同的地方是持久業(yè)務(wù)對象所包含的是與具體業(yè)務(wù)對象直接相關(guān)且更為通用的業(yè)務(wù)邏輯。

  5. 企業(yè)信息系統(tǒng)

  企業(yè)信息系統(tǒng)泛指web應(yīng)用需要連接的后臺系統(tǒng),一般可以分為三大類,即erp系統(tǒng),企業(yè)傳統(tǒng)的遺留系統(tǒng)和關(guān)系型數(shù)據(jù)庫。大部分web應(yīng)用都是基于關(guān)系型數(shù)據(jù)庫的,這也是像spring等常見框架所主要考慮的企業(yè)信息系統(tǒng)。

  設(shè)計良好的web應(yīng)用在層次一般是上一層依賴下一層,但是下一層不依賴上一層。我們可以暫時概括為"向下而不向上依賴原則"。為了使得不同層次之間的依賴降到最低,建議使用接口耦合。這一點又是spring框架發(fā)揮它外部配置優(yōu)勢的地方。

  mvc的選擇

  雖然說mvc這種模式早在java語言出現(xiàn)前就有了,但是這種模式在j2ee時代才大行其道,為廣大web應(yīng)用開發(fā)者所接受。對于各種基于mvc的框架而言,其要解決的問題主要可以分為以下幾部分:

  1. 將web頁面中的輸入封裝成一個數(shù)據(jù)對象,比如像struts的表單bean,spring mvc中的命令類等。

  2. 根據(jù)請求的不同,由負(fù)責(zé)分發(fā)的控制器來映射和調(diào)用相應(yīng)的邏輯處理單元,并將上面的數(shù)據(jù)對象作為參數(shù)傳入。

  3. 邏輯處理單元完成相應(yīng)的處理之后又把結(jié)果放入一個數(shù)據(jù)對象。

  4. 在選擇的展現(xiàn)界面中把返回的數(shù)據(jù)對象通過某種方式顯示出來。

  在使用spring構(gòu)建mvc的時候,可以選擇直接使用spring自己的mvc實現(xiàn),或者利用spring對已有的一些mvc框架的支持。比如spring可以支持struts,webwork等,與它們結(jié)合使用。spring引以為傲的非侵入的特性在spring mvc上表現(xiàn)得并不如人意。它與servlet api的耦合度較其它部分高,而且需要使用一些spring的接口和類。

  spring mvc的主要分發(fā)器實現(xiàn)是org.springframework.web.servlet.dispatcherservlet,這是spring mvc的訪問入口。spring提供simpleformcontroller,abstractcommandcontroller等類來幫助應(yīng)用構(gòu)建各種控制器動作,并用modelandview類來聯(lián)系展示和邏輯返回數(shù)據(jù)。如上節(jié)所述,spring mvc能夠支持不同的界面展示技術(shù),而且界面的展示和其后面控制器的實現(xiàn)是分離的,也即界面展示技術(shù)的變化不用修改控制器的實現(xiàn),只需要利用spring的控制反轉(zhuǎn)技術(shù)修改外部配置文件即可。比如,在使用jsp展示技術(shù)時,外部配置文件的viewresolver定義如下:

<bean id="viewresolver" class="org.springframework.web.servlet.view.internalresourceviewresolver"> <property> <value>org.springframework.web.servlet.view.jstlview</value> </property> <property><value>/view/</value></property> <property><value>.jsp</value></property> </bean>
  如果切換到freemaker模板技術(shù),那么除了頁面模板的修改之外,主要就是把對應(yīng)的外部配置文件更改一下即可,如下所示。具體的展示邏輯部分不用做什么修改。