国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-18 15:55:15
字體:
來源:轉載
供稿:網友

  一、Struts中引入ActionForm類的意義與缺陷:
  在Struts應用程序中,ActionForm是一個很重要的概念,它的主要功能就是為Action的操作提供與客戶表單相映射的數據(假如在客戶指定的情況下,還包括對數據進行校驗)。Action根據業務邏輯的需要,對數據狀態進行修改,在改變系統狀態后,ActionForm則自動的回寫新的數據狀態并保持。程序員對jsp與ActionForm Bean的對應關系,通常感到很迷惑,JSP與ActionForm到底是1:1,還是N:1,對此,Struts本身對此并沒有提出自己的觀點。無論是一對一,還是多對一,Struts本身并不關心,它都能很好得工作。Struts在它的開發文檔中指出,對于較小規模的開發,開發人員可以根據自己的需要,每個模塊只寫一個ActionForm Bean,甚至整個應用程序只寫一個ActionForm Bean.當然,Struts也不反對每個ActionForm Bean只對應一個JSP,他們之間的對應關系,由開發人員自己決定。
  
  在我看來,正如Entity EJB對J2EE的重大貢獻一樣,Entity EJB使得程序員對二維關系數據庫的存取對象化了,程序員可以使用Set 或者Get等面向對象的方法來操縱關系數據庫的數據,而ActionForm也使得程序員對網頁的數據存取奇跡般的對象化了,程序員同樣也可以使用Set 或者Get等面向對象的方法存取網頁上的數據,這是一個開發模式方式上的重大轉變。基于此,我個人認為ActionForm與JSP即VIEW層的關系最好是一對一的關系,這樣,在理解上會更清楚一些。但是,這樣也會帶來一個很現實的問題,在一個應用程序中,也許有非常多得JSP頁面,假如每個ActionForm 都只對應一個JSP頁面,那么系統的java代碼就會急劇膨脹起來,而且,每個ActionForm都是只有很簡單的Set或者Get方法存取數據,那么,如何簡化Struts應用程序的開發呢?
  
  在Struts1.1 中,Struts引入了DynaActionForm和Dyna Bean,試圖解決這個問題,在我看來,DynaActionForm的引入,破壞了對網頁存取對象化的概念,使開發人員重新回到了使用HashTable、Map、Collection、ArrayList等集合對象來實現對數據進行存取的老路上來。雖然應用程序的靈活性大大增加了,但是代碼的可讀性也大大降低了,開發人員之間的交流難度也增加了。
  
  在傳統的應用程序對ActionForm Bean的訪問中,我們通常都寫成如下的形式:
  
  Connection conn=DriverManager.getConnection("JDBC URL ");
     sql=" select * from some tables ";
  PReparedStatement stmt = conn.prepareStatement(sql);
     ResultSet rs = stmt.executeQuery();
  ArrayList array=new ArrayList();
  while (rs.next()) {
    AActionForm actionForm =new AActionForm ();
    actionForm.setId(rs.getString("Id"));
    actionForm.setName(rs.getString("Name"));     
    array.add(actionForm);
  }
  
  在Action 的Execute方法中,我們 把這個集合用request.setAttribute("array", array)存儲起來,然后在JSP頁面中,我們用iterate Tag把數據循環現實出來。代碼通常都是這個樣子:
  
  <logic:present name=" array " scope="request">
  <logic:iterate name=" array " id=" array "
  type="com.bhsky.webis.Goods">
   <tr align="center">
     <td class="table2">
  <bean:write name=" array " property="goodsid"/>
  </td>
   <td class="table2">
  <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本身就大量利用了類反射的機制。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌江| 神木县| 枣庄市| 汉阴县| 茌平县| 柳州市| 获嘉县| 广德县| 兰州市| 明水县| 灵寿县| 潜山县| 合肥市| 内黄县| 平昌县| 亳州市| 遂川县| 康马县| 威宁| 茌平县| 临清市| 永嘉县| 巴林右旗| 淮阳县| 霍林郭勒市| 布尔津县| 宝坻区| 盈江县| 南皮县| 白河县| 赣榆县| 五家渠市| 高陵县| 石城县| 铜梁县| 通渭县| 兴海县| 台南县| 克拉玛依市| 怀柔区| 洮南市|