摘 要: 大多數中小企業的Web系統屬于輕量級業務處理?;?a class="innerlink" href="http://www.rjjo.cn/tags/Java Web" title="Java Web" target="_blank">Java Web平臺,提出了一種輕量化系統開發架構,該架構實現了請求形式的改變與業務處理本質的統一,支持常規業務邏輯的自動裝配處理,具有可復用、標準化、代碼量低的優勢。
關鍵詞: Java Web;裝配;架構;設計
隨著網絡技術、計算機技術的發展,越來越多的中小企業單位開始走上信息化的道路。這些企事業單位不僅需要外部網站的建設,同時還有內部Web信息管理系統的建設(例如人力資源管理系統、考勤管理系統等)。根據國家工商總局公布的數據,2005年我國中小企業規模數量為2 836萬家,而網站總數量僅為69萬家;2012年我國中小企業規模猛增到5 175萬家,而網站總數量僅僅為530萬家。顯然,企業內外部Web系統數量遠遠低于企業現有數量。因此,基于Java跨平臺特性,Java Web系統具有極大地市場需求和開發潛力。
中小企業內外部Web系統具有一些共性特征:動態、輕量化,例如一般涉及數據處理,且數據量不是很大、業務處理邏輯也不復雜。其網站常見功能有:單位組織的介紹、產品的介紹、用戶管理、新聞管理、在線咨詢或服務等。而內部Web系統的功能側重于數據的查詢、錄入、更新、刪除等,較少涉及復雜的數據關聯處理。
對于上述輕量化的常規數據處理,研究一種能夠將業務邏輯處理自動裝配的系統DWAS(Dynamic Web Assembly System),具有良好的現實意義:(1)避免重復編寫數據的增刪查改等操作,自動裝配業務處理邏輯,提高復用性,降低開發成本;(2)提供一個標準化、高質量、輕量化的業務邏輯處理基礎平臺,降低由于開發人員水平差異帶來的系統質量問題;(3)降低Web系統開發門檻,用戶只需要進行簡單的系統配置或組裝操作即可完成功能處理要求。
1 系統設計架構
1.1 總體架構
DWAS基于MVC架構,融合Hibernate、Struts和SpringMVC思想。系統著重基于B/S模式的輕量級Web系統開發。DWAS能夠自動裝配常規SQL操作,用戶無需編寫SQL語句。DWAS能夠自動裝配組合查詢:對于多條件的組合查詢數據,動態Web自動裝配系統能夠自動適應。系統能夠自適應視圖變化:當視圖層提交數據的形式改變(例如增加或刪除頁面表單域)時,無需修改處理邏輯的程序代碼。DWAS支持主流數據庫和連接池產品,其應用方式也顯示多樣化特征。DWAS總體架構如圖1所示。
來自于頁面的業務處理請求,先由DWAS的前端控制器接收,然后由控制器工廠自動裝配??刂破鞴S調用模型層相應的業務處理Bean,由后者與數據庫進行交互。最后,控制器工廠將處理后并按照要求封裝好的結果數據轉發給最終的結果頁面(例如顯示登錄成功的界面)。
1.2 與同類產品的比較分析
目前市場上主流的同類產品主要有Spring MVC、Struts和Hibernate等。具體比較分析如表1所示。
Spring是輕量級的控制反轉和面向切面的開源框架,是為了解決企業應用開發的復雜性而創建。Spring MVC需要配置過多的XML文件。Struts是Apache Jakarta項目的一個頂級項目,采用了基于Web的MVC模式。Struts的不足在于過于繁雜的標簽體系和大量不太適用的功能。Hibernate是一個開放源代碼的對象關系映射框架,使用對象編程思維來操縱數據庫,但對于批量數據的修改刪除操作不太適合。
DWAS汲取了這些產品的優點,進行了設計思想上的整合、修正和完善。
1.3 自動裝配流程
DWAS裝配流程如圖2所示。
系統準備:JDK、服務器環境的配置、數據庫服務器的安裝、DWAS系統JAR文件的配置等;編寫實體類和XML配置文件:與業務處理邏輯對應的實體類、描述業務處理的標識或SQL語句的XML配置文件;視圖頁面和運行結果頁面:前者是業務處理請求界面,后者則是反饋執行結果的界面。
對第①部分的處理,使用一些文本編輯器即可完成,并不需要開發設計人員具有較高的開發水平。因此,即使是系統前臺的設計人員稍作培訓,都可以完成。而第②部分,則由DWAS負責自動完成。
1.4 應用方式
DWAS的應用方式很靈活,既可以將其擴展成獨立的IDE平臺,也可采用插件方式與第三方IDE集成。
2 實踐應用展示
2.1應用場景
為簡化說明,假定這樣的幾個應用場景:學生信息查詢(不定條件)、學生注冊??疾煸谝晥D發生變化的情況下,DWAS自適應這種變化的處理能力。
對于不同的應用場景,表單域發生改變時,業務處理標識不變,結果頁面不變(只需要回傳數據到頁面)。用戶只需要編寫XML配置描述,指定Bean、動作標識、處理成功(失?。┺D發頁面、返回數據屬性名,DWAS即可實現自適應視圖變化的處理,而無需修改后臺業務處理代碼。當應用場景僅僅是表單域發生改變時(例如應用場景從根據“姓名”查詢變更為根據“姓名、班級”查詢),業務處理的本質(學生基本信息的查詢)并未發生改變,因此采用相同的業務處理標識。至于結果頁面,從圖1可以看到,控制器工廠將封裝后的處理結果數據轉發給最終結果頁面,后者只是顯示傳送過來的數據包而已,因此結果頁面不與表單域嚴密耦合。而“學生注冊”這種應用場景,由于屬于另外一種業務處理,因此采用不同的業務處理標識。具體如表2、表3所示。
無論是業務處理標識,還是XML描述,使用外部文本編輯器即可進行編輯,其形式的改變并不會影響DWAS內部處理代碼,因而視圖形式與內在邏輯實現了良好解耦。
2.2 部分關鍵實現
DWAS要獲取請求數據的鍵值對,代碼如下。
protected Map<String,String[]>getRequestDataMap(){
//鍵值對
Map<String,String[]>map=request.getParameterMap();
try{
Method method=map.getClass().getMethod("setLocked",new Class[]{boolean.class});//接觸map鎖定
method.invoke(map,new Object[]{new Boolean(false)});//反射
map.remove("action");
List<String> list=getParametersName();//請求參數名
…
}catch (Exception e){e.printStackTrace();}
return map;
}
對請求參數進行解析,代碼如下。
protected List<String> getParametersName(){
List<String>temp=new ArrayList<String>();
Set<Entry<String,String[]>>set=map.entrySet();
for(Entry<String,String[]>m:set){
String o=m.getKey();
String[] value=m.getValue();
if(SysCfgEntity.getAction().equals(Constants.query))
continue;
else
temp.add(o);
}
return temp;
}
根據Bean名稱獲取數據表字段并進行裝配,代碼如下。
protected String getTablePrimaryKey(){
…
Connection conn=DBFactory.getInstance().getConnection();
rs=conn.getMetaData().getPrimaryKeys(null,null,
getTableName());
primaryKey=rs.getString("COLUMN_NAME");
//反射實體
ReflectEntity entity=new ReflectEntity();
Field[]fields=entity.getFields();
Object instance=entity.getInstance();//實例
BeanUtils.populate(instance,map);
//獲取參數名列表
List<String>list=getParametersName();
int i=1;
String primaryKeyValue=null;
for(String s:list){
for(Field e:entity.getFields()){
if(e.getName().equals(s)){
e.setAccessible(true);
ps.setObject(i,e.get(instance));//賦參數值
if(s.equals(primaryKey))
primaryKeyValue=(String)e.get(instance);
i++;
}
}
}
return getAutoParams();
}
DWAS系統著重關注業務處理的本質,并將用戶請求形式的外在改變與業務處理的本質特征統一起來,從而實現系統處理的優化。從實踐應用情況來看,得到了用戶和開發人員的肯定,效果良好。
參考文獻
[1] OSGi Alliance corporation. OSGi Technology[EB/OL]. http://www.osgi.org/osgi_technology/index.asp section=2.
[2] Announcing the ADVANCED ENCRYPTION STANDARD (AES). Federal information processing standards publication 197[C]. United States National Institute of Standards and Technology(NIST), 2001.
[3] 陳岡.Java開發入行真功夫[M].北京:電子工業出版社,2009.
[4] 于慶梅.OSGi平臺服務動態更新的發布/訂閱策略[J].計算機應用與軟件,2012(6):17-32.
[5] 黃晗.基于R-OSGi的平臺容錯架構設計與實現[J].計算機與現代化,2013(9):66-73.
[6] 龍軍,趙貴虎,張祖平.一種支持動態管理的SCA服務模型研究[J].計算機科學,2012(12):114-117.
[7] 張語涵,劉淑華,周永鑫.Java Web應用中錯誤和異常處理方法研究[J].現代計算機(專業版),2013(23):61-64.
[8] 張耀民.SSH框架在Web項目開發中的構建和應用實踐[J].微型機與應用,2013(15):18-21.
[9] 司飆.MVC模式下的考試系統建模研究[J].計算機科學,2013(S1):403-406.
[10] 張原,張昭,劉蕊.基于MVC設計模式的虛擬實驗平臺模塊化設計[J].計算機工程與科學,2013(8):125-129.
[11] 梁員寧,陳喆,謝立軍.Web服務組合的可靠性動態評估模型[J].計算機應用研究,2012(3):955-960.
[12] 劉淑華.J2EE項目中一種新的錯誤處理方法[J].計算機應用與軟件,2013(7):143-145.
[13] 黃永慧,陳程凱. HTML5在移動應用開發上的應用前景[J].計算機技術與發展,2013(7):207-210.