summaryrefslogtreecommitdiff
path: root/fml/doc/ja/tutorial
diff options
context:
space:
mode:
authorfukachan <fukachan>2004-03-31 06:03:00 +0000
committerfukachan <fukachan>2004-03-31 06:03:00 +0000
commit3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf (patch)
tree986010191a75b4c0590e2a717564ecc9c5fd6135 /fml/doc/ja/tutorial
parentec7961cb88db3a2e8d954d6d286e4037af6c6f51 (diff)
downloadfml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.tar.gz
fml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.tar.bz2
fml8-3454bf98d49c1d6f2c5e77e2da9e87bc5800f5bf.zip
describe .cgi implementation
Diffstat (limited to 'fml/doc/ja/tutorial')
-rw-r--r--fml/doc/ja/tutorial/include/chapters.ent3
-rw-r--r--fml/doc/ja/tutorial/internals/cgi.examples.sgml128
-rw-r--r--fml/doc/ja/tutorial/internals/cgi.sgml16
3 files changed, 140 insertions, 7 deletions
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 @@
<!--
- $FML: chapters.ent,v 1.84 2004/03/23 05:16:51 fukachan Exp $
+ $FML: chapters.ent,v 1.85 2004/03/25 04:10:03 fukachan Exp $
-->
<!entity versin "1.1">
@@ -140,6 +140,7 @@
<!entity chapter.bootloader SYSTEM "internals/bootloader.sgml">
<!entity sect.main.cf SYSTEM "internals/main.cf.sgml">
<!entity chapter.internal.cgi SYSTEM "internals/cgi.sgml">
+<!entity sect.internal.cgi.examples SYSTEM "internals/cgi.examples.sgml">
<!entity chapter.programingstyle SYSTEM "internals/style.sgml">
<!entity chapter.design SYSTEM "internals/design.sgml">
<!entity chapter.config.cf SYSTEM "internals/config.cf.sgml">
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 @@
+<!--
+ $FML: dbms.sgml,v 1.5 2003/05/31 08:51:09 fukachan Exp $
+
+ 注意: cgi.sgml の中にはめ込むので <chapter> は不必要だ。
+-->
+
+
+
+<sect1 id="cgi.internal.example.isa">
+ <title>
+ CGI の実装: CGI 関連クラスの継承関係
+ </title>
+
+<para>
+config.cgi では、@ISA (継承関係)が次のようになっています。
+<screen>
+FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+thread.cgi の継承も同様で、次のようになっています。
+<screen>
+FML::CGI::Thread FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+</para>
+
+<para>
+各 .cgi 固有のコードは FML::CGI:: の階層に置くようにします。
+</para>
+
+<para>
+FML::Process::CGI::Kernel には、
+プロセス全体の制御部分と、
+デフォルトの CGI 固有関数 run_cgi_なんとか() を置きます。
+必要に応じて FML::CGI:: の階層でオーバーロードしてください。
+なお、FML::Process::CGI::Kernel の以下のメソッドは使われていません。
+<screen>
+run_cgi_log
+run_cgi_dummy
+run_cgi_date
+</screen>
+</para>
+
+</sect1>
+
+
+<sect1 id="cgi.internal.example.config.cgi">
+ <title>
+ CGI の実装: config.cgi の実装
+ </title>
+
+<para>
+前述のように config.cgi の場合、継承関係は次のようになっています。
+<screen>
+FML::CGI::Menu FML::Process::CGI::Kernel FML::Process::CGI::Param
+</screen>
+以下では、config.cgi の処理をみてみましょう。
+</para>
+
+<para>
+config.cgi のプロセスオブジェクト $curproc は
+FML::Process::CGI::Kernel クラスです。
+FML::Process::CGI::Kernel では
+<screen>
+ new()
+ prepare()
+ verify_request()
+ run()
+ finish()
+</screen>
+が順に呼ばれます。
+</para>
+
+<para>
+重要なのは run() です。run() は
+<screen>
+ $curproc->html_start(); (FML::CGI::Menu)
+ $curproc->_drive_cgi_by_table(); (FML::Process::CGI::Kernel)
+ $curproc->html_end(); (FML::CGI::Menu)
+</screen>
+を実行します。画面を作るのは _drive_cgi_by_table() です。
+この関数から呼ばれる関数が CGI のメイン部分です。
+</para>
+
+<para>
+$curproc->_drive_cgi_by_table()
+は、以下の各「run_いろいろ()」メソッドを呼び出します。
+<screen>
+run_cgi_main (FML::CGI::Menu)
+</screen>
+cgi_execute_command (FML::Process::CGI::Kernel) を使い、
+FML::Command 経由で FML::Command::Admin::コマンドを実行します。
+これが、GUI からコマンドを実行するコードの本体です。
+ただし、画面の表示は別です。
+</para>
+
+<para>
+たとえば GUI から「ユーザのメールアドレスを登録する」場合、
+run_cgi_main() が実際の登録作業を行ないます。
+run_cgi_menu() は、入力画面の生成をおこないます。
+前者は FML::Command::Admin::subscribe::process() メソッド、
+後者は FML::Command::Admin::subscribe::cgi_menu() メソッドを呼び出しています。
+</para>
+
+<para>
+他にも run_cgi_* 関数がありますが、これらは画面の作りに関係する補助的
+なものたちといってよいでしょう。
+</para>
+
+<para>
+この2つはデフォルトのものを使っているという気分です。
+<screen>
+run_cgi_title FML::Process::CGI::Kernel クラス (タイトル表示)
+run_cgi_options FML::Process::CGI::Kernel クラス (言語選択画面)
+</screen>
+また、この .cgi 固有のメソッド群として次のものがあります。
+<screen>
+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 クラス
+</screen>
+</para>
+
+<para>
+ちなみに run_cgi_menu() は cgi_execute_cgi_menu() 経由で
+FML::Command::Admin::コマンド::cgi_menu() を実行しています。
+</para>
+
+</sect1>
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 @@
<!--
- $FML: cgi.sgml,v 1.10 2003/03/09 08:29:10 fukachan Exp $
+ $FML: cgi.sgml,v 1.11 2003/04/15 14:51:40 fukachan Exp $
-->
-<chapter id="internalcgi">
+<chapter id="cgi.internal">
<title>
CGI プロセスの内部構造
</title>
-<sect1 id="internalcgi.method">
+<sect1 id="cgi.internal.method">
<title>
メソッド
</title>
@@ -58,7 +58,7 @@ finish()
</sect1>
-<sect1 id="internalcgi.frames">
+<sect1 id="cgi.internal.frames">
<title>
CGI の画面の作りとメソッド
</title>
@@ -142,7 +142,7 @@ run_cgi_main() ではなく run_cgi_menu() 経由で表示しているともいえるの
</sect1>
-<sect1 id="internalcgi.trampoline">
+<sect1 id="cgi.internal.trampoline">
<title>
画面とトランポリン機構
</title>
@@ -171,7 +171,7 @@ Mach のトランポリン機構のように、いったりきたりします。
</sect1>
-<sect1 id="internalcgi.problems">
+<sect1 id="cgi.internal.problems">
<title>
備考: FML::CGI::Admin:: ではハードコーディングするしかない?
</title>
@@ -190,4 +190,8 @@ $comname と maps の関係がハードコーディングされてるけれど、
</sect1>
+<!-- 後半では .cgi の実装例について解説する -->
+&sect.internal.cgi.examples;
+
+
</chapter>