麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

Jakarta Struts簡介(二)

2019-11-18 12:56:26
字體:
來源:轉載
供稿:網友

  在本系列的的第一篇中,我們大致瀏覽了Struts框架,框架的功能以及框架中應用到的各個模塊。而本文,我將利用Struts 1.0為大家演示建立一個簡單的應用;在第三篇文章中將介紹如何利用Struts的標簽在jsp中訪問applicationResource文件中的信息。
  我們在這篇文章將會一步一步的講解Struts的應用,以這樣的形式打開Struts一道道神秘的大門,通過這樣的過程,相信也能激起你在應用開發中如何應用Struts的靈感。假如你對Struts的一些術語不是很清楚的話,可以參考本系列前一篇對Struts作大體介紹的文章。
  再次重復一遍,本文需要讀者有如下幾方面的知識和經驗:JSP,Servlets,自定義標簽庫(Custom Tag libraries)和xml。此外,在本文中,我還會用到Jakarta項目組其他一些好東東,比如Tomcathttp://jakarta.apache.org/tomcat/index.Html(實現java Servlet和JSP官方標準的Servlet容器,通俗的講就是一個JSP的Web Server啦)和Anthttp://jakarta.apache.org/ant/index.html(基于Java的自動編譯發布工具,這可是好東東啊)。
  作為一名一直使用前沿技術開發了諸多應用的技術人員,我一直堅信把握新技術,理解該技術開發的邏輯是至關重要的。但這往往就是陷住我們學習步伐的泥潭,正因如此,我打算將利用Struts開發的一套完整流程作為我們教學的案例。該流程的這個案例可謂“麻雀雖小、五臟據全”,你完全可以將這個流程應用到你手頭那些復雜龐大的項目中,至少在我們的大項目中應用這個流程效果不錯。
  有開發復雜商業應用的開發人員都知道,客戶的需求總是在不停變幻,所以假如有一套規范的開發流程來遵循,當客戶提出新的需求時,我們至少可以明確哪些“無理”需求其實是合理可行的。好,接下里我將在我的這個例子中向各位展示和應用整個流程。
  本文中的示例代碼是StrutsSample應用中的一部分,包括build.xml的完整代碼可以到此處http://www.onjava.com/onjava/2001/10/31/examples/StrutsPartII.jar下載。
  
  Struts開發過程
  從Struts發布的版本號可以看出,Struts是個新玩意,她有好幾個部分組成,明智的你假如搞清楚了何時該開發完成合適的部分,那將會更好的利用我們的開發時間。從我所開發的幾個利用Struts應用中,我大致總結出如下這個比較有效的開發步驟:
  1,明確應用需求;
  2,由用戶輸入和獲取數據的角度出發,明確和設計出每一個用戶界面;
  3,確定用戶界面的進入路徑;
  4,由應用邏輯信息確定動作映射表(ActionMapping);
  5,由設計完成的用戶界面開發其所用到的類和應用函數;
  6,由用戶界面中的數據信息開發ActionForm和相應的數據校驗方法;
  7,ActionMapping中將會被調用相應的Action或轉到相應的JSP頁面,這一步我們先開發這些Action;
  8,開發商業應用邏輯,就是相應的JavaBean、EJB或其他東東;
  9,開發由ActionMapping定義的系統工作流程完成對應的JSP頁面;
  10,完成系統配置文件:struts-config.xml和web.xml;
  11,編譯/測試/發布。
  
  明確應用需求
  開發任何應用系統的第一步就是收集用戶需求信息。不管一個用戶邏輯初看上去多么合理,但總有可能在開發時才發現它比看上去要難得多。所以,建議擬一份明確的用戶需求列表,這不只是出于開發的目的,還能通過該表分析用戶需求以確定哪些地方可能需要花更多的精力。
  在我們這個StrutsSample項目中,應用需求就是:
  作為一個展示Struts框架應用的完整例子,本示例完成的功能是用戶登錄。目的只為明確Struts的應用,本示例將不會涉及到一般復雜應用系統中可能應用的安全、數據庫、EJB開發等等相關技術。
  
  設計用戶界面
  這個應用中,包括如下三個用戶界面:
  1)登錄界面,用于用戶名和密碼輸入;
  2)當登錄用戶為合法用戶時的歡迎界面;
  3)當登錄失敗時的錯誤提示界面。
  
  確定用戶界面的進入路徑
  1)登錄界面作為這個應用的默認頁面;
  2)歡迎界面只有當成功登錄后才能進入;
  3)任何可能發生錯誤的頁面能可以進入錯誤提示界面;
  
  由應用邏輯信息確定ActionMapping
  ActionMapping為整個應用確定的“線路圖”,在配置文件struts-config.xml對ActionMapping進行定義,通過轉發請求(forward)來理順應用的處理流程,確定應用中每個用戶請求對應的動作。
  通常我們在開發過程中就逐步確定了ActionMapping所需的信息,開發代碼的過程就是在由草稿開始一步步完善struts-config.xml的過程。當Action類處理完用戶請求后,其返回的的forward就是在ActionMapping中定義的一個。一個Action返回的forward完全有多種可能,盡管一個Action一般只定義其相關的幾個forward。那么,假如有多個Action都可能返回的同一個forward,那么就可以將其定義為全局轉發(global forward)。這類似于C中的頭文件中全局變量,假如在struts-config.xml描述信息中,某一個forward并不是在當前Action描述中定義的而是全局定義的,那么這個全局的將起作用,同樣,一個Action中當前定義的forward將覆蓋全局定義。在我們所給的這個簡單實例中,我們定義了全局forward――“error”,當某Action返回的forward是“error”這個映射,那么Errorpage.jsp頁面將會顯示給用戶,盡管當前Action并沒有對其定義。
  我們繼續不斷的開發,項目日漸完善,項目相關的配置文件也會越來越具體。在下面的例子中,我們將以StrutsSample中用到的struts-confug.xml文件為例,學習global forward和一個Action中相關映射的定義。下面定義了一個名為“login”的Action,其為com.oreilly.actions.LoginAction的實例,當Action處理用戶登錄成功后將一個名為"sUCcess"的forward返回,用戶也就會看到Welcome.jsp頁面,假如登錄失敗,Action將返回對應的forward以再顯示Login.jsp給用戶,而假如處理過程中發生其他錯誤,Action將返回全局定義的forward――“error”,用戶也就會看到錯誤提示頁面Errorpage.jsp。
  
  
  
  
  
  

  
  
  
  元素的相關屬性 -->
    以下只列出常用屬性,其他請參考org.apache.struts.action.ActionMapping的相關文檔
  
  path - 當前Action對應的用戶請求URI路徑
  
  type - 實現當前Action的Java class的完整名字
  
  name - 當前Action中用到的ActionForm的名字,其具體信息在配置文件其他地方另有具體定義
  
  unknown - 假如將該屬性設置為true,那么就是聲明這個Action將處理整個應用中所有未找到相應處理Action的請求,當然,一個應用系統中也只會有一個Action的unknown屬性可以設為true
  
  scope - Action中所用到的ActionForm的生存期,可以為“request”或“session”,隨著生存期的設置,該Action也會在相應的時間被創建
  
  input - 該Action中相關ActionForm獲取用戶輸入的輸入頁面,當將ActionForm設為自動驗證輸入數據,發現不合法數據返回錯誤時,將返回該頁面
  
  validate - 假如本屬性為true則在Action動作之前其對應的ActionForm的validate方法會自動被調用,一般用以驗證用戶輸入的數據
  
  forward 元素 - 定義當前Action相關的ActionForward
  -->
  
  
  
  
    type="com.oreilly.actions.LoginAction"
  name="loginForm"
  scope="request"
  input="/Login.jsp">
  
  
  
  
  
  在前一篇文章中,我們曾說過,struts-config.xml就是MVC模式的的Controller。在確定struts-config.xml中的配置信息時,應該多花些時間精力在上面,以保證每一個Action定義及其相關定義是符合應用的需求的。假如在項目開始沒有具體的設計其定義,當將所有代碼和配置集成到一起的時候,我們將不可避免的將各部分的代碼和配置完全重新組織一遍。
  我們當前的例子StrusSample因為只是處理用戶登錄,所以只需要一個Action。一個應用系統中所要用到的Action的多少完全依應用的大小而定。一旦整套Action的映射完全的定義出來后,我們就可以一個一個開發其具體實現的Action和ActionForm類,并逐漸將完成的部分一點一點集成起來。
  
  由設計完成的用戶界面開發其所用到的類和應用函數
  所有ActionForm的實現類都是org.apache.struts.ActionForm的子類。一個ActionForm是與頁面上的輸入表單相關聯的,而且ActionForm的實現還可以對用戶輸入數據的合法性進行驗證。作為一個Java Bean,ActionForm有Set和Get方法,當一個頁面中表單被提交時,系統將自動調用Set方法將數據放入ActionForm中,而Get方法將為在Action中操作這些數據所提供。一般來說,處理表單中的所有數據,并進行合法性驗證都完全可以交由ActionForm來完成。在應用中,就我個人而言,傾向于將ActionForm和Action劃分到不同的包中,因為當一個頁面中要用到幾對ActionFrom和Action時,都放在一個包內會混淆的。下面的代碼,就是實例中登錄頁面用到的ActionForm的代碼。
  <

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产精品免费视频观看 | 99亚洲伊人久久精品影院红桃 | 中文黄色一级片 | 色吧综合网 | 免费黄色在线 | 视屏一区| 在线成人精品视频 | 91在线视频福利 | 92精品国产自产在线 | 日本在线国产 | 欧美精品 | 九九热精品免费视频 | 欧美性久久久 | 黄色片网站免费观看 | 男人午夜小视频 | 国产精品久久久久久久久久久久午夜 | 亚洲成人免费网站 | 欧美成人理论片乱 | 久久99久久99免费视频 | www亚洲 | 失禁高潮抽搐喷水h | 免费观看视频在线观看 | 亚洲日本韩国在线观看 | 午夜小视频免费观看 | 欧美成人精品欧美一级乱黄 | 黄色片免费看网站 | 亚洲国产视频在线 | 大逼逼影院 | 欧美在线观看视频网站 | 国产黄色一区二区 | 精品一区二区久久久久久久网精 | 亚洲欧美日韩中文在线 | 黄网站在线免费 | 亚洲第九十九页 | 欧洲成人综合网 | 久久久久久亚洲国产精品 | 一区二区三区欧美在线观看 | 粉嫩粉嫩一区二区三区在线播放 | 欧美精品一区二区三区久久久 | 性欧美一区 | 色人阁五月天 |