天天看點

Struts2架構基礎學習總結

Struts2是以WebWork2為核心,采用攔截機制對使用者的請求進行處理

Struts 2 相比Struts 1的優點:

1、在軟體設計上Struts 2 沒有像Struts 1那樣跟Servlet API 和 struts API 有着緊密的耦合。

     Struts 2的應用可以不依賴于Servlet API和Struts API 。

2、Struts 2 提供了攔截器,利用攔截器可以進行AOP程式設計。

3、Struts 2 提供了類型轉換器。

4、Struts 2 提供支援多種表現層技術,如:JSP 、 freeMarker等。

5、Struts 2 的輸入校驗可以指定方法進行校驗。

6、Struts 2 提供了全局範圍、包範圍和Action範圍的國際化資源檔案管理實作。

架構結構: 
Struts2架構基礎學習總結

工作流程: 

  1、Web浏覽器請求一個資源。

  2、過濾器Dispatcher查找方法,确定适當的Action。

  3、攔截器自動對請求應用通用功能,如驗證和檔案上傳操作。

  4、Action的execute方法通常用來存儲和重新獲得資訊。

  5、結果被傳回到浏覽器

Struts2所需要的jar包(圖示并不是這個):
Struts2架構基礎學習總結
配置Struts2核心控制器

配置核心控制器StrutsPrepareAndExecuteFilter就是用其實作類過濾所有的請求。Struts-2.5.8版本中的核心控制器實作類更改為org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter

Struts2架構基礎學習總結

Struts2資料驗證以及驗證架構的應用

1 資料驗證

  Action 繼承了 ActionSupport 類 ,而該類實作了 Action 、Validateable 、 ValidationAware 、TextProvider、LocaleProvider

Serializable 接口。

  在Validateable 接口定義了一個 validate() 方法 , 在使用者自定義 Action 類中重寫該方法就可以實作 驗證功能。

   

Struts2架構基礎學習總結
public class LoginAction extends ActionSupport
{
 
    private String username ;  
    public String getUsername() {
        return username;
    }
     
    public void setUsername(String username) {
        this.username = username;
    } 
    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        if ( ! username.equals("HelloWorld"))
        {
            Map request = (Map) ActionContext.getContext().get("request") ; 
            request.put("name", getUsername()) ; 
            return SUCCESS;
        }
        else return ERROR ; 
    } 
    public void validate()
    {  
        //如果名字為空,則把錯誤資訊天驕的Action類的fileError
        if (this.getUsername() == null || this.getUsername().trim().equals(""))
        {
            addFieldError("username" , "名字不能為空") ; 
        }
    } 
}      
Struts2架構基礎學習總結

  在類中定義了校驗方法後,該方法會執行系統的  execute() 方法之前執行。如果執行該方法後,Action類的fieldError中已經包含了資料校驗錯誤資訊,

将把請求轉發到input邏輯視圖處,是以在 Action配置中也要配置一下。

  

<action name = "LoginAction" class = "com.cnblogs.jbelial.login.LoginAction" >
            <!-- 定義3個邏輯視圖和實體資源之間的映射  -->
            <result name = "input">/login.jsp</result>
            <result name = "error">/error.jsp</result>
            <result name = "success">/main.jsp</result>
        </action>      

  注意:

  result中的name屬性有下:

  1、success : 表示請求處理成功,該值也是預設值。

  2、error :表示請求處理失敗。

  3、none :表示請求處理完成後不跳轉到任何頁面。

  4、input :表示輸入時如果驗證失敗應該跳轉到什麼地方。

  5、login :表示登入失敗後跳轉的目标。

   Struts 2 提供了大量的資料校驗器,包括表單域校驗器和非表單域校驗器。

  (1)必填字元串校驗器

   該校驗器的名字是 requiredstring 其校驗規則定義檔案如下:

  

Struts2架構基礎學習總結
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">

<validators>
    <field name = "username">
        <!-- 需要驗證的字段的字段名 -->
        <field-validators type = "requiredstring">
            <!-- 去空格 -->
            <param name = "trim">true</param>
            <!-- 錯誤提示資訊 -->
            <message>請輸入使用者名</message>
        </field-validators>
    </field>
</validators>      
Struts2架構基礎學習總結

  檔案命名:ActionName-validation.xml:其中ActionName 就是需要校驗的使用者自定義的Action 類的名字。而且該檔案應該與Action 類檔案放置在

同一路徑下。

  (2)必填校驗器

  該校驗器的名字就是 required 。該校驗器與requiredstring 的差别就是 可以有空字元串。配置如下:

  

Struts2架構基礎學習總結
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">

<validators>       
<!-- 需要驗證的字段的字段名 -->        
<field name = "username">
        <field-validators type = "required"> 
            <!-- 錯誤提示資訊 -->
            <message>請輸入使用者名</message>
        </field-validators>
    </field>
</validators>      
Struts2架構基礎學習總結

  (3)整數校驗器

    該校驗器的名字為 int ,該校驗器要求字段的整數值必須在一定範圍内。配置如下:

  

Struts2架構基礎學習總結
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">

<validators>
    <!-- 需要驗證的字段的字段名 -->
    <field name = "number">
        <field-validators type = "int"> 
            <!-- 數值的最小值 -->
            <param name = "min">50</param>
            <!-- 數值的最大值 -->
            <param name = "max">100</param>
            <!-- 錯誤提示資訊 -->
            <message>大小必須在50至100之間</message>
        </field-validators>
    </field>
</validators>      
Struts2架構基礎學習總結

  

  (4) 日期校驗器

  該校驗器的名字是 date , 該校驗器要求字段的日期值必須在指定範圍類,是以也有 min 和 max 參數。配置格式:

  

Struts2架構基礎學習總結
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">

<validators>
    <!-- 需要驗證的字段的字段名 -->
    <field name = "date">
        <field-validators type = "date"> 
            <!-- 時間的最小值 -->
            <param name = "min">1900-01-01</param>
            <!-- 時間的最大值 -->
            <param name = "max">9999-01-01</param>
            <!-- 錯誤提示資訊 -->
            <message>時間必須在1900-01-01至9999-01-01之間</message>
        </field-validators>
    </field>
</validators>      
Struts2架構基礎學習總結

  (5) 郵件位址校驗器

  該校驗器的名稱是 email ,該校驗器要求字段的字元如果非空,就必須是合法的郵件位址。格式如下:

  

Struts2架構基礎學習總結
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" 
"http://struts.apache.org/dtds/struts-2.1.dtd">

<validators>
    <!-- 需要驗證的字段的字段名 -->
    <field name = "email">
        <field-validators type = "email">  
            <!-- 錯誤提示資訊 -->
            <message>郵箱位址無效</message>
        </field-validators>
    </field>
</validators>      
Struts2架構基礎學習總結

  (6) 網址校驗器

  該校驗器的名稱是 url  , 該校驗器要求字段的字元如果非空,就必須是合法的URL位址 。 格式 和 (5)郵箱校驗器 類似。

  (7) 字元穿長度校驗器

  該校驗器的名稱是 stringlength ,該校驗器要求字段的字元長度必須在指定的範圍之間 ,是以它有 minLength 和 maxLength 兩個參數。

它的個數如 (3)整數校驗器 類似。

  (8) 正規表達式校驗器

  該校驗器的名稱是 regex ,它檢查被校驗字段是否比對一個正規表達式。

Struts2 攔截器:

 Struts 2 架構的絕大部分功能是通過攔截器來完成的,當FilterDispatcher攔截到使用者請求後,大量攔截器将會對使用者請求進行處理,然後調用使用者

自定義的Action 類中的方法來處理請求。

  攔截器的配置:

  有時候一個Action要配置不隻一個攔截器,往往多個攔截器一起使用來進行過濾。這時候就要配置幾個攔截器組成的攔截器棧。定義攔截器棧用

<interceptor-stack.../>,格式如下:

  <interceptor-stack name = "攔截器棧名">

    <interceptor-ref name = "攔截器一"></interceptor-ref>

    <interceptor-ref name = "攔截器二"></interceptor-ref>

    <interceptor-ref name = "攔截器三"></interceptor-ref>

  </interceptor-stack>

  注意:在配置攔截器棧時,用到的攔截器必須是已經存在的攔截器。攔截器棧也可以引用攔截器棧。

  

  攔截器實作類:

  Struts 2 提供了一些接口或類供程式員自定義攔截器。如:com.opensymphony.xwork2.interceptor.Interceptor 接口。

該接口中有三個方法:

  void init () :用于初始化資源。

  String intercept (ActionInvocation invocation) :用于實作攔截的動作。

  destroy () :用于銷毀在init()方法中打開的資源。