<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    千里馬

    天馬行空

    Struts1 原理及配置講解附源碼

        最近要看公司網站源碼,源碼都是用struts1寫的,我們平時用的都是struts2,所以的對struts1不是很熟悉。我也就是剛開始接觸struts的時候對struts1有個簡單的學習(搭建一個簡單的項目,然后連接數據庫做一些增刪改查的操作還可以,但是具體的原理讓我說我也說不上來),因此今天抽一部分時間把struts1的概念了解下和自己動手搭建一個項目使用struts1(就是一個簡單的用戶登錄,居然可以跑起來,瞬間感覺對用struts1做一些簡單功能還是可以做成的)。廢話不說了....

       首先介紹下struts1工作原理:

      1.初始化:struts框架的總控制器ActionServlet是一個Servlet,它在web.xml中配置成自動啟動的

     Servlet,在啟動時總控制器會讀取配置文件(struts-config.xml)的配置信息,為struts

     中不同的模塊初始化相應的對象。(面向對象思想)

     2.發送請求:用戶提交表單或通過URL向WEB服務器提交請求,請求的數據用HTTP協議傳給web服務器。

     3.form填充:struts的總控制器ActionServlet在用戶提交請求時將數據放到對應的form對象中的成員

     變量中。

     4.派發請求:控制器根據配置信息對象ActionConfig將請求派發到具體的Action,對應的formBean一并

     傳給這個Action中的excute()方法。

     5.處理業務:Action一般只包含一個excute()方法,它負責執行相應的業務邏輯(調用其它的業務模塊)

     完畢后返回一個ActionForward對象。服務器通過ActionForward對象進行轉發工作。

     6.返回響應:Action將業務處理的不同結果返回一個目標響應對象給總控制器。

     7.查找響應:總控制器根據Action處理業務返回的目標響應對象,找到對應的資源對象,一般情況下

     為jsp頁面。

     8.響應用戶:目標響應對象將結果傳遞給資源對象,將結果展現給用戶。

    下面具體介紹一下struts1配置并配合簡單的例子簡單易懂:

        Action, ActionForm, ActionForward ,這三個對象構成了Struts 的核心。 


      Struts 最核心的控制器是ActionServlet ,該Servlet 攔截用戶請求,井將用戶請求轉入到Struts 體系內。

    一、配置ActionServlet 


    ActionServlet 是一個標準的Servlet ,在web.xml 文件中配置,該Servlet 用于攔所有的HTTP 請求。 


    在web.xml 文件中配置ActionServlet 應增加如下片段:

     <servlet>
        <!-- ActionServlet 的名 -->
        <servlet-name>actionSevlet</servlet-name>
        <!-- 配置Servlet 的實現類 -->
        <servlet-class>
            org.apache.struts.action.ActionServlet
        </servlet-class>
        <!-- 指定Struts 的第一個配置文件 -->
        <init-param>
            <!-- 指定配置文件的映射 -->
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-con工fgl.xml</param-value>
        </init-param>
        <!-- 指定Struts 的第二個配置文件 -->
        <init-param>
            <!-- 指定配置文件的映射 -->
            <param-name>config/wawa</param-name>
            <param-value>/WEB-INF/struts-config2.xml</param-value>
        </init-param>
        <!-- 將ActionServlet配置成自啟動Servlet -->
        <load-on-startup>2</load-on-startup>
    </servlet>

    二、配置ActionForm 


    配置ActionForm ,必須包含ActionForm 類才行。Struts 要求ActionForm 必須繼承Struts 的基類: org.apache.struts.action.ActionForm,ActionForm 的實現非常簡單,該類只是一個普通的JavaBean,只要為每個屬性提供對應的setter 和getter 方法即可。根據前面的講解, ActionForm 用于封裝用戶的請求參數,而請求參數是通過JSP 頁面的表單域傳遞過來的。因此應保證ActionForm 的參數與表單域的名字相同。 


    注意: JavaB ean 的參數是根據getter 、setter 方法確定的。如果希望有一個A 的屬性,則應該提供getA 和setA 的方法。 


    (1)ActionForm的實現 


    ActionForm 的屬性必須與JSP 頁面的表單域相同。本示例的表單包含如下兩個表單域: 


    • usemame 


    • password 


    因此, ActionForm 必須繼承org.apache.struts.action.ActionForm,并為這兩個域提供對應的setter 和getter 方法,下面是ActionForm 的源代碼:


    import org.apache.struts.action.ActionForm;
    public class LoginForm extends ActionForm {
        private String username;
        private String password;

        // 表單域username對應的setter 方法
        /**
         * @return the username
         */
        public String getUsername() {
            return username;
        }

        /**
         * @param username
         *            the username to set
         */
        public void setUsername(String username) {
            this.username = username;
        }

        /**
         * @return the password
         */
        public String getPassword() {
            return password;
        }

        /**
         * @param password
         *            the password to set
         */
        public void setPassword(String password) {
            this.password = password;
        }

    }

    (2)ActionForm 的配置 


    所有的ActionForm 都被配置在struts-config.xml 文件中,該文件包括了一個form-beans 的元素,該元素內定義了所有的ActionForm,每個ActionForm 對應一個form-bean 元素。 


    為了定義LoginForm. 必須在struts-config.xml文件中增加如下代碼:

    <!-- 用于定義所有的ActionForm -->
    <form-beans>
        <!-- 定義ActionForm,至少指定兩個屬性: name , type-->
        <form-bean name="loginForm" type="lee.LoginForm" />
    </form-beans>

    三、配置Action 


    Action 的配置比ActionForm 相對復雜一點,因為Action 負責管理與之關聯的ActionForm. 它不僅需要配置實現類,還需要配置Action 的path 屬性,該屬性用于被用 


    戶請求。對于只需在本Action 內有效的Forward. 還應在Action 元素內配置局部Forward。 


    (1)Action 的實現 


    通過ActionForm. 可使Action 無須從HTTP 請求中解析參數。因為所有的參數都被封裝在ActionForm中,下面是Action 從AcitionForm 取得請求參數的源代碼:

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.apache.struts.action.Action;
    import org.apache.struts.action.ActionForm;
    import org.apache.struts.action.ActionForward;
    import org.apache.struts.action.ActionMapping;
    public class LoginAction extends Action {
        // 必須重寫該核心方法,該方法actionForm 將表單的請求參數封裝成值對象
        public ActionForward execute(ActionMapping mapping, ActionForm form,
                HttpServletRequest request, HttpServletResponse response)
                throws Exception {
            //將ActionForm強制類型轉換為LoginForm
            LoginForm loginForm = (LoginForm) form;
            // 從ActionForm中解析出請求參數: username
            String username = loginForm.getUsername();
            // 從ActionForm中解析出請求參數: password
            String pass = loginForm.getUsername();
            //后面的處理與前一個示例的Action 相同。
            ...
        }
    }

    該Action 從轉發過來的ActionForm 中解析請求參數,對應的ActionForm 則由ActionServlet 在接收到用戶請求時,負責實例化。 


    實際的過程是: ActionServlet 攔截到用戶請求后,根據用戶的請求,在配置文件中查找對應的Action , Action 的name 屬性指定了用于封裝請求參數的ActionForm; 然后ActionServlet 將創建默認的ActionForm 實例,并調用對應的setter 方法完成ActionForm的初始化。 


    ActionServlet 在分發用戶請求時,也將對應ActionForm 的實例一同分發過來。 


    (2)Action 的配置 


    Action 需要配置如下幾個方面。 


    • Action 的path: ActionServlet 根據該屬性來轉發用戶的請求,即將用戶請求轉發與之同名的Action 。同名的意思是:將請求的.do 后綴去掉,匹配Action 的path屬性值。 


    • Action 的name: 此處的name 屬性并不是Action 本身的名字,而是與Action 關聯的ActionForm。因此該name 屬性必須是前面存在的ActionForm 名。 


    • Action 的type: 該屬性用于指定Action 的實現類,也就是負責處理用戶請求的業 


    務控制器。 


    • 局部Forward: Action 的轉發并沒有轉發到實際的JSP 資源,而是轉發到邏輯名,即Forward 名。在Action 內配置的Forward 都是局部Forward (該Forward 只在該Action 內有效)。 


    下面是該Action 的配置代碼:

    <!-- 該元素里配置所有的Action -->
    <action-mappings>
        <!-- 配置Action. 指定了path , name , type 等屬性 -->
        <action path="/login" type="lee.LoginAction" name="loginForm">
            <!-- 配置局部Forward -->
            <forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
            <forward name="input" path="/login.jsp" />
        </action>
    </action-mappings>

    四、配置Forward 


    正如前面所講, Forward 分局部Forward 和全局Forward 兩種。前者在Action 里配置,僅對該Action 有效:后者單獨配置,對所有的Action 都有效。 


    配置Forward 非常簡單,主要需要指定以下三個屬性。 


    • name: 該Forward 的邏輯名。 


    • path: 該Forward 映射到的JSP 資源。 


    • redirect: 是否使用重定向。 


    局部Forward 作為Action 的子元素配置;全局Forward 配置在global-forwards 元素里。 


    下面是配置全局Forward 的代碼:

    <!-- 配置全局Forward -->
    <global-forwards>
        <!-- 配置Forward對象的name 和path 屬性 -->
        <forward name="error" path="/WEB-INF/jsp/error.jsp" />
    </global-forwards>

    上面的配置代碼中,配置了一個全局Forward,該Forward 可以被所有的Action 訪問。通常,只將全局資源配置成全局Forward。當每個Action 在轉發時,首先在局部Forward 中查找與之對應的Forward,如果在局部Forward 中找不到對應的Forward 對象,才會到全局Forward 中查找。因此,局部Forward 可以覆蓋全局Forward。 


    下面提供了該應用的struts-config.xm1文件的全部源代碼:

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- Struts 配置文件的文件頭,包含DTD 等信息 -->
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
    <!--Struts 配置文件的根元素 -->
    <struts-config>
        <!--配置所有的ActionForm -->
        <form-beans>
            <!--配置第一個ActionForm,指定ActionForm的name 和type 屬性 -->
            <form-bean name="loginForm" type="lee.LoginForm" />
        </form-beans>
        <!--配置全局Forward對象 -->
        <global-forwards>
            <!--該Forward對象的name 屬性為error. 映射資源為/WEB-INF/jsp/error.jsp -->
            <forward name="error" path="/WEB-INF/jsp/error.jsp" />
        </global-forwards>
        <!--此處配置所有的Action 映射-->
        <action-mappings>
            <!--配置Action 的path. type 屬性name 屬性配置Action 對應的ActionForm-->
            <action path="/login" type="lee.LoginAction" name="loginForm">
                <!--還配置了兩個局部Forward. 這兩個局部Forward僅對該Action有效-->
                <forward name="welcome" path="/WEB-INF/jsp/welcome.jsp" />
                <forward name="input" path="/login.jsp" />
            </action>
        </action-mappings>
    </struts-config>

     上面就是struts1配置大致過程,如果你還不是很明白,可以下載我上傳的一個源碼(就是按照上面的步驟配置的,一個簡單的登陸)。

     源碼下載地址:http://download.csdn.net/detail/lizi22/6796111

    posted on 2014-01-01 17:26 Mr Lee 閱讀(6491) 評論(2)  編輯  收藏 所屬分類: java技術

    Feedback

    # re: Struts1 原理及配置講解附源碼 2014-01-02 09:06 鵬達鎖業

    不打算寫年終總結,實在是沒什么好總結的。無論是苦逼了一年,還是逗逼了一年,這一年還是過去了  回復  更多評論   

    # re: Struts1 原理及配置講解附源碼 2014-01-03 09:07 鵬達鎖業

    贊一個,歡迎回訪  回復  更多評論   


    My Links

    Blog Stats

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章檔案

    (hibernate)http://www.tkk7.com/dyllove98/archive/2012/05/12/377959.html

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产日韩一区高清在线| 亚洲精品视频在线看| 亚洲AV成人精品网站在线播放| 一级a性色生活片久久无少妇一级婬片免费放 | 亚洲AV无码精品色午夜在线观看| fc2免费人成在线视频| 亚洲国产天堂久久久久久| 一级毛片免费毛片毛片| AV在线亚洲男人的天堂| 97在线免费视频| 亚洲AV日韩精品久久久久久久| 国产无遮挡裸体免费视频在线观看| 情人伊人久久综合亚洲| **实干一级毛片aa免费| 97久久国产亚洲精品超碰热| 国产精品无码一二区免费| 老司机福利在线免费观看| 美腿丝袜亚洲综合| 永久免费AV无码网站国产 | 精品亚洲国产成人| 四虎影视在线永久免费看黄 | 亚洲伊人久久精品| 免费a级毛片无码a∨蜜芽试看| 亚洲午夜福利在线视频| 亚洲成a人片在线观看久| 97无码人妻福利免费公开在线视频| 无码专区—VA亚洲V天堂| 美女视频黄的全免费视频| 国产精品亚洲片在线花蝴蝶| 亚洲精品亚洲人成人网| 91精品视频免费| 国产亚洲美女精品久久| 亚洲av永久无码精品漫画| 一本无码人妻在中文字幕免费 | 亚洲第一页综合图片自拍| 精品在线免费观看| 亚洲性无码AV中文字幕| 在线播放亚洲第一字幕| 噼里啪啦电影在线观看免费高清| 日本一区二区在线免费观看| 亚洲男人的天堂在线|