亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

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的代碼。
  <

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美疯狂性受xxxxx另类| 亚洲精品国产成人| 欧美激情图片区| 午夜美女久久久久爽久久| 中文一区二区视频| 国产亚洲欧美视频| 色综合影院在线| 亚洲自拍欧美色图| 欧美电影在线观看完整版| 国产精品视频色| 日本一区二区不卡| 欧美国产极速在线| 欧美午夜激情视频| 久久亚洲国产精品成人av秋霞| 日韩精品福利在线| 日本电影亚洲天堂| 亚洲精品久久久久久久久| 亚洲美女福利视频网站| 亚洲视频第一页| 国产午夜精品一区理论片飘花| 成人有码在线视频| 97在线免费视频| 国模视频一区二区| 亚洲精品视频在线播放| 欧美乱人伦中文字幕在线| 国产日韩欧美日韩大片| 97超级碰在线看视频免费在线看| 在线视频欧美日韩精品| 欧美成人亚洲成人日韩成人| 91免费视频网站| 日韩成人xxxx| 欧美性猛交xxxx乱大交极品| 日本精品久久久久影院| www.99久久热国产日韩欧美.com| 精品亚洲国产视频| 91日本视频在线| 欧美激情xxxxx| 久久伊人91精品综合网站| 性亚洲最疯狂xxxx高清| 欧美成人精品不卡视频在线观看| 欧美日本啪啪无遮挡网站| 久久精品国产v日韩v亚洲| 久久久精品久久久久| 国产成人a亚洲精品| 久久免费视频这里只有精品| 伊人一区二区三区久久精品| 久久久综合免费视频| 精品亚洲国产成av人片传媒| 国产精品美女呻吟| 成人免费午夜电影| 欧美日韩一区二区免费在线观看| 欧美电影免费观看电视剧大全| 久久久成人av| 九九热r在线视频精品| 亚洲人成在线播放| 久色乳综合思思在线视频| 久久国产精品久久久久久| 亚洲精品中文字| 久久精品视频99| 亚洲色图日韩av| 精品一区二区三区电影| 成人精品视频99在线观看免费| 97婷婷涩涩精品一区| 欧美成人亚洲成人| 成人av番号网| 中文字幕av一区二区| 国自产精品手机在线观看视频| 97av在线视频| 欧美亚洲另类在线| 亚洲精品国产免费| 午夜精品久久久久久久99黑人| 国产精品久久久亚洲| 97国产真实伦对白精彩视频8| 亚洲精品99999| 91精品中国老女人| 91久久国产婷婷一区二区| 欧美日韩一区二区免费在线观看| 国内精品久久久久| 国产精品va在线播放| 成人福利免费观看| 亚洲成人免费网站| 精品国产91乱高清在线观看| 亚洲片在线资源| 日韩一区av在线| 欧美另类69精品久久久久9999| 国产午夜精品全部视频在线播放| 欧美日韩激情视频8区| 日韩成人激情在线| 亚洲欧美日韩网| 国产一区二区三区中文| 欧美人与物videos| 国产精品欧美激情| 国产福利精品在线| 欧美丰满少妇xxxxx做受| 激情成人中文字幕| 欧美日韩亚洲精品一区二区三区| 久久久精品国产亚洲| 在线观看中文字幕亚洲| 成人在线一区二区| 欧洲亚洲在线视频| 亚洲综合色av| 国产精品久久久久高潮| 国产精品一二区| 国产成人精品免高潮在线观看| 亚洲精品日韩在线| 亚洲三级黄色在线观看| 欧美日本中文字幕| 国色天香2019中文字幕在线观看| 91免费看片在线| 91精品国产乱码久久久久久久久| 国产区精品在线观看| 日韩电影免费观看在线| 欧美福利视频在线观看| 亚洲美女免费精品视频在线观看| 久久国产精品久久久久久久久久| 亚洲老司机av| 欧美日韩在线免费观看| 亚洲欧洲视频在线| 成人h片在线播放免费网站| 欧美性做爰毛片| 亚洲男人天堂视频| 中文字幕亚洲欧美在线| 午夜精品福利电影| 国产噜噜噜噜噜久久久久久久久| 久久久精品日本| 一本一本久久a久久精品牛牛影视| 久久全球大尺度高清视频| 国产精品视频播放| 中文字幕日韩在线视频| 日韩av第一页| 91福利视频网| 精品久久久久久中文字幕一区奶水| 欧美色道久久88综合亚洲精品| 91午夜理伦私人影院| **欧美日韩vr在线| 欧美激情综合亚洲一二区| 国产午夜精品全部视频在线播放| 97国产真实伦对白精彩视频8| 黄色一区二区三区| 久久青草精品视频免费观看| 亚洲综合中文字幕68页| 日韩中文字幕免费视频| 福利视频一区二区| 色综合视频一区中文字幕| 日韩中文在线观看| 国内精品久久久久| 91精品国产沙发| 久久久成人av| 日韩欧美在线视频日韩欧美在线视频| 国内精品国产三级国产在线专| 在线观看国产精品淫| 黄色精品在线看| 久久久久久久久久国产| www.日韩系列| 亚洲国产小视频在线观看| 国产精品久久久久久久久影视| 亚洲精品wwwww| 欧美一级成年大片在线观看| 精品久久中文字幕久久av| 日韩视频中文字幕| 欧美日韩国内自拍| 欧洲精品久久久| 国产精品27p| 欧美电影在线免费观看网站|