Struts-三大コンポーネント(二)RequestProcessor
5246 ワード
RequestProcessor
ActionServiceletは、すべてのリクエストを処理するStrutsフレームワーク内で唯一のServiceletです.リクエストがいつ受信されても、まず既存のリクエストにサブアプリケーションを見つけてみます.サブアプリケーションが見つかると、RequestProcessorオブジェクトが生成され、パラメータとしてHttpServertRequestおよびHttpServertResponseが入力されるprocess()メソッドが呼び出されます.
一、RequestProcessor.process()
JAvaコード:
二、拡張RequestProcessorクラス
RequestProcessorのいくつかのデフォルト機能を変更したい場合は、RequestProcessorベースクラスの関連メソッドを上書きしやすくします.
Javaコード
strutsプロファイルでは、要素のprocessorClassプロパティを使用して、独自のRequestProcessorクラスを構成します.
まとめ
ほとんどはRequestProcessorで処理してください.プロセス発生.Process()メソッドはテンプレートメソッド(TemplateMethod)の設計モードで実現され、request処理の各ステップを完了する方法がある.これらのメソッドはすべてprocess()メソッドから順番に呼び出されます.たとえば、現在要求されているActionFormクラスを探したり、現在のユーザーがactionmappingを実行する権限があるかどうかを確認したりするには、いくつかの個別の方法があります.これは私たちに大きな弾性空間を提供してくれた.StrutsのRequestProcessorは、要求処理ステップごとにデフォルトの実装方法を提供します.これにより、必要なメソッドを書き換えることができ、残りの残りはデフォルトの実装を保持することができます.
ActionServiceletは、すべてのリクエストを処理するStrutsフレームワーク内で唯一のServiceletです.リクエストがいつ受信されても、まず既存のリクエストにサブアプリケーションを見つけてみます.サブアプリケーションが見つかると、RequestProcessorオブジェクトが生成され、パラメータとしてHttpServertRequestおよびHttpServertResponseが入力されるprocess()メソッドが呼び出されます.
一、RequestProcessor.process()
JAvaコード:
public void process(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// HttpServletRequest POST , multipart/form-data
//Struts multipart , ,
request = processMultipart(request);
// URI 。 Struts Action 。
String path = processPath(request, response);
if (path == null) {
return;
}
if (log.isDebugEnabled()) {
log.debug("Processing a '" + request.getMethod() + "' for path '"
+ path + "'");
}
//
processLocale(request, response);
// content type (encoding)
processContent(request, response);
// noCache processNoCache() ,
// noCache true。 , Cache
processNoCache(request, response);
// General purpose preprocessing hook
// , true,
// 。
// Action , , false, Action
if (!processPreprocess(request, response)) {
return;
}
this.processCachedMessages(request, response);
// Identify the mapping for this request
// path ActionMapping 。
// path , error 。
ActionMapping mapping = processMapping(request, response, path);
if (mapping == null) {
return;
}
// Check for any role required to perform this action
// Action 。
// , isUserInRole() ,
// , error 。
if (!processRoles(request, response, mapping)) {
return;
}
// Process any ActionForm bean related to this request
// ActionMapping ActionForm 。
// , ActionForm , , , , 。
// (request,session,application) ,
// Action name 。
ActionForm form = processActionForm(request, response, mapping);
// ActionMapping ActionForm,
// ActionForm ,
// , ActionForm reset() 。
processPopulate(request, response, form, mapping);
// Validate any fields of the ActionForm bean, if applicable
// ActionForm , action validate true ,
// validate() 。
// validate() , ActionErrors ,
// action input 。
// action ActionForm, 。
try {
if (!processValidate(request, response, form, mapping)) {
return;
}
} catch (InvalidCancelException e) {
ActionForward forward = processException(request, response, e,
form, mapping);
processForwardConfig(request, response, forward);
return;
} catch (IOException e) {
throw e;
} catch (ServletException e) {
throw e;
}
// action forward include 。
// , RequestDispatcher forward() include() ,
// , 。 , 。
// Process a forward or include specified by this mapping
if (!processForward(request, response, mapping)) {
return;
}
if (!processInclude(request, response, mapping)) {
return;
}
// Action 。
//processActionCreate() Action ,
// , , , 。
Action action = processActionCreate(request, response, mapping);
if (action == null) {
return;
}
// Call the Action instance itself
// try/catch action execute() ,
// action execute() RequestProcessor 。
ActionForward forward = processActionPerform(request, response, action,
form, mapping);
// Process the returned ActionForward instance
// ActionForward , redirect forword 。 redirect
//forword forward redirect 。
processForwardConfig(request, response, forward);
}
二、拡張RequestProcessorクラス
RequestProcessorのいくつかのデフォルト機能を変更したい場合は、RequestProcessorベースクラスの関連メソッドを上書きしやすくします.
Javaコード
Public classCustomRequestProcessor extends RequestProcessor{
protected void processPreprocess(HttpServletRequest request,
HttpServletResponse response) {
request.setCharacterEncoding("UTF-8"); // 。
super.process(request, response);
}
}
strutsプロファイルでは、
<controller
contentType=“text/html:charset=”GB2312”
locale=”true”nocache=”true” processorCalss=”com.test.CustomRequestProcessor”/>
まとめ
ほとんどはRequestProcessorで処理してください.プロセス発生.Process()メソッドはテンプレートメソッド(TemplateMethod)の設計モードで実現され、request処理の各ステップを完了する方法がある.これらのメソッドはすべてprocess()メソッドから順番に呼び出されます.たとえば、現在要求されているActionFormクラスを探したり、現在のユーザーがactionmappingを実行する権限があるかどうかを確認したりするには、いくつかの個別の方法があります.これは私たちに大きな弾性空間を提供してくれた.StrutsのRequestProcessorは、要求処理ステップごとにデフォルトの実装方法を提供します.これにより、必要なメソッドを書き換えることができ、残りの残りはデフォルトの実装を保持することができます.