…Win32なCGIなんて動かさせてくれるところないだろーが…というツッコミを自分でもしたくなるのですが、CyberXに迷惑かけたのでノウハウ蓄積の意味でhtmlにしておきます。遊びとしては面白いのでやってみよー。
ノートン先生を使っている場合は、ファイアウォールルールの奥底を弄って、TCP接続インバウンド80番を許可しておく。 *1
それでサーバー立てる気も無く単なる実験用にapacheとかインストールしてみたりして。
apacheは大掛かり過ぎると思うならAN HTTPDでも。こっちのほうが簡単でいいです。
うわ、手抜きだ…。
program Project1; {$APPTYPE CONSOLE} uses SysUtils; begin WriteLn('content-type: text/html'); WriteLn; WriteLn('<HTML>'); WriteLn('<HEAD>'); WriteLn('<TITLE> CLOCK </TITLE>'); WriteLn('</HEAD>'); WriteLn('<BODY>'); WriteLn('<H2>'); WriteLn(FormatDateTime('yy-mm-dd hh:MM:ss', Now)); WriteLn('</H2>'); WriteLn('</BODY>'); WriteLn('</HTML>'); end.
コンパイルしたものをcgi-binにコピーします。
こんなものでも動いたら感動しません?ねえ、しません?
DelphiのPro版以上ならウィザードからapache用dll型CGIが作成可能です。
やりかたは、僕が説明するよりマニュアル読んだ方が確実でしょ。(手抜き)
作ったdllの拡張子をsoに変えて、httpd.confの一番下にこんな風に書き足せば動くみたいです。
LoadModule exec modules/xxxtest.so <location /xxxtest> SetHandler xxxtest-handler </location>
この場合、http://localhost/xxxtest ってことですね。
CGIがRADで作れてしまうIntraWeb。
そこでは、JavaScriptとスタイルシートを駆使した、正直、思いっきり不自然なUIが繰り広げられます。WindowsのメニューモドキとかOutlookバーモドキとか、DateTimePickerモドキには恐れ入りました。
単体でサーバーexeにもできます。
dllにした時は、上と同じやり方でapacheに読ませる方向で。バグがあると、apacheが中途半端に落ちるので、タスクマネージャで完全に殺すまで次を起動してはいけません。
Delphi7に添付されたバージョン(5.0)は、CGIとしての使用に問題があります。Delphi7のユーザーであればIntraWeb5.1に無償アップグレードできますので申し込みましょう。
さて、Dr.Bob Examinesにて、DelphiのPro版以上の機能であるWebBrokerを併用して、IntraWebをCGIとして使える単なるコンソールアプリケーションにしてしまうチュートリアルがあります。これでしたらAN HTTPDからでも使えてしまうんです。
WebBrokerとして新規作成。CGI実行形式を選びます。
自動生成されるWebモジュールにIWPageProducerとIWModuleControllerを配置。
それから、Webモジュールをダブルクリックして、アクションをひとつ作ってDefault=True, Producer=IWPageProducer1としておきます。
新規作成のIntraWebのページから、Page Formをひとつ作ります。
IWPageProducer1.OnGetFormで、フォームとアクションとの結びつけを行います。
procedure TWebModule1.IWPageProducer1GetForm(ASender: TIWPageProducer; AWebApplication: TIWApplication; var VForm: TIWPageForm); begin VForm := TIWForm2.Create(AWebApplication) end;
これで準備OK。
後はフォームを作るのみ。
procedure TIWForm2.IWButton1Click(Sender: TObject); begin if IWEdit1.Text = '' then IWLabel2.Caption := 'なにかおしえてくださいよ' else IWLabel2.Caption := 'あなたは' + IWEdit1.Text + 'なのね' end;
コンソール.exe型のCGIですので、当然リクエスト毎に終了するわけです。従ってグローバル変数で情報を覚えておけない事は心の片隅で覚えておくべきです。…ってそんな必要も無い例ですが。
何が素敵って、ASP.NETがVS.NETやIISぐるみでようやく実現したものを、Delphiに元からあったGUIビルダの使いまわしでもって、単独の実行ファイルに収めてしまうところが素敵。
2003-02-24 | いやね、うちのノートン先生がさあ |
2003-03-31 | 注釈 |
2004-06-27 | IntraWeb |
*1 穴を開けっ放しにしておくと、ランダムにIPを指名して接続してくる謎なものがやってくるので、相手コンピュータをlocalhost以外は禁止にしといたほうがいいです。