From 3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf Mon Sep 17 00:00:00 2001 From: fukachan Date: Wed, 31 Mar 2004 06:03:00 +0000 Subject: describe .cgi implementation --- fml/doc/ja/tutorial/include/chapters.ent | 3 +- fml/doc/ja/tutorial/internals/cgi.examples.sgml | 128 ++++++++++++++++++++++++ fml/doc/ja/tutorial/internals/cgi.sgml | 16 +-- 3 files changed, 140 insertions(+), 7 deletions(-) create mode 100644 fml/doc/ja/tutorial/internals/cgi.examples.sgml (limited to 'fml/doc/ja/tutorial') diff --git a/fml/doc/ja/tutorial/include/chapters.ent b/fml/doc/ja/tutorial/include/chapters.ent index 5febe8b0..5d78a570 100644 --- a/fml/doc/ja/tutorial/include/chapters.ent +++ b/fml/doc/ja/tutorial/include/chapters.ent @@ -1,5 +1,5 @@ @@ -140,6 +140,7 @@ + diff --git a/fml/doc/ja/tutorial/internals/cgi.examples.sgml b/fml/doc/ja/tutorial/internals/cgi.examples.sgml new file mode 100644 index 00000000..737cad6d --- /dev/null +++ b/fml/doc/ja/tutorial/internals/cgi.examples.sgml @@ -0,0 +1,128 @@ + + + + + + + CGI の実装: CGI 関連クラスの継承関係 + + + +config.cgi では、@ISA (継承関係)が次のようになっています。 + +FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param + +thread.cgi の継承も同様で、次のようになっています。 + +FML::CGI::Thread FML::Process::CGI::Kernel FML::Process::CGI::Param + + + + +各 .cgi 固有のコードは FML::CGI:: の階層に置くようにします。 + + + +FML::Process::CGI::Kernel には、 +プロセス全体の制御部分と、 +デフォルトの CGI 固有関数 run_cgi_なんとか() を置きます。 +必要に応じて FML::CGI:: の階層でオーバーロードしてください。 +なお、FML::Process::CGI::Kernel の以下のメソッドは使われていません。 + +run_cgi_log +run_cgi_dummy +run_cgi_date + + + + + + + + + CGI の実装: config.cgi の実装 + + + +前述のように config.cgi の場合、継承関係は次のようになっています。 + +FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param + +以下では、config.cgi の処理をみてみましょう。 + + + +config.cgi のプロセスオブジェクト $curproc は +FML::Process::CGI::Kernel クラスです。 +FML::Process::CGI::Kernel では + + new() + prepare() + verify_request() + run() + finish() + +が順に呼ばれます。 + + + +重要なのは run() です。run() は + + $curproc->html_start(); (FML::CGI::Menu) + $curproc->_drive_cgi_by_table(); (FML::Process::CGI::Kernel) + $curproc->html_end(); (FML::CGI::Menu) + +を実行します。画面を作るのは _drive_cgi_by_table() です。 +この関数から呼ばれる関数が CGI のメイン部分です。 + + + +$curproc->_drive_cgi_by_table() +は、以下の各「run_いろいろ()」メソッドを呼び出します。 + +run_cgi_main (FML::CGI::Menu) + +cgi_execute_command (FML::Process::CGI::Kernel) を使い、 +FML::Command 経由で FML::Command::Admin::コマンドを実行します。 +これが、GUI からコマンドを実行するコードの本体です。 +ただし、画面の表示は別です。 + + + +たとえば GUI から「ユーザのメールアドレスを登録する」場合、 +run_cgi_main() が実際の登録作業を行ないます。 +run_cgi_menu() は、入力画面の生成をおこないます。 +前者は FML::Command::Admin::subscribe::process() メソッド、 +後者は FML::Command::Admin::subscribe::cgi_menu() メソッドを呼び出しています。 + + + +他にも run_cgi_* 関数がありますが、これらは画面の作りに関係する補助的 +なものたちといってよいでしょう。 + + + +この2つはデフォルトのものを使っているという気分です。 + +run_cgi_title FML::Process::CGI::Kernel クラス (タイトル表示) +run_cgi_options FML::Process::CGI::Kernel クラス (言語選択画面) + +また、この .cgi 固有のメソッド群として次のものがあります。 + +run_cgi_navigator FML::CGI::Menu クラス +run_cgi_help FML::CGI::Menu クラス +run_cgi_command_help FML::CGI::Menu クラス +run_cgi_menu FML::CGI::Menu クラス + + + + +ちなみに run_cgi_menu() は cgi_execute_cgi_menu() 経由で +FML::Command::Admin::コマンド::cgi_menu() を実行しています。 + + + diff --git a/fml/doc/ja/tutorial/internals/cgi.sgml b/fml/doc/ja/tutorial/internals/cgi.sgml index 6d8df474..151934ad 100644 --- a/fml/doc/ja/tutorial/internals/cgi.sgml +++ b/fml/doc/ja/tutorial/internals/cgi.sgml @@ -1,14 +1,14 @@ - + CGI プロセスの内部構造 - + メソッド @@ -58,7 +58,7 @@ finish() - + CGI の画面の作りとメソッド @@ -142,7 +142,7 @@ run_cgi_main() - + 画面とトランポリン機構 @@ -171,7 +171,7 @@ Mach - + 備考: FML::CGI::Admin:: ではハードコーディングするしかない? @@ -190,4 +190,8 @@ $comname + +§.internal.cgi.examples; + + -- cgit v1.2.1