熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

類反射簡化Struts應用程序的開發(一)

2013-11-23 20:20:23  來源: Java開源技術 

  Struts中引入ActionForm類的意義與缺陷
  在Struts應用程序中ActionForm是一個很重要的概念它的主要功能就是為Action的操作提供與客戶表單相映射的數據(如果在客戶指定的情況下還包括對數據進行校驗)Action根據業務邏輯的需要對數據狀態進行修改在改變系統狀態後ActionForm則自動的回寫新的數據狀態並保持程序員對JSP與ActionForm Bean的對應關系通常感到很迷惑JSP與ActionForm到底是:還是N:對此Struts本身對此並沒有提出自己的觀點無論是一對一還是多對一Struts本身並不關心它都能很好得工作Struts在它的開發文檔中指出對於較小規模的開發開發人員可以根據自己的需要每個模塊只寫一個ActionForm Bean甚至整個應用程序只寫一個ActionForm Bean當然Struts也不反對每個ActionForm Bean只對應一個JSP他們之間的對應關系由開發人員自己決定
  
  在我看來正如Entity EJB對JEE的重大貢獻一樣Entity EJB使得程序員對二維關系數據庫的存取對象化了程序員可以使用Set 或者Get等面向對象的方法來操縱關系數據庫的數據而ActionForm也使得程序員對網頁的數據存取奇跡般的對象化了程序員同樣也可以使用Set 或者Get等面向對象的方法存取網頁上的數據這是一個開發模式方式上的重大轉變基於此我個人認為ActionForm與JSP即VIEW層的關系最好是一對一的關系這樣在理解上會更清晰一些但是這樣也會帶來一個很現實的問題在一個應用程序中也許有非常多得JSP頁面如果每個ActionForm 都只對應一個JSP頁面那麼系統的Java代碼就會急劇膨脹起來而且每個ActionForm都是只有很簡單的Set或者Get方法存取數據那麼如何簡化Struts應用程序的開發呢?
  
  在StrutsStruts引入了DynaActionForm和Dyna Bean試圖解決這個問題在我看來DynaActionForm的引入破壞了對網頁存取對象化的概念使開發人員重新回到了使用HashTableMapCollectionArrayList等集合對象來實現對數據進行存取的老路上來雖然應用程序的靈活性大大增加了但是代碼的可讀性也大大降低了開發人員之間的交流難度也增加了
  
  在傳統的應用程序對ActionForm Bean的訪問中我們通常都寫成如下的形式
  
  Connection conn=DriverManagergetConnection(JDBC URL );
     sql= select * from some tables ;
  PreparedStatement stmt = connprepareStatement(sql);
     ResultSet rs = stmtexecuteQuery();
  ArrayList array=new ArrayList();
  while (rsnext()) {
    AActionForm actionForm =new AActionForm ();
    actionFormsetId(rsgetString(Id));
    actionFormsetName(rsgetString(Name));     
    arrayadd(actionForm);
  }
  
  在Action 的Execute方法中我們 把這個集合用requestsetAttribute(array array)存儲起來然後在JSP頁面中我們用iterate Tag把數據循環現實出來代碼通常都是這個樣子
  
  <logic:present name= array scope=request>
  <logic:iterate name= array id= array
  type=combhskywebisGoods>
   <tr align=center>
     <td class=table>
  <bean:write name= array property=goodsid/>
  </td>
   <td class=table>
  <bean:write name= array property=goodsname/>
  </td>
    </tr>
   </logic:iterate>
  </logic:present>
  
  在Struts中對數據的訪問和顯示的寫法通常都是很固定的在VIEW層我們是沒有辦法簡化自己的代碼的在Action層其寫法通常也很固定只是做一個頁面的跳轉商業邏輯和對數據得訪問通常都是放在JavaBean中那麼在此我提出一種運用類反射的機制使應用程序對ActionForm Bean的賦值自動化即應用程序通過一個簡單的接口使用一個通用的方法就可以完成對ActionForm Bean的賦值而不必在每個使用ActionFormBean的地方都把數據庫中的值手動賦值給ActionForm Bean然後再在JSP頁面中顯示出來雖然它不能減少ActionForm Bean的數量但是它至少使應用程序對ActionForm Bean的賦值自動化了從而減少了程序出錯概率提高了程軟件開發效率
  
  類反射的概念
  關於類反射的概念在此我就不詳細介紹了它不是本文的重點IBM developerWorks網站上有大量介紹類反射概念的文章大家可以找出來參考一下其實Struts本身就大量利用了類反射的機制
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28336.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.