struts1知識點


對一個星期的 Struts1 進行筆記總結:

 

1 what--> 什麼是 struts

     struts 實質上就是一個 mvc 框架,用於 java web 的應用開發

 

2 why--> 爲什麼要用 struts

 

    1 ,是一種開源軟件

    2 ,是 mvc 模式的一種很好的體現

    3 ,提供了強大的自定義標籤庫( taglib

    4 ,支持國際化

    5 ,擁有頁面導航

    6 ,提供 Exception 處理機制

    7 ,數據庫連接池管理

 

3how-->struts 的工作流程

    1 讀取配置 -- 讀取 struts-config.xml 的配置信息,並把信息存放到各種配置對象

    2 發送請求 --Actionservlet 接收客戶的請求,到 ActionMapping 檢索和客戶請求相匹配的路徑

    3 填充 form-- 將客戶端提交的表單信息保存到 ActionForm ,根據配置信息決定是否需要表單驗證

    4 派發請求 -- 會根據 ActionMapping 的路徑進行發送請求到某個 Action

    5 處理業務 -- 調用 execute() 方法處理業務邏輯

    6 返回響應 -- 再把客戶的請求轉發給 ActionForward 對象,指向 jsp 文件

    7 處理響應 --jsp 組件生成動態網頁,返回給客戶端

 

4struts 7 大組件( 6 大核心類)

    1ActionServlet :主控制器

    2Action           :完成業務邏輯

    3ActionForm   :將客戶提交的表單數據存儲起來

    4ActionMapping :幫助 ActiongServlet 將請求的 url 映射到相對應的操作類

    5ActionForward :用於頁面的轉向

    6ActionError :用來存儲和回收錯誤信息

    7struts 標籤庫: 可以減輕開發顯示層次的工作

 

5 Struts1有哪些常用的標籤庫? 

1、HTML標籤庫:這個標籤庫的大部分標籤和HTML中的標籤一一對應的。html標籤庫的目的是將jsp頁面和Action通過ActionForm連接起來。
2、Bean標籤庫:Bean標籤庫中的定製標籤主要用來向客戶端輸出文本信息。一般我們會用<bean:write name="classes" property="className" />
3、Logic標籤庫:進行邏輯判斷和循環操作.一般我們會用<logic:iterate id="classes" name="list" type="com.lxitedu.classes.pojo.Classes">id與Bean中bean:wirte 對應的name 必須是相同的。
4、Nested標籤庫:這個標籤庫中的標籤有來顯示form或對象中的“nested”屬性。
5、Tiles標籤庫:這個標籤庫的標籤允許我們爲視圖層建立佈局。



struts 標記庫由四類標記組成:

     1(bean)   Bean 標記:用來在JSP 頁中管理bean

 <bean:message>

<bean:write>  filter="false"  顯示含html 標籤的  輸出int 類型的時候加上format 屬性  format="#"

  <bean:define>

     2(logic) 邏輯標記:用來在JSP 頁中控制流程

   logic:iterate   迭代標籤

<logic:notEmpty name="map">

<logic:iterate name="map" id="element">

  <bean:write name="element" property="value"/><br>

  </logic:iterate>

</logic:notEmpty>

   logic:present  logic:notPresent  作用域是否存在

<logic:present name="strTable">

<bean:write name="strTable" filter="false"/>

</logic:present>

   logic:empty   logic:notEmpty   集合元素爲空

   logic:equals   logic:notEquals

<logic:equal name="onlybean" property="name" value="xxx">

等於 xxx

</logic:equal >

 

<logic:notEqual name="onlybean" property="name" value="xxx">

<bean:write name="onlybean"  property="name"/>

</logic:notEqual >

 3(html) HTML 標記:用來生成HTML 標記,在表單中顯示數據,使用會話IDURL 進行編程

  html:form  html:text   html:radio  html:checkbox  html:select  html:option  html:submit.....

<html:errors />   顯示所有錯

<html:errors property=" 屬性名"/>  顯示對應的屬性錯誤

    4(template) 模板標記:使用動態模板構造普通格式的頁面



6國際化  步驟

1建立中英文的資源文件,並配置好鍵值對

2在jsp頁面動態導入I18n文件,

3在i18n文件進行判斷

4在jsp頁面用<bean:message  key="鍵值">




7全局轉發與局部轉發 

   <global-forwards>

<forward name="xxx" path="/global.jsp"></forward>

  <forward name="success" path="/uuu.jsp"></forward>

</global-forwards>

  全局轉發  所有的action共用   局部轉發 自己的action用 當兩者重名時,優先選擇局部轉發



8全局異常與局部異常(附件 struts1.x中的異常處理.txt)

  <global-exceptions>

<exception key="資源文件中的key" type="包名.類名(如java.lang.ArithmeticException") path="/error.jsp"></exception>

</global-exceptions>


在error.jsp頁面 <html:errors/>獲取異常信息


全局異常 所有的action共用  局部異常 自己的action用 當兩者重名時,優先選擇局部異常



9  資源文件的使用(附件 資源文件設置.txt)

  默認情況下,Struts默認的資源文件爲ApplicationResources.properties文件。


   在src目錄下建立一個properties文件 一般爲ApplicationResource.properties 裏面寫着鍵值對信息

   如 

      aaa=111

      bbb=222

      ccc=333

  在 struts-config.xml中配置使用資源文件 與<action-mappings>同級別,一般在<action-mappings>後,

     <message-resources parameter="文件名(不需要後綴名)"/> 如上的配置爲<message-resources parameter="ApplicationResource"/> 


 如果該資源文件不在src目錄下,而在其他包名下,則應加上包名,假設ApplicationResource.properties在com包下,則配置修改爲

 <message-resources parameter="com/ApplicationResource"/>



在jsp頁面上通過bean標記 可輸出資源文件的內容

  <bean:message key="aaa"/>

  在頁面上將顯示111




10ActionError與ActionMessage 

   actionError 1.1版本  1.2版本推出actionMessage actionMessage是actionError的父類

   actionError從語義上一般是指錯誤信息  actionMessage指的是一般信息


ActionError類與ActionErrors類

ActionError類從不獨立進行錯誤處理,它們總是被存儲在ActionErrors對象中。ActionErrors對象保存ActionError類的集合以及它們特定的屬性值,我們可以使用自己定義的屬性值,或是使用ActionErrors.GLOBAL_ERROR.


 如下使用

   ActionErrors errors = new ActionErrors();

   ActionError error = new ActionError("資源文件中的key值",“要傳遞進去的參數值(一個或多個(字符串數組))");

  errors.add(ActionErrors.GLOBAL_ERROR,error);//或者使用

  errors.add("屬性名",error )

  saveErrors(req,errors);


在頁面上通過


<html:errors />   顯示所有錯誤


<html:errors property="屬性名"/>  顯示對應的屬性錯誤


ActionError類有兩個構造方法 分別有一個參數和兩個參數的

一個參數的 參數就是資源文件中的鍵值

兩個參數的  第一個參數是資源文件中的鍵值,第2個參數是我們可以傳進資源文件中的參數值



  ActionMeaaage類與ActionMeaaages類



    <html:messages id="aaa" property="屬性名" message="true"> 

    <bean:write name="aaa"/> 

</html:messages> 




11dispatchaction
 action類繼承DispatchAction
   (1)編寫如下類似方法
   public ActionForward add(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
         System.out.println("進入add方法");
        return mapping.findForward(SUCCESS);
    }

    public ActionForward update(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
       System.out.println("進入update方法");
        return mapping.findForward(SUCCESS);
    }
 (2)在action配置處加入parameter="method"  
 (3)調用該action時傳參數methoda=add或者其他方法名即可
   
  小技巧 不需要強轉
      String name = (String) PropertyUtils.getSimpleProperty(form, "userName"); 
     String password = (String) PropertyUtils.getSimpleProperty(form, "password"); 


12動態form (附件 動態form.txt)
 
     動態ActionForm是struts從1.1版本開始引入一項新的技術,即在創建ActionForm時
                      可以不用通過編程的方式而只要通過struts-config.xml文件中進行配置,以後在struts運行時,會自動根

                      據struts-config.xml中配置的DynaActionform來生成一個Action實例
    爲什麼要使用DynaActionform

                       很顯然隨着應用程序的變大,數百個ActionForm 這樣不僅編程起來麻煩,以後維護起來也麻煩,比如:

                       某個屬性變化了,則需要修改源代碼,然後重新編譯,但是如果使用DynaActionform則只需要修改

                       struts-config.xml配置文件就行了。這樣提高了應用程序的開發效率與應用程序的可維護性



13驗證框架
一種是通過ActionForm的validate函數進行驗證,另一種就是利用validate框架進行驗證
六種類的關係: 

1:普通form(從下向上繼承)  
ActionForm  //不用驗證框架作驗證    如要驗證  重寫validate方法          
validatorForm //使用驗證框架時必須繼承它,但只能做同一種驗證(即只提交一個按鍵時的驗證) 
validatorActionForm //使用驗證框架驗證時,可以更爲精確的去處理業務邏輯,針對的是不同的按鍵的path(即可以作不同的驗證,如,既可以驗證是否爲空,又可以同時驗證是否小於幾位) 

2:動態form(從下向上繼承) 
DynaActionForm     //不用驗證框架作驗證    如要驗證 寫一個form類繼承它 重寫validate方法 struts-config.xml配置時改爲你寫的類         
  | 
  | 
DynaValidatorForm 
  | 
  | 
DynaValidatorActionForm 


我們自己的form 必須繼承validatorForm 或validatorActionForm 或DynavalidatorForm 或DynavalidatorActionForm 

對於 validatorForm 和DynavalidatorForm 是針對form的驗證 
對於 validatorActionForm 和DynavalidatorActionForm 是針對path的驗證 


創建Validation.xml 
下面介紹一下validation.xml配置文件的標籤: 
<form-validation></form-validation>是總框架 
<formset></formset>是對Form裏的數據進行配置 
<form name="ActionForm對應的名稱"></form>對一個ActionForm裏的數據進行驗證配置 
<field property="ActionForm裏的屬性名" depends="驗證規則,可以是Validation-rules裏定義好的也可以是自定義的驗證規則">這裏配置一個屬性的驗證內容 
<arg0 name="對應的驗證規則名稱" key="可以直接填入數值,也可填入變量表達式:${var:變量名}" resource="true/false"(代表是否從資源文件中讀取信息,否則Key的值以參數的形式返回)> 
<var></var>定義一個變量的標籤體,可以在裏面具體設置變量的名稱以及數值 
<var-name>對應Key裏定義的變量名稱</var-name> 
<var-value>值</var-value> 
<msg name="對應的驗證規則名稱" key="資源文件中定義的變量名稱">這裏定義了信息變量後,會默認定義的信息變量。 
在驗證規則中大部分可以使用已經預定義好的規則,它們在validator-rules.xml裏,當然我們自己也可以定義規則。 

其實,這個文件名可以是任意的,可以起成別的名字,比如:validators.xml,不過,也要相應修改struts-config.xml文件中的加入validator框架PlugIn中的value屬性。這個value屬性用來指定validator-rules文件和具體的驗證文件。 


14客戶端驗證
加上兩句話
<html:form action="add.do?method=add" method="post" onsubmit="return validateLoginDynaValidatorForm(this);">
<html:javascript formName="loginDynaValidatorForm"/>


15Titles框架
what  ---Struts Tiles框架提供了一種模板機制,模板定義了網頁的佈局,同一模板可以被多個Web頁面共用。
why   ---
創建可重用的模板
動態構建和裝載頁面
定義可重用的Tiles組
支持國際化 
how  ----
Tiles標籤庫
Tiles組件的配置文件
TilesPlugIn插件 

16解析struts源碼


1 7  Action ActionForm 是單例的嗎? Action 是線程安全的嗎?

  

   Action 是單例的,不是線程安全的

   每當有一次用戶的請求, ActionFrom 就會被創建一次



18  struts缺點: 

       (1)struts的配置和結構過於複雜。
       (2)因爲actionServlet依賴於web容器,所以測試不太方便。
       (3)Struts1的Action類是單例模式,必須設計成線程安全的。


19  struts1的客戶端驗證於服務端驗證的區別? 

答案:Struts中客戶端驗證跟服務器端驗證有區別:客戶端驗證直接寫一個action文件便可實現,而服務器端驗證必須通過客戶端程序去調用服務器端相 應的 WebServices,實現業務邏輯. 它們的本質區別是,就是客戶端數據校驗是在客戶端上進行的,而服務器端校驗是在服務器上進行的,在速度上客戶端要快很多,但也有缺陷,就是當有黑客攻擊的時候,他完全可以繞過客戶端直接和服務器交互。 



20關於Struts框架中的注意點

1.do請求後綴可以被改變
2.action類必須繼承Action
3.execute方法是struts會自動調用的方法,不能隨意修改
4.execute方法中的form是struts自動創建並建立的聯繫
5.form類必須繼承ActionForm
6.頁面中的html標記中的property必須和form java類中的屬性相對應
7.form java類中的屬性名必須配置setter和getter方法,而這些方法都是自動被調用的
8.頁面中的<html:form action="/login">action的值的映射必須在struts-config.xml文件中存在
9.標籤中的聲明是必須的,但是前綴的名稱是可以修改的
10.頁面中的標籤引用uri="http://struts.apache.org/tags-html",uri 的值是不能任意改變的




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章