在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經過上面的配置,struts可以正確處理請求中的中文引數。myactionservlet
1
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...