擴充套件Struts1 x核心類

2021-08-22 12:52:22 字數 3184 閱讀 9634

在struts 1.1後新增requestprocessor類別,有關於使用者請求的處理分配等動作已經大部份交由requestprocessor來處理,下圖是actionservlet接收到請求之後的一些主要動作,借由這張圖可以了解struts-config.xml的元件設定意義,以及struts運作的方式。下面將分兩點來介紹如何擴充套件struts核心類。

1. 擴充套件requestprocessor

requestprocessor是struts的核心類,而struts的核心控制器是actionservlet 。但actionservlet並未完成真正的處理,只是呼叫requestprocessor,它才是struts的核心處理類。可以繼承requestprocessor,並改寫其中的process***xx()方法來自定義請求的處理方式,

擴充套件requestprocessor的例項在spring中有個示範,它提供的delegating requestprocessor是乙個很好的示例。

requestprocessor包含了如下主要方法。

boolean processpreprocess(httpservletrequest request,httpservletresponse response):  預處理使用者請求時執行該方法。

擴充套件requestprocessor只需兩步即可。

1>. 繼承requestprocessor,實現自定義的process***xx()處理方法。下面是乙個許可權處理例項:

/**

* 使用者認證方法

*/@override

throws ioexception, servletexception

// 取得不需要校驗許可權的action方法

if (roles != null && roles.length > 0) }}

// 得到session物件和使用者物件

// 如果用於物件不存在,那麼說明使用者沒有登入

if (u == null)

// 判斷使用者是否為超級使用者

string superusers = sqeconfigutil.getsysconfigvalue(configconstants.super_user);

string users = sqestringutils.splitstring(superusers,configconstants.user_delim);

if (sqestringutils.contains(users, u.getname()))

// 得到使用者的角色資訊

cache cache = cachefactory.getcache();

role role = (role) cache.get(u.getusertype());

if (role == null)

// 進行使用者執行功能的判斷

setfunctions = role.getfunctions();

for (function function : functions) }}

// 使用者沒有執行的許可權,跳轉到錯誤頁面

}

2>. 在struts-config.xml檔案中配置sqerequestprocessor。使用者重寫了requestprocessor ,但struts 並不知道,必須配置才可以。下面是配置本示例:

在struts 1.1後,新增了標籤,它可以用於指定actionservlet的一些引數,在struts 1.1之前,這些引數是在中加以指定,使用標籤,應用程式中不同的模組也可以指定各自的引數給actionservlet。

注意:重寫requestprocessor的方法時,別忘了使用super來呼叫父類的動作。

2. 擴充套件actionservlet

通常是將actionservlet當作黑盒子,只要使用它,然而也可以繼承actionservlet來定義自己的控制器,但由於在struts 1.1後大部份的請求已經委託requestprocessor來處理,繼承actionservlet來定義自己的控制器處理請求意義已經不大,通常的目的是重新定義actionservlet的init()方法,增加自己的初始化動作。

如果需要在開始處理請求,或者處理結束之後加入自己的處理時,可對actionservlet進行擴充套件。例如解決中文的編碼問題。

actionservlet接收處理請求引數時,並不是按utf-8的解碼方式處理請求,因此容易形成亂碼。為了解決該問題,可以強制指定actionservlet使用gbk的解碼方式。實現該功能只需兩步驟。

1>. 繼承actionservlet ,實現自定義處理方法:

public class myactionservlet extends actionservlet 

}

在本示例中,重寫了process方法,該方法是actionservlet處理使用者請求的方法。當然,該方法會呼叫requestprocossor 處理,首先在重寫該方法的第一行設計解碼方式,然後呼叫父類的方法。

2>. 在struts-config中配置擴充套件

在web.xml檔案中配置myactionservlet。由於系統改變了actionservlet,因此必須使用myactionservlet來攔截所有的使用者請求。

下面是myactionservlet的配置**:

action  

myactionservlet

1

經過上面的配置,struts可以正確處理請求中的中文引數。

struts1 x 學習筆記

struts1.x 工作流程 2.建立actionform物件,儲存表單引數 3.使用actionform的validate方法進行引數驗證 4.actionservlet傳遞請求給相應的action 5.action的execute方法返回相應的actionforward物件 6.actionse...

struts 1 x 學習 筆記1

配置struts 1.x 要做的以下幾件事,1.匯入jar 2.web.xml配置actionservlet 3.struts conf.xml 4.配置formbean 5.配置action path 必須 type 必須 name 是frombean的名字 scope 作用域,只有session...

Struts1 x 總結(很全面)

struts1.x學完,整理一下 struts1.x是基於mvc框架的,學struts1.x前先了解mvc 一 mvc model業務邏輯 有關資料庫的操作 view展示 jsp動態頁面 controller控制器 擷取資料 分發 轉向 struts中mvc模式執行流程 browse request...