struts1的工作流程

          Struts在Tomcat中的安裝配置及工作流程

          1.準備工作
                安裝JDK及Tomcat,并分別設置環(huán)境變量:JAVA_HOME、CLASSPATH、COMCAT_HOME,并確保Tomcat已正常工作。本文以jdk1.5和Tomcat5.5.12為環(huán)境介紹Struts在Tomcat中的安裝及工作流程。
          2.安裝Struts(通過二進制發(fā)布包安裝)
           2.1下載Struts二進制發(fā)布包(http://struts.apache.org/downloads.html)
           2.2解壓下載的二進制發(fā)布包,并將解壓目錄下lib目錄中的所有.jar文檔復制到TOMCAT_HOME\web應用\WEB_INF\lib目錄下,即只有些Web應用使用Struts構架。
          另:如果多個應該要同時使用Struts構架,則應該將解壓目錄下lib目錄中的所有.jar文檔復制到TOMCAT_HOME\common\lib目錄下。
           2.3將對應lib目錄下的struts.jar文件路徑添加到CLASSPATH環(huán)境變量中。
          通過以上配置Web應用就可以使用Struts構架進行項目開發(fā)了。
          另外還可以通過Struts源碼進行安裝。
          3.Struts構架的構成
           整個Struts應用是一個分工明確的有機整體,在控制器的統(tǒng)一指揮下,各個組件各負其責,協(xié)調(diào)工作,是MVC設計模式的具體實現(xiàn)。MVC模式分為:模型(Model)、視圖(View)、控制器(Controller)三部分。
          3.1模型(Model):業(yè)務邏輯層,用于實現(xiàn)具體的業(yè)務邏輯。此部分一般由JavaBean或EJB(企業(yè)級JavaBean)組成。Struts中的模型主要分為兩個部分:
          1.系統(tǒng)的內(nèi)部狀態(tài)
          2.可以改變狀態(tài)的操作(事務邏輯)
          內(nèi)部狀態(tài)通常由一組ActinForm JavaBean表示。根據(jù)設計或應用程序復雜度的不同,這些Bean可以是自包含的并具有持續(xù)的狀態(tài),或只在需要時才獲得數(shù)據(jù)(從某個數(shù)據(jù)庫)。
          大型應用程序通常在方法內(nèi)部封裝事務邏輯(操作),這些方法可以被擁有狀態(tài)信息的bean調(diào)用。比如購物車bean,它擁有用戶購買商品的信息,可能還有checkOut()方法用來檢查用戶的信用卡,并向倉庫發(fā)定貨信息。
          小型程序中,操作可能會被內(nèi)嵌在Action類,它是struts框架中控制器角色的一部分。當邏輯簡單時這個方法很適合。
          注:建議用戶將事務邏輯(要做什么)與Action類所扮演的角色(決定做什么)分開。
          3.2視圖(View):表示層,與用戶直接交互的視圖。此部分一般通過JSP頁面來實現(xiàn),另外Struts還提供了豐富的自定義標識庫,它與模型部分有效交互。
          3.3控制器(Controller):控制層,是整個應用的控制中心,用于控制整個業(yè)務流程(Flow Control),使用Model與View協(xié)同工作。控制器通過專門的Servlet來實現(xiàn)的,該Servlet是一個Struts API中提供的ActionServlet類型的實例。
          3.4 Struts框架的組成部分
          Struts-config.xml    Struts配置文件
          ActionServlet      控制器
          Action Class      包含事務邏輯
          ActionForm      顯示模塊數(shù)據(jù)
          ActionMapping     幫助控制器將請求映射到操作
          ActionForward     用來指示操作轉(zhuǎn)移的對象
          ActionError         用來存儲和回收錯誤
          Struts標記庫    可以減輕開發(fā)顯示層的工作
          3.5主要的配置文件
           web.xml(TOMCAT_HOME/Web應用/WEB_INF),Web.xml是web應用的通過配置文件,主要完成ActionServlet的配置、配置首頁的設置等。
          Struts-config.xml(TOMCAT_HOME/Web應用/WEB_INF),struts-config.xml是整個Struts構架的核心,用來組裝各個組件,是一個控制中心。
          4.Struts構架的工作流程(如圖所示)
          初學Struts時,可能難以理解其工作流程,最簡單的理解可以把Struts看作是一個“頁面導航”構架,在struts_config.xml來規(guī)化應該程序的各個部分,Struts通過讀取該配置文件來組織應用程序。

           

          5.流程說明
          首先,服務器接收到客戶瀏覽器請求后,對請求進行過濾,若屬于Struts的處理范圍則自動提交給Struts控制器進行處理,否則按傳統(tǒng)方式作出響應。
          注:過濾標準依據(jù)web.xml中Servlet的配置信息:
          <servlet>
          <servlet-name>actionServlet</servlet-name>
          <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
          </servlet>
          <servlet-mapping>
          <servlet-name>actionServlet</servlet-name>
          <url-pattern>*.do</url-pattern>
          </servlet-mapping>
          以上信息配置了名為actionServlet的控制器Servlet,并說明凡是以.do(也可約定為其它)結(jié)尾的頁面請求都由此Servlet來處理,實現(xiàn)此Servlet的類是org.apache.struts.action.ActionServlet.(Struts API中定義的組件類)
          其次,控制器servlet開始工作,讀取struts_config.xml中的配置信息
          注:Struts_config.xml配置如下:
          <?xml version="1.0" encoding="UTF-8"?>
          <struts-config>
          <form-beans>
          <form-bean name="formBeanName" type=" package.ClassNameForm "/>
          </form-beans>
          <global-forwards>
          <forward name="failed" path="/error.jsp"/>
          <forward name="successed" path="/right.jsp"/>
          </global-forwards>
          <action-mappings>
          <action path="/login" type ="classmate.LoginAction" name ="formBeanName" scope="request" input ="/login.jsp"/>
          <action path="/regist" forward="/regist.jsp"/>
          </action-mappings>
          </struts-config>
          1. 使用指定的JavaBean來自動接收來自客戶提交的表單數(shù)據(jù),聲明該JavaBean的代碼對應于struts_config.xml中的:
          <form-beans>
          <form-bean name="formBeanName" type="package.ClassNameForm"/>
          </form-beans>
           Name:該bean的名字
           Type:實現(xiàn)該bean的類
          為實現(xiàn)自動填充功能,該Bean(package.ClassNameForm類)必須是org.apache.struts.action.ActionForm類(即其子類)的對象。
          2. Servlet控制器讀取Http分發(fā)規(guī)則(即Http請求與處理此請求的類的對應關系)
          <action-mappings>
          <action path="/login" type ="package.LoginAction" name =" formBeanName " scope="request" input ="/login.jsp"/>
          <action path="/regist" forward="/regist.jsp"/>
          </action-mappings>
          說明:
          path:和本Action對應的請求頁面的相對路徑(不包括后.do)。
          type:處理請求的Action Bean類(完整路徑)。
          name:用到的ActionForm Bean的名字(<form-bean>元素中聲明的)
          scope:ActionForm Bean的作用域(默認為session)。
          input:表單驗證出錯時的處理頁面。
          forward:指定目標響應頁面(與<forward>元素不同,只有當沒有指定type屬性時本屬性才生效)。
          另:還可以在<action>中配置<forward>元素,即此Action處理后反回的目標頁面
          以上代碼使用<action-mapping>元素的子元素<action>來約定控制器(ActionSevlet對象)分發(fā)HTTP請求的規(guī)則:
          1. 若頁面URI是login.do,則使用formBeanName來自動接收來自客戶請求表單中的數(shù)據(jù)(該formBeanName中屬性要與用戶提交表單中的屬性名稱對應該,否則將無法接收),并將該請求分給一個package.LoginAction類型的實例來處理。該實例起到事件監(jiān)聽器的作用,類型必須是org.apache.struts.action.Action的子類。
          注:控制器(ActionServlet)對象與JavaBean的情形類似,第一次運行時會自動實例化一個對象。
          2. 若頁面URI是regist.do,則直接轉(zhuǎn)向/regist.jsp頁面作出響應。
          3. Action對象的功能
          Action對象接收到發(fā)送來的Http請求和由ActionServlet對象已填充過的表單對象,然后調(diào)用其execute()方法進行處理,此方法有四個參數(shù):
          ActionMapping mapping:映射到struts_config.xml中的相關配置信息。
          ActionForm form:ActionServlet對象填充過的表單(ActionForm Bean)的一個引用,可以從對象中獲取表單數(shù)據(jù)。
          HttpServletRequest request:來自客戶端的Http請求信息。
          HttpServletResponse response:響應客戶端的Http信息。
          執(zhí)行完成后,返回給控制器ActionServlet對象一個封裝了目標頁面的ActionForward對象,此時,mapping對象調(diào)用findForward()方法 到struts_config.xml中的查找<forward>元素中映射信息,<forward>元素的定義如下:
          <global-forwards>
          <forward name="name1" path="/page1.jsp"/>
          <forward name="name2" path="/page2.jsp"/>
          </global-forwards>
          Execute方法中的findForward()方法中的參數(shù)對應forward元素中的name屬性,找到后將導航到相應的頁面。
          注:<forward>可以在struts_config.xml中兩個地方定義:一個是<global-forwards>元素中,此時在整個應用中都有關效,可理解為編程語言中的全局變量;另一個是<action>元素中,此時作用域為本Action。 findForward()方法查找順序為<action>?<global_forwards>
          6.Struts構架工作流程總結(jié)
          ActionSerlvet接收客戶Http請求,使用ActionForm Bean自動填充客戶送來的表單數(shù)據(jù)到ActionForm Bean對象中?根據(jù)配置信息(struts_config.xml)將請求分發(fā)給相應的Action對象?Action對象調(diào)用execute()方法處理請求(根據(jù)JavaBean和ActionForm取得業(yè)務邏輯和表單數(shù)據(jù)),并反回ActionForward對象給ActionSerlvet對象?根據(jù)ActionForward對象的信息(目標頁面),ActionServlet再次將Http請求導航到目標頁面,并發(fā)送到客戶端。
          以上是struts在Tomcat中的安裝與基本配置,在以后的系列文章中將詳細介紹其核心組件及運行機制。

           

          posted on 2011-02-23 11:18 小羅 閱讀(1098) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          <2011年2月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272812345
          6789101112

          導航

          統(tǒng)計

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          Web Framework

          常上的技術網(wǎng)站

          查找資料的java網(wǎng)站

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 会东县| 清苑县| 鄱阳县| 山阴县| 津市市| 沙坪坝区| 杨浦区| 五常市| 宁晋县| 陵水| 青州市| 辽阳市| 苗栗市| 剑阁县| 怀宁县| 天水市| 上蔡县| 台北县| 根河市| 潼南县| 永登县| 太仓市| 邹城市| 崇阳县| 叶城县| 金平| 运城市| 西乌珠穆沁旗| 镇雄县| 白朗县| 石棉县| 鸡泽县| 永宁县| 千阳县| 武鸣县| 遂川县| 恭城| 慈利县| 大名县| 南华县| 东海县|