Struts1

struts是基於當前的一些相關標準的開發技術(servlet,xml…)基礎之上,
提供了一個開發框架的開放源碼項目。
使用struts1的好處:
  1.良好的架構和設計
  2.可重用,模塊化,擴展性好
  3.Open source
  4.它提供了豐富的標籤庫,使頁面能更加靈活的使用。
 
struts1的缺點:
  1.它太過於依賴web容器,當配置文件改動一次就要重新啓動。
  2.它的配置文件太過於複雜。
  3.ActionForm無法進行測試.
  4.Action測試太過於依賴servlet api,所以在測試的時候要用到模擬對象.
sturst1初始化 
Struts1 = jsp + servlet + tag   (MVC Model 2)
1.啓動  
    加載多個配置文件   ctrl+shift+T(jar)   ctrl+shift+R(源文件resource)  ctrl+O(快速查詢方法)
    *init()
        initInternal()讀取資源文件(國際化) 
            MessageResources類的getMessageResources()方法
            在getMessageResources()方法中,通過工廠類調配資源文件
                   
        initOther()
            查找在web.xml中config參數和convertnull參數的配置 
            config默認配置路徑爲WEB-INF/struts-config.xml (struts1配置文件)   
           
        initServlet()
            從web.xml中加載ActionServlet的初始化參數如servlet-name,加載DTD文件並把
            其放入HashMap緩存,讀取並解析web.xml的內容,
            另外會將當前的ActionServlet放入到創建的Digester對象的棧中。
               
        initChain() 
            讀取web.xml中命令鏈文件初始值chainConfig
            如果沒有,則用默認的"org/apache/struts/chain/chain-config.xml"
           
        將當前ActionServlet加入到上下文ServletContext()中
       
        獲取ModuleConfig實例,Struts中的MessageResource、PlugIn、數據源等,
        都是通過ModuleConfig來實現的;
           
        調用initModuleMessageResources(moduleConfig),用戶資源文件的初始化;
       
        調用initModulePlugIns(moduleConfig),用戶插件的初始化;
       
        調用initModuleFormBeans(moduleConfig);
            initModuleForwards(moduleConfig);
            initModuleExceptionConfigs(moduleConfig);
            initModuleActions(moduleConfig),
        把struts配置文件中的其他配置存儲到servletContext中;
       
        調用moduleConfig.freeze(),固定組件配置;   
           
        通過while循環,解析以"config/"開頭的其他struts配置文件,遍歷web.xml中
        servletConfig配置的initParameterNames,如發現以"config/" 開始的parameter,
        則根據此值初始化其它的ModuleConfig;    
           
        調用initModulePrefixes(this.getServletContext()) 初始化其他模塊並存儲
           
        到此,ActionServlet初始化工作就算完成   
           
    附:org.apache.commons的通用組件
            commons-digester  解析XML 是XML文件與對象之間的轉化器
            commons-chain     組織複雜流程的處理,是個責任鏈模式       
           
           
一次請求的流程
    1.以.do結尾的URL被ActionServlet攔截,執行service方法
    2.根據請求傳遞的方法GET/POST選擇執行doGet()或doPost()方法
    3.在doGet()/doPost()方法中,調用process()方法
    4.在process()方法中獲得RequestProcessor的實例
    5.RequestProcess的實例調用process()方法,處理請求
    6.在RequestProcess的process()方法中,
        首先通過processMultipart()處理請求。
            若傳送方法爲get,不做處理,直接返回到process()方法
            若傳送方法爲post,做簡單處理後返回process()方法
        其次通過processPath()方法獲取path
            若path爲null,返回上一層調用
        path不爲null,接着進行其它處理
            包括對Locale,Content,NoCache,Preprocess,CachedMessages,Mapping,
            Roles,ActionForm,Populate,Validate,Forward,Include的處理。
           
            然後創建Action實例,並執行Action返回ActionForward,最後處理
            ActionForward。
           
            在處理的過程中,採用責任鏈模式分別由對應的Command類進行處理,
            並隨時可能由於異常等原因返回。
           
    7.一次請求到此結束,會根據ActionForward執行下一個流程 或 直接轉往JSP生成
        HTML發送到瀏覽器。
   
它的一些常識:
    1.它的默認配置名:struts-config.xml.
    2.Action類中最重要的方法: execute().
    3.它的驗證方式有兩種:在服務器端驗證(在FormBean裏面重寫Validate方法),在客戶端驗證(通過配置文件來進行驗證)。
    4.在服務器啓動時會執行init()來進行初始化一些信息。
    5.它的亂碼問題可以通過過濾器來解決。
    6.struts1所需要用到的jar包可能會和tomcat中的jsp-api.jar,servlet-api.jar包衝突,最好的解決方案是將這兩個jar包放到
        重新建的一個包中去,然後再引用這個包中的jar。
    7.在使用validate框架時from類一定要繼承ValidatorFrom這個類。
        Struts Validator框架採用兩個基於XML的配置文件來配置驗證規則。
        這兩個文件爲validator-rules.xml和validation.xml。
   
struts的標籤庫的標籤主要分爲幾類:
    1.html標籤庫   這個標籤庫的大部分標籤和HTML中的標籤一一對應的。
                    html標籤庫的目的是將jsp頁面和Action通過ActionForm連接起來。
    2.bean標籤庫   這個標籤庫主要用來向客戶端輸出文本信息(比如說國際化的一些信息等)。
    3.logic標籤庫  爲了避免在JSP頁面中直接使用Java代碼進行邏輯判斷和循環操作.
    4.nested標籤庫 這個標籤庫中的標籤有來顯示form或對象中的“nested”屬性
    5.tiles標籤庫:這個標籤庫的標籤允許我們爲視圖層建立佈局。
   
struts的自定義標籤使用過程:
    1.先寫一個標籤類這個類繼承了SimpleTagSupport這個類,實現doTag()方法。
    2.然後再寫一個以.tld爲後綴的標籤庫配置文件裏面進行配置一些屬性包括(標籤類、URI等一些東西)
        如果有屬性裏面還需要添加attribute這個屬性。
    3.在頁面上通過<%@taglib uri="" prefix="" %>導入標籤庫 使用的時候注意前綴和在.tld中配置的標籤名及屬性
   
struts1中DynaValidatorForm的使用
        <form-beans>
                <form-bean name="LoginForm" type="org.apache.struts.validator.DynaValidatorForm">
                        <form-property name="userName" type="java.lang.String" />
                        <form-property name="password" type="java.lang.String" />
                </form-bean>
        </form-beans>
        如果在Action類中使用它,可以這樣子:DynaValidatorForm loginForm=(DynaValidatorForm)form;
   
客戶端數據驗證與服務端數據驗證的區別:
Struts中客戶端驗證跟服務器端驗證有區別.客戶端驗證直接寫一個action文件便可實現,
而服務器端驗證必須通過客戶端程序去調用服務器端相應的 WebServices,實現業務邏輯.
它們的本質區別是,就是客戶端數據校驗是在客戶端上進行的,而服務器端校驗是在服務器上進行的,
在速度上客戶端要快很多,但也有缺陷,就是當有黑客攻擊的時候,他完全可以繞過客戶端直接和服務器交互。
我看到過有人介紹這方面的知識時說,一個有經驗的黑客至少能有100種以上的方法繞過客戶端之間訪問服務器,
而且服務器如果是用JDBC寫的話,還要防止sql的注入。不然很容易讓黑客攻擊。
1、如果註冊的時候輸入了密碼它還顯示在頁面的話,就用redisplay在輸入框不顯示它。
2、如果試用框架驗證繼承ValidatorForm的話,不需要驗證的類就可以在action配置裏面加個Validator屬性="false";
   
Struts有三個核心的類,分別是ActionServlet,ModuleConfig,RequestProcessor。
ActionServlet就是控制器,
ModuleConfig封裝着Struts應用程序的配置信息,
RequestProcessor負責處理每一個HTTP請求。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章