RoyJohnson

          生命不息,奮斗不止!
          posts - 4, comments - 9, trackbacks - 0, articles - 0

          2007年6月16日

                                                      Struts框架詳解
          struts-config.xml    Struts配置文件
          ActionServlet  控制器
          Action Class  包含事務邏輯
          ActionForm  顯示模塊數據
          ActionMapping  幫助控制器將請求映射到操作
          ActionForward  用來指示操作轉移的對象
          ActionError  用來存儲和回收錯誤
          Struts標記庫  可以減輕開發顯示層次的工作

          struts框架的優勢
          1.良好的架構和設計
          2.可重用,模塊化,擴展性好
          3.Open source

          struts-config.xml

          Struts-config.xml集中了所有頁面的導航定義。對于大型的WEB項目,通過此配置文件即可迅速把握其脈絡,這不管是對于前期的開發,還是后期的維護或升級都是大有裨益的。掌握Struts-config.xml是掌握Struts的關鍵所在。

          FormBean部分

          <struts-config>
            <!--  Form Bean Definitions -->
            <form-beans>
              <form-bean name=“testform" type="com.cjea.test.TestForm" />
            </form-beans> 

          全局轉發部分

          <!-- Global Forward Definitions -->
            <global-forwards>
              <forward   name="failure"     path="bad.jsp"/>
              <forward   name="success"     path="/good.jsp" />
            </global-forwards>

          action部分

          <action-mappings>
             <action path=“/test/test.jsp" type=“com.cjea.test.testAction" name="testform" scope="request">
                  <forward name="success" path="/test/good.jsp" />
             </action>
          <action-mappings> 
          </struts-config>

           ActionServlet

          ActionServlet 是struts框架 MVC 實現的 controller 部分,它是這一框架的核心。
          ActionServlet 創建并使用 Action、ActionForm 和 ActionForward。

          ActionServlet的基本功能

          截獲用戶的Http請求
          把這個請求映射到相應的Action類。
          創建一個ActionForm bean實例,將form請求放入formbean的實例中
          調用Action實例的perform()方法
          將ActioForm bean,Action Mapping對象,request和response對象傳給Action的perform()方法
          perform返回一個ActionForword對象,根據方法執行情況轉到相應的jsp頁面.

           

          Action Classes


          Action 類是業務邏輯的一個包裝。Action 類的用途是將 HttpServletRequest 轉換為業務邏輯。

          ActionForm

          ActionForm 維護 Web 應用程序的會話狀態。
          ActionForm 是一個抽象類,必須為每個輸入表單模型創建該類的子類。


          ActionForm的使用

          假定有一個由 HTML 表單設置的 TestActionForm。Struts 框架將執行以下操作:
          檢查 TestActionForm是否存在;如果不存在,它將創建該類的一個實例。
          Struts 將使用 HttpServletRequest 中相應的域設置 TestActionForm的狀態。
          Struts 框架在將 TestActionForm傳遞給TestAction 之前將更新它的狀態。
          struts-config.xml 文件控制 HTML 表單請求與 ActionForm 之間的映射關系。
          可將多個請求映射到 TestActionForm 。

          Struts標記庫
          Struts框架包括自定義標簽庫,它可以用 在很多方面。盡管這些庫并不要求用框 架,但使用它們會有助于程序的開發。

          Struts標記庫
          struts-bean taglib:包含在訪問bean和bean屬性時使用的tag,也包含一些消息顯示的tag。
          struts-html taglib:包含用來生成動態HTML用戶界面和窗體的tag。
          struts-logic taglib :包含的tag用來管理根據條件生成輸出文本,和其它一些用來控制的信息。
          struts-template taglib包含的tag用來定義模板機制。

          Bean Taglib
          用于定義新bean、訪問bean及其屬性的標記
          在struts-bean.tld中定義了它的標記庫描述器
          Bean Taglib主要功能
          創建和復制bean的標記
          腳本變量定義標記
          bean翻譯標記
          消息國際化標記
          Bean復制標記 (<bean:define>)
          可定義新bean,可復制現有bean,還可從現有bean復制屬性。
          定義新字符串常數
          將現有的bean復制到新定義的bean對象
          復制現有bean的屬性來創建新的bean
          <bean:define>標記屬性:
          Id 新定義的bean腳本變量名稱,必須設置
          Type 定義引入腳本變量的類
          Value 為id屬性定義的腳本變量分配一個新的對象
          <bean:define>標記屬性:
          Name 目標bean的名稱。若value屬性沒有設置,這個屬性就必須設置
          property Name屬性定義的bean的屬性名稱,用來定義新的bean
          Scope 源bean的作用域。若沒有設置,搜索范圍是從頁作用域到應用程序作用域
          toScope 目標bean的作用域。若沒有設置,默認值是頁作用域
          舉例
          定義一個bean:
          <bean:define id="test" value="this is a test"/>
          源bean在頁作用域中被拷貝到請求作用域中的另一個bean:
          <bean:define id="targetBean" name="sourceBean"
          scope="page" toScope="request"/>
          腳本變量的標記
          從多種資源中定義和生成腳本變量,這些資源包括cookie,請求參數,HTTP標頭等等。
          腳本變量的標記屬性:
          Id        腳本變量和要定義的頁作用域                 屬性的名稱
          Name    cookie/標頭/參數的名稱
          Value    如果沒有匹配的cookie或    數值,就返回這個屬性指    定的默認值

          腳本變量的標記屬性:
          multiple 如果這個屬性設置了任意一個數值,所有匹配的cookie都會被積累并存儲到一個Cookie[](一個數組)類型的bean里           若無設置,指定cookie的第一個值將作為Cookie類型的值
          舉例
          <bean:cookie id="myCookie" name="userName"/>
          腳本變量名稱是myCookie,用來創建這個屬性的cookie的名稱是userName。
          <bean:header id="myHeader" name="Accept-Language"/>
          腳本變量名稱是myHeader,請求標頭的名稱是Accept-Language.

          舉例
          <bean:parameter id="myParameter" name="myParameter">
          腳本變量名稱是myPatameter,它保存的請求參數的名稱也是myParameter
          邏輯標記
          Struts邏輯標簽庫包含的標記能夠有條件地產生輸出文本
          在對象集合中循環從而重復地產生輸出文本,以及應用程序流程控制
          它也提供了一組在JSP頁中處理流程控制的標記
          邏輯標記封裝在文件名為struts-logic.tld的標記包中
          邏輯標記庫的功能
          條件邏輯
          重復
          轉發/重定向響應
          條件邏輯標記
          第一類可以比較下列實體與一個常數的大小
          第二類在計算標記體之前判斷特定的項目是否存在
          第三類根據模板匹配的結果檢查標記體的內容
          第一類條件邏輯標記
          <equal>  如果常數與被定義的實體相等,返回true
          <notEqual> 如果常數與被定義的實體不相等,返回true
          <greaterEqual> 如果常數大于等于被定義的實體,返回true
          第一類條件邏輯標記
          <lessEqual> 如果常數小于等于被定義的實體,返回true
          <lessThan> 如果常數小于被定義的實體,返回true
          <greaterThan> 如果常數大于被定義的實體,返回true
          舉例
          判斷名為"name"的請求參數的值是否是"SomeName"。
          <logic:equal parameter="name" value="SomeName">
                  The entered name is SomeName
          </logic:equal>
          舉例
          判斷在頁的作用域中是否有一個名為"bean"的bean,它有一個prop屬性,這個屬性的值是否大于7。
          如果這個屬性能夠轉化為數值,就進行數值比較,否則就進行字符串比較。
          <logic:greaterThan name="bean" property="prop" scope="page" value="7">
          The value of bean.Prop is greater than 7
          </logic:greaterThan>
          第二類條件邏輯標記
          <logic:present>
          <logic:notPresent>
          第三類條件邏輯標記
          <logic:match>
          <logic:notMatch>
          重復標記<logic:iterate>
          它能夠根據特定集合中元素的數目對標記體的內容進行重復的檢查
          集合的類型
          java.util.Iterator
          java.util.Collection
          java.util.Map
          java.util.List
          數組
          舉例
          Strlst是一個包含字符串的List,現在要將他內部的字符串全都顯示在瀏覽器里
          <logic:iterate id="element" name="strlst"  indexId="index">
          <%=(String)element)%>
          </logic:iterate>
          轉發標記
          <logic:forward>標記能夠將響應轉發給重定向到特定的全局ActionForward上
          ActionForward的類型決定了是使用PageContext轉發響應,還是使用sendRedirect將響應進行重定向
          此標記只有一個"name"屬性,用來指定全局ActionForward的名稱,例如:
          <logic:forward name="myGlobalForward"/>
          重定向標記
          <logic:redirect>標記是一個能夠執行HTTP重定向的強大工具。
          根據指定的不同屬性,它能夠通過不同的方式實現重定向。
          它還允許開發人員指定重定向URL的查詢參數。
          HTML標記
          Struts HTML標記可以大致地分為以下幾個功能:
          顯示表單元素和輸入控件
          顯示錯誤信息
          顯示其他HTML元素
          模板標記
          Struts模板標記可以大致地分為以下幾個功能:
          插入標記<template:insert>
          放置標記<template:put>
          獲得標記<template:get>

          posted @ 2007-06-17 18:07 roy_johnson 閱讀(1426) | 評論 (2)編輯 收藏

                                                                  Struts 初始化處理流程
             根據在web.xml中配置的初始化參數,Servlet容器將決定在在容器的第一次啟動,或第一次客戶請求ActionServlet 的時機加載ActionServlet ,不管哪種方式加載,和其它Servlet一樣,ActionServlet 的init( )方法將被調用,開始初始化過程。讓我們來看看在初始化過程中將發生些什么,理解了這些,對于我們debug和擴展自己的應用更加得心應手。
             1   初始化框架的內部消息綁定,這些消息用來輸出提示,警告,和錯誤信息到日志文件中。
                 org.apache.struts.action.ActionResources用來獲取內部消息;
             2   加載web.xml中定義的不同參數,用以控制ActionServlet 的不同行為,這些參數包括 config, debug, detail, and convertNull ;
             3   加載并初始化web.xml中定義的servlet 名稱和servlet映射信息。通過初始化,框架的各種DTD被注冊,DTD用來在下一步校驗配置文件的有效性;
             4、為默認應用加載并初始化Struts配置文件,配置文件即初始化參數config指定的文件。默認配置文件被解析, 產生一個ApplicationConfig對象存于ServletContext 中。可以通過關鍵字 org.apache.struts.action.APPLICATION 從ServletContext 中獲取ApplicationConfig;
             5   Struts配置文件中指定的每一個消息資源都被加載,初始化,并存在ServletContext 的合適區域(基于每個message-resources元素的key 屬性),如果key 屬性沒有設置,則為org.apache.struts.action.MESSAGE;
             6   Struts配置文件中聲明的每一個數據源被加載并且初始化,如果沒有配置數據源,這一步跳過;
             7   加載并初始化Struts配置文件中指定的插件。每一個插件的init()方法被調用;
            8   當默認應用加載完成,init()方法判斷是否有應用模塊需要加載,如果有,重復4—7完成應用模塊的加載。

          posted @ 2007-06-16 17:56 roy_johnson 閱讀(993) | 評論 (1)編輯 收藏

           

                                                          論J2EE程序員的武功修為(轉)
           EasyJF開源團隊(www.easyjf.com) 大峽

            經常會跟一些朋友討論怎么樣才能學好Java,學到什么程度才算撐握了Java的問題。其中有一個J2EE程序員層次及武功修為的問題,有點意思。這里就把討論的內容大致整理一下發出來,大家繼續討論。

            縱觀國內的軟件行業,靠Java吃飯的程序員還真不是少,而且Java程序員是有很大優越感的,畢竟對于很多用b/s搞開發的業內朋友來說,Java技術意味著難度大、門檻高,因此相對來說Java程序員比其它的程序員(如php、.net)收入高就理所當然。然而J2EE所涉及到的范疇是很廣的,不能一個Java程序員就概括了事,而應該具有層次及水平之分,很多時候經常需要進行分類或評級,有時他評、有時自評。

            談到國內J2EE領域的程序員層次水平,當前流行的稱謂及評級不外乎就下面幾種:
            第一種是精通掌握記事本、Dreamweaver等工具來寫JSP+JavaBean數據庫應用的是J2EE程序員;
            第二種是用JBuilder、Eclipse等專用Java開發工具寫著一堆一堆過程式Java Bean,而且還能精通Struts+Spring+Hibernate等應用框架的高級J2EE程序員;
            第三種是用Together建模,然后生成一堆Java接口或代碼,開口閉口都是設計模式的資深Java程序同及高級系統分析、構架師;
            最后還有一種是整天在BlogJava或JavaEye上談經論道的大師們,這些大師技術水平難以觸摸,武功門派也各具特色,不好歸類,有時不好稱為程序員(因為有的時候他們甚至不寫或者寫不出程序),但又做著與J2EE程序員密切相關的事情,我們暫且就歸為“牛牛”或“大師”。

            稱謂畢竟只是稱謂,帶有點主觀或者功利色彩,有時很難鑒定一個人應該屬于什么,因此,我們再從純技術的角度,也即武功修為的角度,作了一個簡單的分析及歸類,把2EE領域程序員大致分成以下幾個層次,可以作為大家自評的一個參考標準:

            第一個層次:精通掌握Java語法、能調試基本的程序錯誤,精通掌握JSP+Java Bean寫一些N年前ASP、PHP翻版的Java Web應用程序(如論壇、網站新聞發布系統、OA、網上商城等),精通JDBC使用、精通SQL語句、精通XML等。

            第二個層次:掌握設計模式原理及應用,掌握基于OO的分析及設計方法,并能精通熟練使用幾種Java專業設計及開發工具,精通掌握流行的J2EE框架如Hibernate、EJB、Webwork、Spring的原理及應用,精通J2EE中一兩個組成部分(如Servlet、EJB等)的工作原理及細節。

            第三個層次:少林的高僧有兩種,禪僧及武僧。J2EE程序員的第三個層次也同樣有禪、武兩個分支,這里我們重點分析一下:

            第一個分支屬于走的禪僧線路。在練完第二個層次中的各種武功基礎上,結合實際項目中的千奇百怪的用戶需求,游刃有余的選擇適合的技術方案為客戶解決問題,并形成自己的一套解決方案。達到這一個層次的J2EE程序員已經不在乎使用任何工具、任何框架了,而是根據不同的對手,使用不同的武器或招式來應對。好比小李飛刀一樣,只有達到了“手中無刀、心中有刀”的境界,才能達到“出手一刀,例不虛發”的效果。這一層次的武功屬于一個熟練度問題,刀練得多了、遇到的對手多了,再加上前面的武功修為,就算做不到例不虛發,也可達到十發九中。

            第二個分支屬于走的武僧線路,在撐握熟悉第一二個層次中涉及到的內容后,進一步專研并撐握J2EE底層開發,J2EE規范制訂、規范實現、Java虛擬機的工作原理、各種常見的J2EE服務器內核工作機制、內存管理、進程機制、源代碼等。因為涉及的很多東西都比較抽象,代碼也很多,練這一層的武功需要有很好的資質及耐性、并具還得有一定的環境及條件。好比神雕大俠楊過拿起“玄鐵劍”,并練成“暗然銷魂掌”的成長過程,需要前面的武功修為作基礎,更需那只威力神武神雕的幫助指點及他處處為民、懲奸除惡的俠之心態。
            
            胡侃了這么多,現在來根據自己情況測算一下自己的份量,結果如下:
            第一層 練到8成;
            第二層 練到5成;
            第三層 準備走禪僧線路,當前算是練到1成;
            
            唉,后面的武功提升越來越難,真不知道要到何年何月才能達到10成啊。你的武功練到哪一個層次了,不防亮出來大家切磋切磋。嘿嘿,要是有一天,咱們中國的Java程序員人手一把“玄鐵劍”、人人會使“暗然銷魂掌”,那還了得!汗...,寫著寫著居然做起白日夢了,不好意思,就此打住。
            
            手中雞蛋先別扔,還要打個廣告:本人剛開始涉足Java開源,目前在EasyJF開源團隊中負責EasyJWeb(官網www.easyjf.com)項目,歡迎大家前來指導。

          作者Blog:http://blog.csdn.net/psyl/

          posted @ 2007-06-16 16:37 roy_johnson 閱讀(362) | 評論 (2)編輯 收藏

                很多新手都不知道如何開始學習JSP,本人就個人學習的一些經歷在這里簡單得談一下。
                首先,你得對WEB應用開發感興趣,因為興趣是最好的老師,更是你學習前進的動力,如果只是抱這學學看的態度,本人建議不要開始學。那樣既浪費了時間又浪費了精力。有了興趣,一切就好說了,學得多快那就看你個人的能力了。
                從HTML開始下手,一星期即可搞定HTML。因為開發WEB應用要求你能看懂網頁代碼,然后是Java語言基礎,Java語言學習的時間可能要長些。等前面這兩項熟悉了,就要開始學習JavaScript和CSS,當然作為后臺程序員后面這兩項了解即可。
               再接下來就要學習一下JDBC的技術了。數據庫建議先學習Mysql,然后再學習Mssql,Oracle,最后還要熟悉WEB服務器,初學者建議學習Tomcat,等這些都熟悉了。開始嘗試著開發幾個系統,比如信息管理系統,聊天室,論壇等。
               再往后就要學習Struts,Hibernate,Spring等高級技術了。
               今后我會逐步介紹以上技術,最后還會教大家開發一個基于Struts+Hibernate+Spring的實例。大家希望看到那方面的知識或有何好的建議。可以給我留言,或發表在評論里。

          posted @ 2007-06-16 11:48 roy_johnson 閱讀(755) | 評論 (4)編輯 收藏

          主站蜘蛛池模板: 石河子市| 湛江市| 建平县| 稷山县| 荆州市| 安平县| 临汾市| 太湖县| 威海市| 德清县| 本溪市| 辽宁省| 施甸县| 洛扎县| 石城县| 五大连池市| 临西县| 藁城市| 崇左市| 临颍县| 定兴县| 琼结县| 普兰店市| 绵竹市| 山西省| 赣榆县| 周口市| 吴旗县| 吉木萨尔县| 涟水县| 桦南县| 贺州市| 湖北省| 独山县| 施秉县| 雅安市| 平昌县| 龙口市| 大连市| 巴里| 五台县|