struts2面試題

1)Struts2如何啓動

    Struts2是通過web.xml中的過濾器StrutsPrepareAndExecuteFilter啓動的,Tomcat服務器啓動的時候,會執行一次StrutsPrepareAndExecuteFilter裏面的init方法,加載struts.xml配置文件,將配置文件的內容封裝爲javabean存放在內存中,以後用戶請求將會讀取內存,讀取數據,而不用每次都在struts.xml中讀取。

2)Struts2的核心控制器StrutsPrepareAndExecuteFilter的作用

  StrutsPrepareAndExecuteFilter 主要負責攔截 url請求,可以在web.xml中配置攔截的url,<url-pattern>/*</url-pattern>代表攔截所有的請求,執行doFilter方法默認情況下,如果用戶請求的路徑   不帶後綴或者後綴以.action結尾,這時請求將被轉入struts2框架處理,否則struts2框架將略過該請求的處理。 

3)struts2配置文件的加載順序?

  struts.xml ——> struts.properties常量可以在struts.xml或struts.properties中配置,如果在多個文件中配置了同一個常量,則後一個文件中配置的常量值會覆蓋前面文件中配置的常量值.      struts.xml文件的作用:通知Struts2框架加載對應的Action資源
4)struts2是如何管理action的?這種管理方式有什麼好處?
struts2框架中使用包來管理Action,包的作用和java中的類包是非常類似的。 主要用於管理一組業務功能相關的action。在實際應用中,我們應該把一組業務功能相關的Action放在同一個包下。

5)struts2中的默認包struts-default有什麼作用? 
  1.struts-default包是由struts內置的,它定義了struts2內部的衆多攔截器和Result類型,而Struts2很多核心的功能都是通過這些內置的攔截器實現,如:從請求中 把請求參數封裝到action、文件上傳和數據驗證等等都是通過攔截器實現的。當包繼承了struts-default包才能使用struts2爲我們提供的這些功能。

 2.struts-default包是在struts-default.xml中定義,struts-default.xml也是Struts2默認配置文件。 Struts2每次都會自動加載 struts-default.xml文件。
 3.通常每個包都應該繼承struts-default包。
6)
struts2的action的URL訪問路徑由什麼構成?  

   由兩部分組成:包的命名空間+action的名稱 [ + action的後綴 ],/crud1/userAdd.action,crud1是命名空間,userAdd是struts.xml中配置的action的名稱。

 7)在struts.xml中可以不爲action指定class屬性嗎?struts2中有哪些默認的屬性? 
  可以,如果沒有爲action指定class,默認是com.opensymphony.xwork2.ActionSupport 
默認屬性:

    如果沒有爲action指定class          ActionSupport

如果沒有爲action指定method     execute()       注意:ActionSupport的execute方法裏面就一句話return "success"
 如果沒有指定result的name           success  
如果沒有指定result的type           dispatcher

action中默認都有一個攔截器的引用,即:<interceptor-ref name="defaultStack">;

        注意:  
       1.一旦我們爲該包中的某個action顯式指定了某個攔截器,則默認攔截器不會起作用,所以此時要顯式的引進默認的攔截器;

       2.每個包只能指定一個默認攔截器,每個默認攔截器只針對當前包下有效。 

8)struts2如何對指定的方法進行驗證?

   1.validate()方法會校驗action中所有與execute方法簽名相同的方法;

    2.要校驗指定的方法通過重寫validateXxx()方法實現, validateXxx()只會校驗action中方法名爲Xxx的方法。其中Xxx的第一個字母要大寫; 
    3.當某個數據校驗失敗時,調用addFieldError()方法往系統的fieldErrors添加校驗失敗信息(爲了使用addFieldError()方法,action可以繼承ActionSupport),如果系統 的fieldErrors包含失敗信息,struts2會將請求轉發到名爲input的result;

    4.在input視圖中可以通過<s:fielderror/>顯示失敗信息。
    5.先執行validateXxxx()->validate()->如果出錯了,會轉發<result name="input"/>所指定的頁面,如果不出錯,會直接進行Action::execute()方法.

9)攔截器的作用?攔截器與過濾器的區別?

 1)攔截器是對調用的Action起作用,它提供了一種機制可以使開發者可以定義在一個action執行的前後執行的代碼。攔截器只能攔截Action,說明白點攔截器其實是Action的功能塊,只在Action前後執行。攔截器可以抽象出一部分代碼可以用來完善原來的action。同時可以減輕代碼冗餘,提高重用率。

 2) 過濾器是攔截用戶請求的,範圍明顯比攔截器大的多。

10)struts2如何完成從html表單到action的類型轉換? 
    1.在 struts2 中, 把請求參數映射到 action 屬性的工作由 Params攔截器負責, 它是默認的 defaultStack 攔截器中的一員. Params攔截器可以自動完成字符串和基本數據類型之間轉換.

   2.在web應用中,提交的數據基本都是字符串。

   3. 對於引用類型的數據(除String、Collection)轉換,需要自定義類型轉換器;

   4.自定義類型轉化器必須實現TypeConverter 接口或對這個接口的某種具體實現做擴展,如:StrutsTypeConverter,重寫convertToString和convertFromString方法;

  5.兩種自定義類型的轉換器:  

         >> 局部:
           創建一個屬性文件: ActionClassName-conversion.properties, 該文件需和相對應的動作類(Action)放在同一個目錄下, ActionClassName是Action的類名,後面的-conversion.properties 是固定寫法。在properties文件中的內容爲: 屬性名稱=類型轉換器的全類名

        >> 全局:

         在 WEB-INF/classes/ 目錄下創建 xwork-conversion.properties 文件. 在properties文件中的內容爲: 待轉換的類型=類型轉換器的全類名 
          注意:對於轉換的是屬性,只需要寫屬性名,如果是對應的是類型,則需要寫全類名  
11).struts2如何防止用戶表單重複提交?

第一步:在表單中加入<s:token /> 
第二步,使用token欄截器,定義invalid.token結果集 

要使用<s:token /> 必須要在struts.xml的action中引用token的預定義攔截器。
<interceptor name="token" class="org.apache.struts2.interceptor.TokenInterceptor"/>

當然還可以使用tokenSession

 <interceptor name="tokenSession" class="org.apache.struts2.interceptor.TokenSessionStoreInterceptor"/>

12).struts2如何完成文件的上傳?

   1、JSP頁面: 
    JSP頁面的上傳文件的組件:<s: file name=”upload” />,如果需要一次上傳多個文件, 就必須使用多個 file 標籤, 但它們的名字必須是相同的,即:name=“xxx”的值必須一樣;  

   2. 必須把表單的enctype屬性設置爲:multipart/form-data; 

   3.表單的方法必須爲post,因爲post提交的數據在消息體中,而無大小限制。

   對應的action:  
   4.在 Action 中新添加 3 個和文件上傳相關的屬性

   5.如果是上傳單個文件, uploadImage屬性的類型就是 java.io.File, 它代表被上傳的文件, 第二個和第三個屬性的類型是 String, 它們分別代表上傳文件的文件名和文件類型,定義方式是分別是:jsp頁面file組件的名稱+ContentType,   jsp頁面file組件的名稱+FileName
    6如果上上傳多個文件, 可以使用數組或 List  

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