MobaSiFでのWebアプリケーション記述方法
今回は、
Webアプリケーションの実装は
- URL、
呼び出される.pmファイル、 サブルーチンを関連づける - アプリケーションロジックを.pmファイルに記述する
- テンプレートファイルを記述する
という3ステップで行われます。順に説明します。
URL、.pmファイル、サブルーチンの関連づけ
WebアプリケーションのURLは
http://example.com/_<ページ名>
という形式をとり、
http://example.com/_echo
のようになります。この場合ページ名は
http://example.com/_echo?key=value
ページ名とアプリケーションロジックの関連づけはconf/
our %PAGE = (
'ページ名1' => [ UID_ST, USER_ST, SERV_ST, MODULE, SUB ],
'ページ名2' => [ UID_ST, USER_ST, SERV_ST, MODULE, SUB ],
)
'echo' => [ 0,0,2, 'Page::Echo', 'pageMain' ],
UID_ | 端末認証要求 |
---|---|
0 | 端末ID通知なしでOK |
1 | 端末ID必須 |
USER_ | 要求する会員登録状態 |
0 | 非会員 |
1 | 会員登録済 |
2 | 会員登録済 |
SERV_ | 操作に対する制限状態 |
0 | すべての操作を可能 |
1 | 自主退会では操作不可 |
2 | オペレータより退会処理されている場合不可 |
4 | ペナルティ状態だと不可 |
8 | メール不達だと操作不可 |
MODULE | 呼び出すPerlモジュール名 |
SUB | MODULE内で呼び出すサブルーチン名 |
アプリケーションロジックを記述する
conf/
今回は、
01: package Page::Echo;
02:
03: use strict;
04: use MobaConf;
05: use Common;
06: use DA;
07: use HTMLTemplate;
08: use Response;
09:
10: sub pageMain {
11: my $func = shift;
12: my $rhData = Common::cloneHash($_::F, '^[a-z]');
13:
14: my $html = HTMLTemplate::insert("echo", $rhData);
15: Response::output(¥$html);
16: }
17: 1;
テンプレートファイルを記述する
テンプレートファイルの記述方法の詳細は後述しますが、
01: <html>
02: <head>
03: <title>echo</title>
04: </head>
05: <body>
06:
07: <form action="_echo" method="POST">
08: <input type="text" name="message"><input type="submit">
09: </form>
10:
11: $if (message) { $ $=h:message$ $ } $
12: </body>
13: </html>
リスト4の11行目では、
テンプレートファイルが用意できたあとは、
http://example.com/_echo
でこの画面が表示され、
ディスパッチャの内部処理
ところで、
- ApacheへのHTTPリクエストはconf/
rewrite. conf (リスト5) のRewriteRuleとconf/ httpd. confのFastCGIに関する設定により、 fcgi/ index. fcgiに渡される。また、 URL中の<ページ名>部分は、 RewriteRuleによりfというリクエストパラメータに渡される。 - fcgi/
index. fcgiはpm/ Page/ Main. pmのmain( )サブルーチンを呼び出す。このサブルーチンの中では - ケータイキャリアや端末の判別、
端末認証に必要なHTTPリクエストヘッダなどの処理 (pm/ MobileEnv. pm) - HTTPリクエストパラメータの共通処理を行い、
$_::Fにセット (pm/ Request. pm) - 端末認証に基づいたユーザ情報を取得し、
$_::Uにセット - conf/
pages. confに基づき、 URL中の<ページ名>に対応するモジュールとサブルーチンの呼び出し
- ケータイキャリアや端末の判別、
RewriteEngine On
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS)
RewriteRule .* - [F]
RewriteRule ^/¥.([^/]+)/(.*)$ /$2?_u=$1 [QSA]
RewriteRule ^/_([^/¥.]+)(¥.html?)?$ /?f=$1 [QSA]
RewriteRule ^/static/(.*)$ /static/$1 [QSA,PT,L]
RewriteRule ^/$ /fcgi/index.fcgi [QSA,PT,L]
RewriteRule ^/(.*¥.html)$ /fcgi/index.fcgi?f=page&page=$1 [QSA,PT,L]
RewriteRule ^/(.*¥/)$ /fcgi/index.fcgi?f=page&page=$1 [QSA,PT,L]
こう追ってみると、
次回は、