Upload
angie
View
93
Download
0
Embed Size (px)
DESCRIPTION
i-web RPG による Web アプリケーション構築 セミナー. 2001 年 11 月 21 日. セミナー内容. 1. iSeries Web 機能の概説. 当章の内容は OS/400 V4R5 の環境にて作成しています。. 目次. World Wide Web HTML HTTP CGI. 1.World Wide Web. World Wide Web の始まり World Wide Web ( または WWW, あるいは W3) とはインターネット上のページとハイパーリンクの巨大な集合を指します。 - PowerPoint PPT Presentation
Citation preview
1
i-web RPGi-web RPG によるによる WebWeb アプリケーションアプリケーション構築構築
セミナーセミナー
2001 年 11 月 21 日
2
セミナー内容セミナー内容
1. iSeries Web機能の概説 ・ HTTP 機能 ・ CGI とは
2. Webプログラムの実演 ・各種照会、 Excel 出力、 PDF 作成、メール送信 etc
(休憩 )
3. Web機能の応用例 ・ドキュメント管理 ・メール通達
4.i-web RPGのご紹介 ・開発ツール ・簡易コマンド ・価格
5. コーディング・サンプル ・通常のコーディング例 ・ i-web RPG のコーディング例
3
1. iSeries Web1. iSeries Web 機能の概説機能の概説
当章の内容は OS/400 V4R5 の環境にて作成しています。
4
目次目次
1.1. World Wide WebWorld Wide Web
2.2. HTMLHTML
3.3. HTTPHTTP
4.4. CGICGI
5
1.World Wide Web1.World Wide Web
• World Wide Web の始まり
– World Wide Web ( または WWW, あるいは W3) とはインターネット上のページとハイパーリンクの巨大な集合を指します。
– 1980 年代の終わりにインターネットではある問題が顕在化しつつありました。当初は情報はもっぱら電子メールやファイルであり、これらを利用するために多くのプロトコルが開発されました。しかし、従来のプロトコルでは処理しきれない新しいタイプのファイルが現れてきました。それは画像・音声はもとより、あらゆる情報へ飛ぶことのできるハイパーリンクを含むマルチメディア・ファイルです。
– 1990 年ヨーロッパの素粒子物理学研究所である CERN(Conseil Europeen pour la Recherche Nucleaire) で、新しい種類の情報を受渡しする新しい標準を作る内部プロジェクトのプロポーザルが作成されました。基本となる要素はマルチメディア、ハイパーテキスト・ファイルの標準及びこれを提供する手段の標準です。ファイルの標準は HTMLHTML(HyperText Markup Language) となり、提供手段の標準は HTTPHTTP(HyperText Transfer Protocol) になりました。
6
– クライアントは URLURL(Uniform Resource Locator) という形式で情報を要求します。要求されたサーバーは HTTP プロトコルを使用して、 URL で指定された文書をクライアントに返します。この時のクライアントを WebWebブラウザブラウザ、サーバーを HTTPHTTPサーバーサーバー ( もしくは WebWebサーバーサーバー ) と言います。文書は HTML で記述され、テキスト / 画像 / 音声 / 動画などを含むことが出来ます。
– 他ファイルへのハイパーリンクによって、たとえそれが他のコンピュータにあったとしても、ユーザーはマウスをクリックするだけで自由に情報を行き来することが出来ます。この技術は何台ものコンピュータに分散している情報へのアクセスを飛躍的に単純化しました。このようにして利用されてマルチメディア・ファイルは通常「 Web ページ」と呼ばれています。
http://www.ibm.com/jp/servers/eserver/iseries/index.html
プロトコルドメイン名 ( サーバー名含む )ディレクトリ / ファイル名
7
– 最初のグラフィカルな Web ブラウザは 1993 年にイリノイ大学 NCSA(The National Center for Supercomputing Applications) で開発された Mosaic( モザイク ) でした。今日のブラウザの多くが Mosaic をベースにしています。
– Web ブラウザは Windows 、 Machintosh 、 UNIX 、 Linux 及び OS/2 など、ウィンドウをサポートするほとんどの主要なクライアント・システムで稼動します。非ウィンドウ・システム用のブラウザも存在し、アクセスした文書のテキスト部分だけを表示します。
– 文書の作成者、サーバー、クライアントの操作環境はお互いに独立しています。それが作成された環境、あるいは配信された環境にかかわらずアクセスし、見ることが出来ます。
MosaicNetscape
Internet ExplorerOpera
8
– 汎用クライアントである Web ブラウザは、 HTTP のみならず FTP( ファイル転送 ) 、 POP3( 電子メール ) 、 NNTP( ネットニュース ) 、 Gopher といった主要なプロトコルをサポートしており、先程の URL 指定で、プロトコルを指定することで様々なサービス ( サーバー ) にアクセスすることが出来ます。
– 高機能で魅力的なブラウザが無料、あるいは評価版として提供されるようにったことと、日本でも 95 年に Windows95 が出荷され、それまでは比較的高価で複雑であった TCP/IP プロトコルが OS 標準で使用できるようになったことで、爆発的にアクセスが増加しました。
ftp://ftp.software.ibm.com/ps/products/db2/fixes/japanese/
プロトコルドメイン名 ( サーバー名含む )ディレクトリ名 (/ ファイル名 )
9
2.HTML2.HTML
• HTML とは
– HTML はプラットフォームに依存しないハイパーテキスト文書を記述するためのマークアップ ( 文書の構造を示すために挿入する区切り文字列 ) 言語です。
– HTML はプログラミング言語ではありませんが、これとよく似ています。 HTML にはタグタグと呼ばれるコマンドや文法があります。 HTML 自体は単純なテキストファイルですので、任意のテキスト・エディターで作成することが出来ます。最近では IBMホームページ・ビルダーなど簡易的に HTML を作成できるツールも多く発表されています。
– HTML は進化しており、現時点での最新バージョンは HTML4.01 です。コンテンツを作成する場合はどのバージョンに準拠するかを明確にすることと、 Webブラウザによっては独自の拡張タグがあるのでその拡張タグを使用する / しないを明確にすることが大切です。( 最新の Netscape 、 MS Internet Explorer は HTML4.0 + α をサポートしています )
10
– HTML の構造• HTML はテキストで記述される。• タグと呼ばれる「 <> 」で囲まれた部分が表現方法をあらわす。
– タグは原則的に表現属性の開始を表す <…..> と表現属性の終了を表す </…..> とで囲んで指定する。ただし、終了指定のないタグも多数ある。
» HTML 文書自身も <HTML> で始まり </HTML> で終わる。– タグは英大文字 /小文字の区別はなく、どちらで記述しても
構わない。• HTML 文書上のプランク文字 /改行は Web ブラウザ上では無視さ
れる。– HTML 文書上の見た目と、 Web ブラウザでの表現とは異な
ることがある。– 例外として <PRE> タグあり。
• 基本的には文書の行 /桁位置を示すタグはない。– 文書の相対的な位置により表示場所が来まる。– ただし水平 (横 )位置はピクセル、パーセント指定が出来る。
11
2-1.HTML2-1.HTML サンプルサンプル 11
– HTML サンプル 1
<html> <head> <title> ようこそホームページへ </title> </head> <body> <center> <h1>HTML のサンプル </h1> </center> <hr> 我輩は猫である。 名前はまだ無い。 <hr> 我輩は猫である。 <br> 名前はまだ無い。 <hr> <b>我輩は猫である。 名前はまだ無い。 </b> <hr> <ul> <li>我輩は猫である。 <li> 名前はまだ無い。 </ul> </body> </html>
①<html>~ </html> HTML 文書の開始と終了を表す②<title>~ </title> ブラウザ上のタイトル・バーに表示される③<body>~ </body> HTML 文書の本体を示し、この間にテキスト、 イメージ・ファイル、多文書へのリンクを記述④<center>~ </center> ブラウザ上で中央寄せ表示する⑤<h1>~ </h1> ヘッダー (header) を意味し、見出しとして扱わ れる。具体的には文字サイズが大きくなる。 <h2>,<h3>,<h4>,<h5>,<h6> あり⑥<hr> 水平線を表示。終了タグ </hr> は存在しない⑦改行なし HTML 文書上では改行しているが、ブラウザ 上では改行表示されていない⑧<br> ブラウザ表示上で改行を意味する タグの終了を表す </br> は存在しない⑨<b>~ </b> 文字を太字 (bold) で表示⑩<ul>~ </ul> 箇条書きを意味する ( ブラウザに表示されない )⑪<li> 箇条書きの場合のみ有効 リスト項目であることを表示
①
②
③④⑤
⑥⑦
⑧
⑨
⑩⑪
12
2-2.HTML2-2.HTML サンプルサンプル 22
– HTML サンプル 2
<html> <head> <title> ようこそホームページへ </title> </head> <body> <center><h2> 文書リンクのサンプル </h2></center><br> <a href="http://www.ibm.com/jp/"> 日本 IBM のサイトへ ( 他サーバー )</a> <br> <a href="/book/title/index.html">別の文書へ (同一サーバー内 )</a> <hr> <center><h2> イメージファイルのサンプル </h2></center><br> <img src="http://www.ibm.com/mast_logo_anim_jp.gif"> </body> </html>
①<a>~ </a> 他文書へのリンクを記述。 <a> タグ内の href=属性で、リンク先のサーバー及
び文書 ( ディレクトリー名含む ) を指定。 全く別のサーバー上にある文書を指定する場合はプ
ロト コル、ドメイン名、ファイル名を指定。②<a>~ </a> 同じく他文書へのリンク。 当 HTML と同じサーバー上にある別文書へリンクす
る場合 は ( ディレクトリー名及び ) ファイル名のみを指定。③<img> イメージ・ファイルを指定。 <img> タグ内の src=属性で、ファイル名を指定。 同一サーバー上でも他サーバー上にあるファイルで
も可能。
①②
③
13
2-3.iSeries2-3.iSeries 上での上での HTMLHTML
– iSeries における HTML ファイルの置き場所• iSeries 上で HTML ファイルを格納する場所は、大きく 2 種類あり
ます。各々長所 /短所を理解した上で適切な場所に置いてください。
• IFSIFS(統合ファイルシステム : Integrated File System)– OS/400 V3R1 より、従来のライブラリーという管理方法に加
え、この IFS が拡張されました。– この IFS は UNIX,Windows のような階層ディレクトリー管理方法であり、特に HTML ファイルの格納に適しています。
– PC 上で作成した HTML ファイルやイメージ・ファイル(GIF,JPEG等 ) をそのまま (=ASCII コード ) 格納します。
• ライブラリー (/QSYS.LIB/QSYS.LIB)– 従来からの OS/400 のファイル管理方法であり、 EBCDIC コー
ドで格納されます。– RPG/COBOL等のプログラムからのアクセスが可能であり、
レコード単位の“データベース (DB2/400)” をサポートします。
( 上述の IFS ではデータベースを格納できず、“単なるファイル”の集まりにすぎません )
– ライブラリー上に HTML ファイルを置いた場合は、最終的には ASCII テキストにコード変換してブラウザに送信するため、コード変換の処理が余分に必要です。
14
– IFS 、ライブラリーのどちらに置くか• IFS に置くケース
– 静的な HTML コンテンツやマルチメディア・ファイルは IFS上に置くことをお勧めいたします。これらのファイルはそのまま (無変換 ) の状態で iSeries(HTTPサーバー ) からクライアント ( ブラウザ ) に送信されます。
– パフォーマンスが良いことと、 IFS のファイル命名規則は制約が少ない ( 最大 255 文字まで ) ことから、特別な理由がない限り IFS を使用すべきでしょう。
• ライブラリーに置くケース– RPG/COBOL等のプログラムを使用して CGI プログラムを作
成する場合は、雛型の HTML ファイルをライブラリー上に置きます。CGI プログラム中では EBCDIC コードの状態で HTML ファイルを生成し、最終的にブラウザに送信する直前で ASCII コードへのコード変換を行ないます。
– RPG/COBOL からアクセス可能ですがコード変換が必要となりパフォーマンスが劣ることから、限定して使用する (=CGIのみの利用とする )べきでしょう。
15
2-4.CCSID2-4.CCSID
• CCSID( コード化文字セット ID)
– iSeries から PC へのファイル転送や、 ODBC アクセスした時に、データや画面の文字が意図したものと異なる ( 所謂“文字化け” ) ケースがあります。多くの場合、その原因は iSeries と PC との文字コードが異なることに起因しています。
– iSeries やメインフレームは基本文字コードとして EBCDIC を、 PC/UNIX はASCII を採用しています。つまりこれらの間でデータを正しくやり取りするには、どこかでこのコード変換を適切に行なう必要があります。
– Web ブラウザ側にはこのコード変換を考慮した機能を持っていないので、 iSeries側でコード変換を行なうことになります。このコード変換はユーザー・アプリケーションにて実行することも可能ですが、OS/400 にも変換機能があり、この機能を正しく使用すればユーザー・アプリケーション側での考慮は不要になります。
– このコード変換の際に「どのような規則に基づいて変換を行なうか」をシステムが判断する情報が CCSIDCCSID(Coded Character Set IDentifier) です。
16
– CCSID の構成要素• CCSID は単なるコード体系のみではなく「ある文字セットに含ま
れる文字 / コード / 表現方法」などを単一の値で表します。• 主な言語の CCSID とその構成要素を下表に示します。
EBCDIC に該当するものは網掛けで示してあります。• 日本語環境でよく利用されるのは「 5026 」と「 5035 」および
「 65535 」でしょう。 ( 「 65535 」は“変換しない”ことを示す特殊値です。 )Pcom では 5026/5035 のスーパーセットである「 930 」と「 939 」が採用されています。
CCSID Code Page Character Set Encoding 備考
00037 00037 00037 1100 アメリカ、カナダ、オーストラリア
00437 00037 01212 2100 US PC
00930 00290 / 00300 01172 / 01001 1301 日本語拡張カタカナ。 4370外字 (5026 の上位 )
00932 00897 / 00301 01122 / 00370 2300 Japan PC(DOS:旧 JIS並び )
00939 01027 / 00300 01172 / 01001 1301 日本語拡張英小文字。 4370外字 (5035 の上位 )
00943 01041 / 00301 01172 / 00370 2300 Japan PC(Windows拡張 )
05026 00290 / 00300 01172 / 00370 1301 日本語拡張カタカナ。 1880外字
05035 01027 / 00300 01172 / 00370 1301 日本語拡張英小文字。 1880外字
65535 無変換を表す特殊な CCSID
17
– CCSID のメカニズムの重要性• CCSID は様々な処理で扱われています。
例えば一見簡単そうな「 Pcom を使用して 5250 画面でデータベースの中身 (実データ部分 ) を参照する」場合にも以下の 3 つの設定が合致していなければなりません。
– データベース・ファイルの CCSID (DSPFD で確認 )– 実行しているジョブ (端末 )CCSID (DSPJOB で確認 )– 表示している Pcom の CCSID (Pcom 構成のホスト・コード
ページ )• その他データベース・ファイル以外にも表示装置ファイル、印刷装置ファイルにもそれぞれ CCSID が付いており、それぞれ正しい変換結果を得られるような仕組みを OS/400 は持っており、ユーザーが正しい理解 /設定が必要です。
• 今回の Web サーバーの構築もまさにこの CCSID のメカニズムを利用して、ユーザーが意識することなくコード変換を行ないます。
その他 FTP によるファイル転送、 ODBC によるデータベース・アクセスも同様です。
18
– CCSID の指定 (CCSID は何に基づいて決定されるか )• iSeries対話型ジョブ
– システム値 QCCSID
– ユーザー・プロフィール中の CCSID
– CHGJOB コマンド中の CCSID パラメータ– ( システム値 QLANGID)
– ( ユーザー・プロフィール中の LANGID)
• iSeries バッチ型ジョブ– バッチ型ジョブ ( ユーザー投入ジョブ、システム・サーバー・ジョブ含む ) に関しては、上記のようにユーザー・プロフィールによって決定されるものもあれば、個別に設定するケースもあり、必ずマニュアルにて確認する必要があります。
• iSeriesオブジェクト– データベース・ファイル
» DDS あり:ソースで明示的に CCSID が指定されている場合はその値。 明示指定がない場合はジョブの値。
» DDS なし:ファイルを作成する時 (CRTPF コマンド ) に CCSID を指定。– ソース・ファイル
» ソース・ファイルを作成する時 (CRTSRCPF コマンド ) に CCSID を指定。
– 表示装置ファイル /印刷装置ファイル» ソース・ファイルの CCSID がそのまま取られる。
19
3.HTTP3.HTTP
• HTTP の基本的な動作
① Web ブラウザは通常 TCP/IP のポート番号 80 を使用してサーバーへの接続を試みます。接続があらかじめ設定された時間内に確立できなかった場合、ブラウザはエラー・メッセージを表示して要求を終了します。
② 接続が確立されるとブラウザはサーバーにリソース (HTML 文書やマルチメディア・ファイルが格納されているディレクトリ名、ファイル名 ) を要求します。サーバーはリソースをブラウザに送信して接続を切断します。リソースが使用可能でない ( ファイルが存在しない、セキュリティ上アクセス出来ない等 )時はブラウザにエラー・メッセージが送られ、接続は終了します。
③ 要求されたリソースがサーバーからブラウザに送信されるとブラウザは内容を読み込み、これを表示したり、マルチメディア ( 音楽やビデオ等 ) を再生するための外部ビューワーを起動します。サーバーからエラーが送られた場合はブラウザはこれを表示します。
20
TCP/IP ネットワーク
TCP/IP ネットワーク① Web ブラウ
ザが要求を出す。
② サーバーは要求を処理。結果を返し、切断する。
③ HTML ドキュメントが送られ、ブラウザに表示される。
http://www.ibm.com/jp/index.html
プロトコル http
ドメイン名 www.ibm.com
ディレクトリー
/jp
ファイル名 index.html
ファイル名 index.html
21
3-1.iSeries HTTP3-1.iSeries HTTP サーバーサーバー
• iSeries HTTP サーバー– iSeries(AS/400) で稼動する主な HTTP サーバー
• IBM HTTP Server for iSeries (Original)– OS/400 V3R2 より OS 標準提供 ( 当時は ICS,ICSS と呼ばれ
る )• IBM HTTP Server for iSeries (powered by Apache)
– OS/400 V4R5 より OS 標準提供• Domino
– OS/400 V4R2 より Domino サーバーが提供• I/NET Web Server/400
– OS/400 V3R1 より稼動• Netscape Enterprise Server for AS/400 ( 日本未発表 )
当セミナーの対象当セミナーの対象
22
– IBM HTTP Server for iSeries (Original) 機能概要• HTTP サーバー環境
– HTTP 1.1
– Proxy / キャッシュ– ログ機能– マルチ・サーバー環境– テキスト・サーチ・エンジン
• Web アプリケーション環境– CGI (ILE-RPG,ILE-COBOL,ILE-C,Java)
– SSI
– Net.Data
– Java Servlet
• セキュリティ– アクセス制御 (Basic認証 )
– 暗号化 (SSL)
– デジタル認証• 管理機能
– ブラウザ・インターフェースによる管理画面
23
– IBM HTTP Server for iSeries (Original) の実体• iSeries 上の HTTP サーバーはバッチ型の常駐ジョブとして稼動
– WRKACTJOB コマンド
– 実行時のユーザーはシステム提供の QTMHHTTP が使用されます。» この HTTP サーバーがコンテンツを送信する際に、今まで通り
OS/400 のセキュリティ・メカニズムが働きます。アクセスするオブジェクトに対してアクセス権限が適切に設定されていなければなりません。
活動ジョブの処理 S65FF18A 01/11/16 17:22:56 CPU %: 2.1 経過時間 : 00:00:36 活動ジョブ数 : 243 オプションを入力して,実行キーを押してください。 2= 変更 3= 保留 4= 終了 5= 処理 6= 解放 7= メッセージ の表示 8= スプール・ファイル の処理 13= 切断 ... OPT サブシステム / ジョブ ユーザー タイプ CPU % 機能 状況 QBATCH QSYS SBS .0 DEQW QCMN QSYS SBS .0 DEQW QCTL QSYS SBS .0 DEQW QSYSSCD QPGMR BCH .0 PGM-QEZSCNEP EVTW QHTTPSVR QSYS SBS .0 DEQW KOBA_WCS QTMHHTTP BCH .0 PGM-QZHBHTTP CNDW KOBA_WCS QTMHHTTP BCI .0 TIMW KOBA_WCS QTMHHTTP BCI .0 TIMW KOBA_WCS QTMHHTTP BCI .0 TIMW KOBA_WCS QTMHHTTP BCI .0 TIMW QINTER QSYS SBS .0 DEQW QPADEV0001 QSECOFR INT .0 CMD-WRKACTJOB RUN 続く .. パラメーターまたはコマンド ===> F3= 終了 F5= 最新表示 F7= 検索 F10= 統計の再始動 F11= 経過 データ の表示 F12= 取消し F23= オプション の続き F24= キー の続き
24
HTTP サーバー関連ライブラリーQHTTPSVR.LIB
HT
TP
サーバージョブ
HTTP サーバー構成ファイルQUSRSYS.LIB
CGI プログラム
Net.Dataエンジン
コード変換HTML ファイルNet.Data マクロ
- 物理ファイル-ソース・ファイル
QSYS.LIB(EBCDIC)
IFS(ASCII)Java Servlet
コード変換
HTML ファイル Net.Data マクロ
コード変換
25
3-2.HTTP3-2.HTTP サーバー構築サーバー構築
• IBM HTTP Server for iSeries (Original) 構築– チェック項目
• サーバー構成情報– IP アドレス (& ポート番号 ) 、ドメイン名、ホスト名、インスタンス数
• Web アプリケーション開発– CGI 、 Net.Data それとも Java?
• セキュリティ対策– SSL は ? アクセス制御は ?– (Firewall の構築は ?)
– 作業項目• TCP/IP ネットワークの設定
– IP アドレス (& ポート番号 ) 、ドメイン名、ホスト名、デフォルトゲートウェイ etc
• HTTP サーバー属性の設定• HTTP サーバー構成
– サーバーインスタンス作成– ホスト名、ポート番号– 経路指定 (Map 、 Pass 、 Exec)– コード変換指定
• アプリケーション開発– HTML デザイン (Web ページ )– Web アプリケーション ( 基幹アプリケーション / データベースとの連携 )
– ログ指定– Welcome ページ– DirectAccess オン /オフ– プロテクション設定 ( アクセス制御 )
26
– 前提ハードウェアの確認• iSeries(AS/400) RISC プロセッサーモデル
– OS/400 V4Rx , V5R1 が稼動するモデル• TCP/IP をサポートする LAN カード
– Ethernet , Token-Ring , ATM etc …
– 前提ソフトウェアの確認• 下記サンプルは OS/400 V4R5 の場合
– PTF の確認• 最新累積 PTF パッケージ• HTTP サーバー用グループ PTF
– OS/400 V4R5 用 : SF99036– OS/400 V5R1 用 : SF99156
必須5769-TC1 *BASE AS/400 TCP/IP TCP/IP プロトコル5769-DG1 *BASE IBM HTTP SERVER FOR AS/400 HTTP サーバーオプション5769-AC2,3
*BASE CRYPTO ACCESS PROVIDER 56-BIT FOR AS/400 暗号化 (SSL)
5769-SS1 34 OS/400 - ディジタル証明書マネージャー デジタル認証 (ID 発行 )
推奨5769-SS1 12 OS/400 - ホスト・サーバー 運用 / コンテンツ管
理5769-XE1 *BASE クライアント・アクセス WINDOWS エクスプレス版 運用 / コンテンツ管
理
27
3-3.HTTP3-3.HTTP サーバー構築手順概要サーバー構築手順概要
• IBM HTTP Server for iSeries (Original) 構築手順概要– 手順概要
①言語環境 / 操作環境の設定– サーバー側 / 管理クライアント側
②TCP/IP 環境の設定– 回線記述、 IP アドレス、ドメイン名、ホスト名、デフォルトゲート
ウェイ etc( 当資料では既に出来ているものとし、割愛致します )
③HTTP サーバー属性の設定④管理用 HTTP サーバー構成の設定⑤HTTP サーバー構成、インスタンスの作成
– HTTP サーバー構成とインスタンスを作成し、その関連付けを行なう⑥HTTP サーバー構成の設定
– 上記で作成した HTTP サーバー構成に具体的に設定値を指定する» 基本設定» メソッドの設定» 経路指定 etc….
⑦HTTP サーバーの開始 / 終了– 作業
• ①~④ : 5250 画面より行なう• ⑤~⑦ : Web ブラウザより行なう (5250 画面でも可 )
28
– 当資料のシナリオ• HTTP サーバー構成の設定項目 (前ページ手順⑥ ) は多岐に渡りま
す。当資料では構成手順の概要を理解して頂くために、必要最低限の設定項目に関して説明致します。
• 今回設定する項目は以下の 5 つです。– 基本設定
» ホスト名、ポート番号等の基本情報– ウェルカム・ページ設定
» デフォルト表示させる Web ページ (HTML ファイル )
– メソッド» Web ブラウザから HTTP サーバーにアクセスする際のコンテン
ツ要求方法の指定– 経路指定
» URL で指定する論理パスと、サーバー上の物理パスのマッピング
– ログ» アクセス・ログ、エラー・ログ等のロギング指定
29
3-3.①3-3.① 言語環境言語環境 // 操作環境の設定操作環境の設定
①言語環境 / 操作環境の設定• サーバー側
– CCSID = 5035 ( 日本語拡張英小文字 )– システム値 QCCSID で指定、もしくは後述の HTTP サーバー構成内で指
定( 新規に導入する場合はシステム値で設定することをお勧めします )
• 管理クライアント側– 5250エミュレータ
» エミュレータのホスト・コードページ = 939 ( 日本語拡張英小文字 )
» iSeries にサインオン後、ジョブ属性 CCSID を 5035 に変更 CHGJOB CCSID(5035)
– Web ブラウザ» JavaScript 、フレームをサポートすること» Proxy の設定は外し、キャッシュを“ 0” に設定
②TCP/IP 環境の設定• 当資料では割愛
30
3-3. HTTP③3-3. HTTP③ サーバー属性の設定サーバー属性の設定
③HTTP サーバー属性の設定• HTTP サーバー全体の属性を指定します。
– CHGHTTPA コマンド HTTP 属性の変更 (CHGHTTPA)
選択項目を入力して,実行キーを押してください。 自動開始 . . . . . . . . . . . *NO *YES, *NO, *SAME サーバー・スレッドの数 : 最小 . . . . . . . . . . . . 10 1-9999, *SAME, *DFT 最大 . . . . . . . . . . . . 40 1-9999, *SAME, *DFT, *NOMAX コード化文字セット識別コード > 00943 1-65533, *SAME, *DFT SERVER マッピング・テーブル : EBCDIC/ASCII テーブルの発信 *CCSID 名前 , *SAME, *CCSID, *DFT ライブラリー . . . . . . . 名前 , *LIBL, *CURLIB ASCII/EBCDIC TABLE の受信 . . *CCSID 名前 , *SAME, *CCSID, *DFT ライブラリー . . . . . . . 名前 , *LIBL, *CURLIB 終り F3= 終了 F4= プロンプト F5= 最新表示 F12= 取り消し F13= この画面の使用法 F24= キーの続き
①②
③
①STRTCP コマンド TCP/IP を開始した時に、 HTTP サーバーを自動的に開始するかどうかを指定。
STRTCPSVR コマンドで HTTP を開始した場合は、このパラメータ値に関係なく開始します。
②サーバー (iSeries) 上で稼動するスレッド数を指定。 この値は同時アクセス数やハードウエア資源によって決定されます。 通常は省略値からスタートし、テスト /実稼動の中で調整します。③ブラウザからの要求で MIMEヘッダが見つからない場合に、 CGI で EBCDIC→ASCII変
換を行 なう際の ASCII-CCSID を指定。 943 は Windows で使用されている SJIS に相当しま
す。
31
3-3.④3-3.④ 管理用管理用 HTTPHTTP サーバー構成の設定サーバー構成の設定
④管理用 HTTP サーバー構成の設定• HTTP サーバーの管理 / 構成は、管理用のブラウザ・インターフェースが提
供されています。ここではその管理用画面を使用するための初期設定を行います。
– WRKHTTPCFG CFG(*ADMIN)
• 管理用 HTTP サーバーの起動 / 終了– STRTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
– ENDTCPSVR SERVER(*HTTP) HTTPSVR(*ADMIN)
HTTP 構成の処理 システム : S65FF18A 構成名 . . . . . . . . . . . . . : ADMIN オプションを入力して,実行キーを押してください。 1= 追加 2= 変更 3= コピー 4= 除去 5= 表示 13= 挿入 OPT 順序番号 項目 00010 # * * * * * * * * * * * * * * * * * * * * * * * * * * * 00020 # HTTP Admin server CUSTOMER configuration 00030 # * * * * * * * * * * * * * * * * * * * * * * * * * * * 00040 DefaultFsCCSID 5026 00050 DefaultNetCCSID 943 00060 ScriptTimeOut 3600 minutes 00070 OutputTimeOut 3600 minutes 00080 InputTimeOut 3600 minutes 終り F3= 終了 F5= 最新表示 F6= リストの印刷 F12= 取消し F17= 最上部 F18= 最下部 F19= 順序の編集
上記の 5 ステートメントを追加して下さい。 ( 先頭が「 # 」で始まる行はコメント行です )英大文字 /小文字は識別されるので、上記の通りに入力して下さい。
32
– 管理用 HTTP サーバーの稼動確認• 管理用 HTTP サーバーが稼動しているかどうか確認して下さい。
– WRKACTJOB SBS(QHTTPSVR)
• 管理用 HTTP サーバーはシステムに 1 つ。– 通常の HTTP サーバー環境は複数持つ ( マルチ・サーバー ) ことが出
来ますが、管理用 HTTP サーバーは 1 つしかありません。
活動ジョブの処理 S65FF18A 01/11/15 21:42:09 CPU %: .0 経過時間 : 00:00:00 活動ジョブ数 : 243 オプションを入力して,実行キーを押してください。 2= 変更 3= 保留 4= 終了 5= 処理 6= 解放 7= メッセージ の表示 8= スプール・ファイル の処理 13= 切断 ... OPT サブシステム / ジョブ ユーザー タイプ CPU % 機能 状況 QHTTPSVR QSYS SBS .0 DEQW ADMIN QTMHHTTP BCH .0 PGM-QZHBHTTP CNDW ADMIN QTMHHTTP BCI .0 TIMW ADMIN QTMHHTTP BCI .0 TIMW ADMIN QTMHHTTP BCI .0 TIMW ADMIN QTMHHTTP BCI .0 TIMW
パラメーターまたはコマンド ===> F3= 終了 F5= 最新表示 F7= 検索 F10= 統計の再始動 F11= 経過 データ の表示 F12= 取消し F23= オプション の続き F24= キー の続き
33
3-3. HTTP⑤3-3. HTTP⑤ 構成、インスタンスの作成構成、インスタンスの作成
⑤HTTP サーバー構成、インスタンスの作成• HTTP サーバー構成方法には以下の 2 通りがあります。
– ブラウザ・インターフェースによる構成» 設定項目がブラウザに表示され、値を指定する。» 指定ミスが起こりにくく、当初はこちらをお奨めします。
– 5250 画面による構成» 構成内容 ( ディレクティブ及び設定値 ) を直接記述する。» 設定項目の意味 /相互関連を理解していなければなりません。
34
– サーバー構成情報の実体• 構成情報はライブラリー QUSRSYS の物理ファイルに格納
– 上述のどちらの構成方法を選択しても、最終的に構成情報はライブラリー QUSRSYS/ 物理ファイル QATMHINSTC,QATMHTTPCに書き出されます。
– 複数のサーバー構成 ( インスタンス ) を作成した場合は、上記物理ファイルの別メンバーとして作成されます。
<< インスタンス >>
物理ファイルQUSRSYS/QATMHINSTC
DEFAULT
WEB01
WEB02
CONFIG
WEB01
WEB02
メンバー メンバー
<<HTTP サーバー構成 >>
物理ファイルQUSRSYS/QATMHTTPC
HostName mallas04.nagoya.japan.ibm.com Port 80 DNS-Lookup Off UserID %%SERVER%% BindSpecific On DefaultFsCCSID 5035 DefaultNetCCSID 943 Enable GET Enable HEAD Enable POSTProtection Protect01 { ………
-r /QSYS.LIB/QUSRSYS.LIB/QATMHTTPC.FILE/WEB01.MBR -AutoStartY
サーバー構成の開始
STRTCPSVR SERVER(*HTTP) HTTPSVR(WEB01)
35
– 管理用 HTTP サーバーへのアクセス• Web ブラウザより下記 URL にアクセス
– http://ホスト名 :2001/
» Basic認証のためのポップアップが表示される。QSECOFR と同等の権限をもつユーザーでログイン
「 AS/400 タスク」ページが表示されます。これが管理画面の Top ページです。( 表示されるメニューは導入されているライセンスによって異なります。 )ここでは HTTP サーバー管理・構成画面の“ IBM HTTP Server for AS/400” のリンクを選択します。
36
• ページのレイアウト– 画面左側 (左フレーム ) にメニュー– 画面右側 (右フレーム ) に設定項目、およびその設定値入力フィールド
37
– HTTP サーバー構成、インスタンスの作成まず最初に HTTP サーバー構成
を作成します。
①「構成」をクリック。 設定項目一覧が表示される。
②「構成の作成」をクリック。 右フレームに入力画面。
③HTTP サーバー構成名を入力。 通常は、後述のインスタン
ス名 と同じ名前にします。
④新規にブランク構成を作成する
か、既存の構成をコピーして作
成するか、選択できます。
⑤適用ボタンを押します。 正しく構成が作成されると
「構 成ファイルが正常に作成さ
れま した」というメッセージが
表示さ れます。
①
②
③
④
⑤
38
– HTTP サーバー構成、インスタンスの作成次にインスタンスを作成し、先
程のHTTP サーバー構成との関連付
けを行ないます。
①「サーバー・インスタンス」をクリ
ック。
②「サーバー・インスタンスの作成」
をクリック。
③インスタンス名を入力。 通常は、前述の HTTP サー
バー 構成名と同じ名前にします。
④関連付けする HTTP サーバー構
成名を選択。
⑤作成ボタンを押します。 正しくインスタンスが作成
される と「サーバーインスタンス
が正 常に作成されました」とい
うメッ セージが表示されます。
①
②
③④
⑤
39
3-3. HTTP⑥3-3. HTTP⑥ サーバー構成の設定サーバー構成の設定
⑥HTTP サーバー構成の設定HTTP サーバー構成の詳細設定を行ないます。先ずは“基本構成”
です。
①「構成」をクリック。
②設定する HTTP サーバー構成を
選択します。
③「基本」をクリック。
④ホスト名 ( ドメイン名を含むFQDN)
を入力。
⑤ポート番号を入力。
⑥クライアントがアクセスしてきた時
に、 DNS サーバーにクライアント
のホスト名を問い合わせるかど
うかを指定。パフォーマンスの観
点から問い合わせない ( チェック
を外す ) ようにする。
⑦「適用」ボタンで確定。 (以降同じ )
①②
③
④
⑤
⑥
40
次に“ウェルカム・ページ”を設定し
ます。これは、 URL にファイル名を
指定しなかった場合に( 例えば http://www.ibm.com/ な
ど )表示されるファイル名を指定しま
す。
①「構成」より「ディレクトリーおよび
ウェルカム・ページ」をクリック。
②「ウェルカム・ページ」をクリック。
③表示させるファイル名を指定。 通常は
index.html 、 default.html 、
welcome.html等の名前を使用
するようです。
①②
③
41
使用可能な“メソッド”を指定します。
メソッドとは Web ブラウザからHTTP
サーバーへの要求方法の種類です。
例えば通常の HTML コンテンツを要
求する場合は GET を使用し、コンテ
ンツをアップロードさせる場合には
PUT 、コンテンツを削除する場合に
は DELETE などです。
不要なメソッドを使用可能にすると、
サーバー上のコンテンツを破壊され
る可能性があるので注意して設定して下さい。
①「構成」より「要求処理」をクリック。
②「メソッド」をクリック。
③使用可能にするメソッドにチェック。
一般的に GET 、 HEAD を可能に
し、 CGI を使用する場合はPOST
を可能にします。
①
②
③
42
次に“経路指定”を設定します。
この経路指定とは、ブラウザからU
RL で指定してきた要求パス ( ディレ
クトリー ) を、実際のサーバー上の物
理パスにマッピングします。
①「要求の経路指定」をクリック。
②アクションで“ Pass” を選択。
③URL テンプレートにはブラウザで
指定する URL パスを入力。 ここではルート (/) を指定。
④代替ファイル・パスにはiSeries 上
の実際の物理パスを指定。
※③,④ ともに指定パス以下の全て
のディレクトリー、ファイルにアク
セスできるようにワイルドカード (*)
を指定しています。
①
②③
④
上記サンプルでは - ブラウザ上で http://www.xxx.co.jp/a.html(③ の指定値 ) と指定すると - サーバー (www.xxx.co.jp) 上では 実際には /WebDocs/a.html(④ の指 定値 ) を返します。
43
最後にアクセス・ログを収集するた
めの設定をします。まずは形式を選択します。
①「構成」より「ログ」をクリック。
②「ログ・ファイルのグローバル設定」
をクリック。
③ログ時刻の設定を選択。 現地時間にするとシステムの
現 行時刻となります。
④ログ・ファイルの形式を選択。 “共通”にすると CERN 準
拠の標 準的なフォーマットを指しま
す。 他プラットフォームで使用さ
れて いるログ分析ツールを利用す
る ことが出来ます。 “ DDS” にするとライブラリ
ー上の 物理ファイルに書出さ
れ、 RPG や Query等で加工できます。
①②
③
④
44
ログの書出し先を指定します。
①「アクセス・ログ・ファイル」をクリッ
ク。
②ログ・ファイルの書出し先、および
ログ・ファイル名を指定します。
前述のログ形式で“共通”を指定
した場合は IFS 上のディレクトリー
( およびファイル名 ) を指定します。
“ DDS” を指定した場合はライブラ
リー ( およびファイル名 ) を指定。
当サンプルでは IFS 上の /Log ディ
レクトリー下に書出されます。 ファイル名は AccessLog.QCYYMMDD という拡張子がつきます。 C = 世紀 , YY = 年 MM = 月 , DD = 日 となり、 1 日単位に新規ファ
イル が自動的に作成されます。
①
②
45
設定内容を確認できます。
「構成の表示」をクリックすると、構成内容が表示されます。
左図のように設定内容は 設定キーワード + 設定値という形式で表現されます。キーワードと設定値の間は 1 つ以上のブランクで区切る必要があります。
この設定キーワードのことをデディレクティブィレクティブと言います。
46
– 代表的なディレクティブディレクティブ 説明 省略値
HostName HTTP サーバーのホスト名を指定します。このディレクティブがない場合、 TCP/IP 構成の値が使用されます。
なし
Port HTTP サーバーがクライアントからのリクエストを受け取る TCP/IPのポート番号を指定ます。通常は 80 を使用します。
80
Enable CGI プログラムを利用するためのメソッドを使用可能にします。 HEAD , GET 他Disable CGI プログラムを利用するためのメソッドを使用不可にします。 POST , PUT 他Exec ブラウザから要求された CGI プログラムのパス名 (URL 名 ) を、実
際のサーバー上の物理パス名 ( ライブラリー名 ) にマップします。なし
Map ブラウザから要求されたパス名 (URL 名 ) を、実際のサーバー上の物理パス名 ( ディレクトリー名、ライブラリー名 ) にマップします。
なし
Pass マッピングされた、またはオリジナルの URL(正確には URI) の評価をします。サーバーから配信するコンテンツは必ずこのディレクティブで指定されていなければなりません。 Map ディレクティブと同様に置換え値を指定することも出来ます。
なし
DirAccess ファイル名が明示的に指定されなかった時に、ディレクトリー構造をブラウザに返すかどうかを指定します。
Off
Welcome ファイル名が明示的に指定されなかった時に、省略時に返す HTMLファイル名を指定します。
なし
AlwaysWelcome Welcome ディレクティブで指定されたファイルの提供方法を制御します。
On
AccessLog ブラウザからのアクセスを記録するアクセス・ログの名前を指定します。
なし
ErrorLog エラー・ログの名前を指定します。 なし
47
3-3. HTTP⑦3-3. HTTP⑦ サーバーの開始サーバーの開始 // 終了終了
⑦HTTP サーバーの開始と終了
①②
③
それでは実際に作成した HTTPサー
バーを開始 / 終了させましょう。
①「サーバー・インスタンス」をクリッ
ク。
②「サーバー・インスタンスの処理」
をクリック。
③開始 / 終了させるインスタンスを指
定して“開始ボタン”、“終了ボタン”
を押すと開始 / 終了します。
開始後、 5250 画面からWRKACTJOB コマンドを使用し
て稼動していることが確認出来ます。
48
HTTP属性 (CHGHTTPA コマンド ) で
自動開始 =*YES となっているが、個
別にインスタンスの自動開始する/ し
ないを制御する場合は「インスタン
ス・パラメータの変更」で自動開始を
指定して制御可能です。
49
3-4.52503-4.5250 画面からのアクセス画面からのアクセス
– 5250 画面からのアクセス• 今までは管理用 HTTP サーバーを介して Web ブラウザによるアクセス方法
を説明しましたが、 5250 画面から直接編集 /設定することも可能です。– WRKHTTPCFG CFG(HTTP サーバー構成名 )
– 下図は今回作成した「 WEB01 」の設定内容です。 WRKHTTPCFG CFG(WEB01)
HTTP 構成の処理 システム : S65FF18A 構成名 . . . . . . . . . . . . . : WEB01 オプションを入力して,実行キーを押してください。 1= 追加 2= 変更 3= コピー 4= 除去 5= 表示 13= 挿入 OPT 順序番号 項目 00010 # HTTP CONFIGURATION FILE 00020 Welcome index.html 00030 HostName mallas04.nagoya.japan.ibm.com 00040 BindSpecific Off 00050 Port 80 00060 UserID %%SERVER%% 00070 DNS-Lookup Off 00080 RuleCaseSense Off 00090 Imbeds Off SSIOnly 00100 AlwaysWelcome On 00110 DirAccess Off 続く ... F3= 終了 F5= 最新表示 F6= リストの印刷 F12= 取消し F17= 最上部 F18= 最下部 F19= 順序の編集 データ変換に置換文字を使用することができる。 +
HTTP 構成の処理 システム : S65FF18A 構成名 . . . . . . . . . . . . . : WEB01 オプションを入力して,実行キーを押してください。 1= 追加 2= 変更 3= コピー 4= 除去 5= 表示 13= 挿入 OPT 順序番号 項目 00120 Disable CONNECT 00130 Disable DELETE 00140 Disable PUT 00150 Enable GET 00160 Enable HEAD 00170 Enable OPTIONS 00180 Enable POST 00190 Enable TRACE 00200 Pass /* /WebDocs/* 終り F3= 終了 F5= 最新表示 F6= リストの印刷 F12= 取消し F17= 最上部 F18= 最下部 F19= 順序の編集 データ変換に置換文字を使用することができる。 +
50
– 関連コマンド、オブジェクト• 5250 画面からのコマンド操作
– HTTP サーバー属性の変更» CHGHTTPA
– HTTP サーバー構成 ( インスタンス作成 /編集 )
» WRKHTTPCFG
– HTTP サーバーの開始 / 終了» STRTCPSVR SERVER(*HTTP) HTTPSVR( インスタンス名 )
» ENDTCPSVR SERVER(*HTTP) HTTPSVR( インスタンス名 )
• オブジェクト– 前述の通り HTTP 構成の実体は QUSRSYS ライブラリーの物理ファ
イルに存在します。これらのファイルはバックアップを取ることをお勧めいたします。
QATMHTTP *FILE PF-DTA HTTP SERVER ATTRIBUTES FILE
QATMHINSTA *FILE PF-DTA *ADMIN INSTANCE FILE
QATMHINSTC *FILE PF-DTA HTTP SERVER INSTANCE FILE
QATMHTTPA *FILE PF-DTA USER ADMIN CONFIG PHYSICAL FILE
QATMHTTPC *FILE PF-DTA HTTP SERVER CONFIGURATION FILE
51
4.CGI4.CGI
• CGI とは
– HTML と HTTP により全世界に向けて情報発信が出来るようになりました。美しい画像を含む HTML 文書で掲示板を作ったり、社内文書を配布することも出来ます。さて、あなたはこれで満足ですか ? 基幹システム上のデータを Web ブラウザからダイナミックに検索したいと思いませんか ? あるいはユーザーがWeb ブラウザからデータを入力できたらと思いませんか ?
– このような Web ブラウザと Web サーバーとの間で対話的な処理を実現するために CGICGI(Common Gateway Interface) が考えだされました。CGI は HTTP サーバーとサーバー上で動作するプログラムとの橋渡しをします。
– HTML もデータを入力するための <form> タグが用意され、 Web ブラウザ上で入力した値をサーバーに返す機能を持ちました。今や多くのサイトが HTML フォームと従来のアプリケーション間のインターフェース (CGI) を書き、 Web ブラウザをそのアプリケーションの入出力端末としています。これは開発者がクライアント側のアプリケーション開発 / 配布に煩わされることなく、クライアント / サーバー型アプリケーションを実現する可能性を開きます。
– CGI にも HTTP と同様にバージョンがあり、 IBM HTTP Server for iSeries (Original) の CGI はバージョン 1.1 をサポートしています。
52
① Web ブラウザが要求を出す。
② URL がプログラムの場合、HTTP サーバーがプログラムを呼出す
⑤ HTML ドキュメントが送られ、ブラウザに表示される。
CGIプログラム
CGIプログラム
③ データベースにアクセスしたり、他のプログラムを呼び出す
④ 表示結果を生成してサーバーに戻す
TCP/IP ネットワーク
TCP/IP ネットワーク
53
4-1.iSeries4-1.iSeries のの CGICGI
• iSeries の CGI– 環境変数 / 標準入力 ( 出力 )
• CGI の考え方は元々 UNIX の“環境変数”や“標準入力 ( 出力 )” を使用して動作します。これらは iSeries では C コンパイラを利用している場合を除いてなじみの薄いものですが、ここでは詳細な説明は割愛致します。
• iSeries 上で CGI アプリケーションを構築するために、これらの環境変数、標準入力の機能を実現するシステム API が提供されています。このシステム API を使用してアプリケーションを作成します。
条件入力
結果表示
HT
TP
サーバー
環境変数
標準入力
標準出力
CGI プログラム(RPG/COBOL)
システム API 呼出し
システム API 呼出し
呼出し
実行イメージ ( 概要 )
54
(参考 )
• 標準入力 / 標準出力とは、プログラムからみた時に入出力用のデバイス ( キーボード、ディスプレイ ) をファイルと同じようにポイントとして扱うもので、 C 言語では標準関数としてそれらをサポートしてます。
– 通常、標準入力元はキーボードからの入力に割当てられます。リダイレクトの機能を使用すると、そのセッション内で一時的に入力元をファイルに変更して、あらかじめ作成しておいたファイルを読み込み、あたかもキーボードからの入力が行なわれたかのようなシミュレートを行なうことが出来ます。
– 標準出力はディスプレイに割当てられ、これもリダイエクト機能を使用してディスプレイへの表示内容をファイルに書出すことが出来ます。
• iSeries の場合、 C 言語ではこれらの機能を標準関数で提供していますが、RPG/COBOL ではネイティブの命令コードはありません。従って HTTP サーバー用に用意されたシステム API を使用して標準入力 / 標準出力をシミュレートします。
標準入力 標準出力
リダイレクト リダイレクト
55
4-2.4-2. プログラミングに関してプログラミングに関して
– プログラミング• 前述のシステム API を使用し、サービス・プログラム ( システム提供 ) と
バインドさせる必要があるため、プログラミング言語は ILE でなければなりません。
– ILE-RPG , ILE-COBOL , ILE-C
• システムの API は多数ありますが、多くは以下の 3 つを使用します。– 環境変数 : QtmhGetEnv
– 標準入力 : QtmhRdStin
– 標準出力 : QtmhWrStout
• EBCIDC←→ASCII のコード変換が必要です。– ユーザー・コーディングによるコード変換も可能ですが、正しい
CCSID の指定および適切なシステム API を使用することで、ユーザー・アプリケーション側ではコード変換を意識しないで済むことが多いでしょう。
– 後述の HTTP サーバー構成で、システムが自動的にコード変換を行なうようにするための設定がありますので、確認下さい。
56
IBM 提供のサービス・プログラム
QTCP/QTMHCGI条件入力
結果表示
HT
TP
サーバー
環境変数QtmhGetEnv
標準入力QtmhRdStin
標準出力QtmhWrStout
CGI モジュール(RPG,COBOL)
CALLB QtmhGetEnv
環境変数 :QUERY_STRING
データベースの読取、更新各種演算
出力 (HTML) の準備
CALLB QtmhWrStout
呼出し
その他システム API
実行イメージ (詳細 )
CGI プログラム
57
– メソッド• HTTP サーバー構成の部分でも若干述べましたが、ブラウザから HTTP サ
ーバーへアクセスする際にいくつかの“要求方法”があります。この“要求方法”のことをメソッドと言います。
• 具体的には「ブラウザから入力したデータを HTTP サーバーに受渡し、所定の CGI プログラムを起動する」ための方法として“ GET” および“ POST” の 2 つのメソッドがあります。
– GET メソッド» 「環境変数」を利用してデータを受渡します。» 扱いが簡単ですが、データ長に制限があります。
– POST メソッド» 「標準入力」を利用してデータを受渡します。» 扱いが若干複雑ですが、データ長に制限がありません。
• 上述のどちらのメソッドを使うかで CGI プログラムのデータを受け取る部分のコーディングが変わります。一般的には制約のない POST が使われることが多いようです。
• 実際にブラウザが「どちらのメソッドを使用してアクセスしてくるか、どの CGI プログラムを呼出すか」は HTML 内で記述します。
58
– 環境変数• 通常、 CGI プログラムはメソッドにかかわらず環境変数を参照して処理を
行ないます。 HTTP サーバーは CGI プログラムを呼出す毎に、環境変数をセットして CGI プログラムから利用出来るようにします。
• IBM HTTP Server for iSeries (Original) が提供する環境変数には次のようなものがあります。
環境変数 内容 例
SERVER_NAME HTTP サーバーのホスト名 (IP アドレス、 DNS別名 )
www.ibm.com
SERVER_PORT 要求が送られてきたポート番号 80
QUERY_STRING ブラウザから ( フォーム ) 送られてきた値 CUSTNO=01050
REQUEST_METHOD 要求されたメソッド GET
SCRIPT_NAME 実行される CGI プログラムのパス名 /cgi-bin/CGI01.PGM
REMOTE_HOST 要求を発行したクライアントのホスト名 xxx.ibm.com
REMODE_ADDR 要求を発行したクライアントの IP アドレス 9.170.143.201
CONTENT_TYPE POST のように追加情報をもつ場合はデータの内容形式を表す
application/x-www-form-urlencoded
CONTEN_LENGTH データの長さ (POST の場合 ) 12
IBM_CCSID_VALUE サーバージョブの CCSID 5035
59
– メソッドと環境変数 / 標準入出力• GET メソッドと環境変数
– メソッド GET は、環境変数「 QUERY_STRING 」に、ブラウザのフォーム・タグで指定された入力値が入るので、 CGI プログラムではこの値を読み込んで処理を行ないます。
– この QUERY_STRING のデータ内容は、ブラウザ上で入力された値そのままではなく、あるルールに基づいてエンコードされた値になっています。
– 例えば HTML 上で「 TEKIYO 」という名前のテキスト入力項目に、ブラウザ上で「 123ABCabc アイウ漢字 +&=? 」と入力すると、 QUERY_STRING は次のようにエンコードされます。
– エンコードのルール (詳細は RFC1630,RFC1738 を参照ください。 )» HTML 上の項目名が先頭に附加され、入力値とは「 = 」で結ばれる複数の入力項目がある場合は「 & 」が区切り文字として使われる。
» 使用される文字は 7ビット ASCII のみで、 8ビット ASCII(SJIS カタカナ、漢字のほとんど ) 、制御文字 (改行 ) 、特殊記号 (+-/\?) の多くは「 % 」の後ろに 16進数文字を付けた形式 (triplet と呼ばれる ) で表される。
» スペース ( ブランク ) は「 + 」に変換される。
HTML フォーム上の入力値 : 123ABCabc アイウ漢字 +&
環境変数 QUERY_STRING : TEKIYO=123ABCabc%B1%B2%B3%8A%BF%8E%9A+%2B%26
60
• POST メソッドと標準入力– 一方、メソッド POST の場合は HTML 上のフォーム入力値は標準入
力として渡されるので、環境変数「 QUERY_STRING 」は空値です。
CGI プログラムは最初に環境変数「 CONTENT_LENGTH 」を読取り、その長さだけ標準入力からデータ部分を読込みます。
• 標準出力– ブラウザからの入力値を受け取るには、上述の「 GET メソッドと環
境変数」もしくは「 POST メソッドと標準入力」の方法ですが、ブラウザへの出力はどちらのメソッドにもかかわらず「標準出力」を使用します。
– また、どちらのメソッドを使用する場合でも必ず標準出力は必須です。
これは標準出力処理のない CGI プログラムを呼出すと、いつまでたっても応答が戻らずブラウザ側で処理を打ち切らなければなりません。 ( もしくはタイムアウト・エラーとなる ) 従って iSeries 上でバッチプログラムを起動する場合でも何らかの返答 ( 例えば「処理を受付けました」とのメッセージを出力する ) を返さなければなりません。
61
4-3.CGI4-3.CGI プログラムの呼出し、プログラムの呼出し、 HTTPHTTP 構成構成
– CGI プログラムの呼出し• CGI プログラムを呼出すための HTML 記述
– HTML の「フォーム・タグ」を使用して記述します。
62
<HTML><HEAD><TITLE>Welcome to iSeries CGI Program</TITLE></HEAD><BODY bgcolor="#ffffff">
<center><H1>CGI(ILE-RPG)</H1></center>
<HR>
<center><H2>得意先マスター検索 </H2></center>
<FORM method="GET" action="/cgi-bin/CGI01.PGM"> 5桁の得意先番号を入力し、検索ボタンを押して下さい。 <BR><BR> <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE=""> <INPUT TYPE="SUBMIT" VALUE="検索 "> <INPUT TYPE="RESET" VALUE="クリア "></FORM> <HR>
</BODY></HTML>
①
②③④
①<form>~ </form> フォーム・タグで囲まれた範
囲内 の入力データが HTTP サーバ
ー に渡されます。 フォーム・タグの method属
性で メソッドの種類、 action属性
で CGI プログラム名を指定しま
す。
左の例では GET メソッドを使用し
て /cgi-bin というディレクトリー下
に存在する CGI01 というプログラ
ムを起動することになります。
②③④<input> インプット・タグで入力項目
を記 述します。 (iSeries で言えば入力フィー
ルド ) インプット・タグの type属性
でそ の入力項目のタイプを指定し
ます。
通常の入力項目は text 、プログラ
ムの起動は submit 、入力項目を
クリアするには reset などです。
63
– CGI プログラムの呼出しとパスの指定• HTTP サーバー構成のパスの設定
– 前ページの通り HTML 内で「どのプログラムを起動するか」を指定しますが、これだけで iSeries 上に存在するプログラムが起動できる訳ではありません。
– HTTP サーバー構成で「起動可能なプログラム」を設定しておく必要があります。
• HTTP サーバー構成の「経路指定」 ①アクションで“ Exec” を選択。
② URL テンプレートにはブラウザで
指定する URL パスを入力。 ここではルート (/) を指定。
③代替ファイル・パスにはiSeries 上
の実際の物理パスを指定。 実際 RPG で記述された CGI
プロ グラムが存在するライブラリ
ー名 を指定します。
①②③
64
Exec /cgi-bin/*.pgm /QSYS.LIB/CGI.LIB/*
今回のサンプルではブラウザからは /cgi-bin というディレクトリー
にあるプログラムが起動できるように見
えます。
実際の iSeries 上の物理的なパスは
ディレクトリーではなく、ライブラリー
なので、ライブラリーの指定をします。
この時、ネーミング・ルールはIFS の
ルールに従って指定しなければなり
ません。
/QSYS.LIB/ ライブラリー名 .LIB
また、当サンプルではワイルド・カー
ド指定をしているので、該当ライブラ
リーに存在する全てのプログラムを
起動することが出来ます。
場合によってはプログラム名を明示
的に指定し、そのプログラムのみ起
動させることも可能です。
65
①「構成」より「 CGI 」をクリック。
②「 CGI設定」をクリック。
③サーバー (OS/400)側の CCSID を指定します。 日本語環境の場合は 5035 。
④クライアント ( ブラウザ )側のCCSID
を指定します。 日本語Windows の場合は
943 。
①②
③④
– CGI に関する設定• HTTP サーバー構成の CGI設定
– CGI プログラムは OS/400 のネイティブ環境 (EBCDIC コード ) で稼動するため、最終的に出力データをブラウザに送信する前にEBCDIC→ASCII のコード変換が必要になります。コード変換そのものはシステムが行いますが、その変換を行なうための文字コード情報を指定します。
66
– HTTP サーバー構成のまとめ• CGI に関連する HTTP サーバー構成です。
Exec ディレクティブによる実行可能
な CGI プログラムの指定。
DefaultFsCCSID ディレクティブ、及び DefaultNetCCSID ディレク
ティブによる EBCDIC→ASCII コード
変換の指定。
67
4-4.CGI4-4.CGI プログラムの開発プログラムの開発
• iSeries における CGI プログラムの開発– ILE-RPG による CGI プログラム
• ソース・ファイルの準備– システム API は英大文字・小文字を区別するので、ソース・ファイル
作成時に適切な CCSID を指定しなければなりません。» CRTSRCPF FILE(CGILIB/QRPGLESRC) RCDLEN(112)
IGCDTA(*YES) CCSID(5035)
» SEU にて編集する際も「大文字入力専用 =Y 」となっている場合は「 N 」にして下さい。 SEU にて編集開始後、“ F13= セッション省略時の値の変更”画面。
• エミュレータの準備– 5250エミュレータも英小文字が扱えるように設定します。
» ホストコードページを「 939 」– ジョブの実行属性も英小文字が扱えるように設定します。
» CHGJOB CCSID(5305)
68
– CGI プログラムの実行環境• 実行時ユーザー・プロフィール
– CGI プログラムはシステム提供のユーザー・プロフィール「 QTMHHTP1 」にて実行されます (変更することは出来ません ) 。
• ライブラリー・リスト– CGI プログラム内でアクセスするオブジェクト ( 例えば F仕様書で指
定されたデータベース・ファイルにアクセスする ) は、従来のプログラムの実行環境と同様に、 HTTP サーバージョブのライブラリー・リストに存在しなければなりません。以下のいずれかの方法で、 CGIプログラムが参照できるようにする必要があります。
» システム値 QUSRLIBL に登録しておく» CGI プログラムの実行ユーザーである「 QTMHHTP1 」のユー
ザー・プロフィール属性のライブラリー・リストに指定する» CGI プログラムの中で QCMDEXC等を使用して一時的にアク
セス出来るようにする ( データベースであれば OVRDBF コマンド )
• アクセス権限– CGI プログラムはシステム提供のユーザー・プロフィール
「 QTMHHTP1 」にて実行されます。従って上述のライブラリーやその中のオブジェクトに対して適切なアクセス権限が必要になります。
69
– CGI プログラムの開発手順概要• コーディング
– 前述のシステム API を使用してコーディング。• ソース・ファイルよりモジュールとしてコンパイル
– モジュール化すること。– CRTRPGMOD MODULE(CGILIB/xxx)
SRCFILE(CGILIB/QRPGLESRC) SRCMBR(*MODULE)
DBGVIEW(*ALL) (*DBGVIEW はデバッグのためのパラメータです )
• 上記コンパイル済みモジュールとシステム提供のサービス・プログラムをバインド– サービス・プログラムは「 QTCP/QTMHCGI 」– CRTPGM PGM(CGILIB/xxx) MODULE(*PGM)
BNDSRVPGM(QTCP/QTMHCGI)ILE-RPGソース
メンバー名 xxx
*MODULE xxx
QhtmGetEnv
QtmhRdStin*SRVPGM
QtmhWrStoutQTMHCGI
QtmhCvtDb
コンパイルCRTRPGMOD
ILE-RPG モジュール
バインドCRTPGM
*MODULE = xxx
CALLB QtmhRdStin
CALLB QtmhWrStout
QtmhGetEnv
QtmhRdStin
QtmhWrStout
QtmhCvtDb
ILE-RPG プログラム
*PGM = xxx
70
– CGI プログラムのデバッグ• デバッグ方法
– CGI プログラムはバッチ型で常駐する HTTP サーバージョブの内部で呼び出されるので、そのジョブに対してトレース等を取りながらデバッグを行なうことになります。例えば下記のような方法です。
» TCP/IP の通信トレースを採取、解析する。» OS/400 のバッチ・ジョブのデバッグを行なう。
• バッチ・ジョブのデバッグ方法の場合– HTTP サーバージョブはサブシステム QHTTPSVR下で稼動、状況が
「 DEQW 」のジョブが CGI を実行するジョブです。通常はこのようなジョブが複数あり、どのジョブで CGI が実行されるかは不定です。そこであらかじめ CHGHTTPA コマンドでパラメータ NBRSVR(2 2)としてジョブ数を 1 つにしておくと良いでしょう。
– ジョブが特定できたらジョブ名 / ユーザー (QTMHHTTP)/ ジョブ番号を特定し、サーバー・ジョブに対してサービス・ジョブを開始し、デバッグを開始します。
» STRSRVJOB JOB( ジョブ番号 / ユーザー / ジョブ名 )» STRDBG
– STRDBG コマンドを実行すると、コンパイル時に DBGVIEW(*ALL) パラメータが指定されていればプログラムのソースが表示され、オンライン・デバッグが可能になります。
» 停止点 ( ブレークポイント ) 機能が使用できます。– デバッグが終了したら ENDDBG,ENDSRVJOB でデバッグ環境を終了。
71
4-5.CGI4-5.CGI プログラム・サンプルプログラム・サンプル
• CGI プログラムのサンプル– それでは実際に簡単な CGI プログラムを作成する過程を順を追って見ていきましょ
う。• このサンプルは「得意先マスター検索」です。
– ブラウザ上で検索キーとなる 5桁の得意先番号を入力– 入力された得意先番号を受取り、得意先マスターを検索 (CHAIN命令 )– 結果の HTML を組み立てて、ブラウザに返す。
• メソッドは扱いが簡単な「 GET メソッド」を使用します。
IBM 提供のサービス・プログラム
QTCP/QTMHCGIH
TT
P
サーバー
環境変数QtmhGetEnv
標準入力QtmhRdStin
標準出力QtmhWrStout
CGI モジュールCGILIB/CGI01
CALLB QtmhGetEnv
環境変数 :QUERY_STRING
データベースの読取、更新各種演算
出力 (HTML) の準備
CALLB QtmhWrStout
その他システム API
CGI プログラム = CGILIB/CGI01
72
入力フォームの画面
検索結果の画面
73
– 入力用の HTML• フォーム・タグ (<form>~ </form>) を使用
<HTML><HEAD><TITLE>Welcome to iSeries CGI Program</TITLE></HEAD><BODY bgcolor="#ffffff">
<center><H1>CGI(ILE-RPG)</H1></center>
<HR>
<center><H2>得意先マスター検索 </H2></center>
<FORM method="GET" action="/cgi-bin/CGI01.PGM"> 5桁の得意先番号を入力し、検索ボタンを押して下さい。 <BR><BR> <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE=""> <INPUT TYPE="SUBMIT" VALUE="検索 "> <INPUT TYPE="RESET" VALUE="クリア "></FORM> <HR>
</BODY></HTML>
①
②③④
①<form>~ </form> フォーム・タグで囲む。 -method=GET -action=CGI プログラム名
左の例では GET メソッドを使用し
て /cgi-bin というディレクトリー下
に存在する CGI01 というプログラ
ムを起動することになります。 実際には HTTP サーバー構成
で ライブラリー CGILIB にある
プログ ラムが起動されます。
②③④<input> インプット・タグで入力項目
を記述。 -検索キーとなる得意先番号 -実行用ボタン -入力項目のクリア・ボタン
74
FTOKMSP IF E K DISK①D* 環境取得変数 API ‘QtmhGetEnv’ のパラメータ DENBUFF S 2048A INZ DENBUFFLN S 9B 0 INZ(2048) DENACTLN S 9B 0 DENVARNAME S 20A INZ('QUERY_STRING') DENVARLN S 9B 0 INZ(12) ②D* 標準出力書出 API 'QtmhWrStout' のパラメータ DOUT S 2048A INZ DOUTLN S 9B 0 INZ(2048) D* コンパイル時配列③DHTML S 80 DIM(14) PERRCD(1) CTDATA
①環境変数取得のための API“QtmhGetEnv” 用のパラメータ定義 -ENBUFF : 環境変数の内容が保持されるバッファ ( 文字型変数 ) -ENBUFFLN : 上記バッファの長さ -ENDACTLN : 環境変数の実データ部の文字列長 -ENVARNAME : 取得する環境変数の名前 -ENVARLN : 上記環境変数の名前の長さ 今回のサンプルでは環境変数 QUERY_STRING を使用するので、以下を固定値として
セット。 -ENVARNAME = “QUERY_STRING” -ENVARLN = 12 (“QUERY_STRING” の文字列長 )
②標準出力のための API“QtmhWrStout” 用のパラメータ定義 -OUT : 標準出力データを保持するバッファ ( 文字型変数 ) -OUTLN : 上記バッファの実データ部の文字列長
③配列定義 当 CGI プログラム内で出力する HTML を記述。 汎用性を持たせるには配列ではなく、データベース等に持たせるほうが良い。
75
④D* EBCDIC 改行コード DNL C X'15' D* HTML 固定文字 DBR C '<BR>' DBL C '<IMG SRC="/ball-blue.gif">' DLI C '<LI>'⑤D* ユーザースペース・エラーコード /COPY QSYSINC/QRPGLESRC,QUSEC ** ⑥C* HTML ヘッダー C 1 DO 12 I 3 0 C CAT HTML(I):0 OUT C CAT NL :0 OUT C ENDDO
④EBCDIC の改行文字 IBM HTTP Server for iSeries (Original) の仕様で、標準出力に書出すデータの各行には
長さ に制限があり (OS/400 バージョンにより長さが異なる ) 、行の最後には改行コード
(x’15’) が必要。
⑤エラー・ハンドリング用 エラーコード情報。システム提供のソースを /COPY にて取込む。
⑥HTMLヘッダー情報のセット ブラウザへ送信するコンテンツの HTMLヘッダー情報のセット。 最終的には標準出力 API を用いてブラウザに送信されるが、まずは標準出力用の保管
バッファ 「 OUT 」へセットしている。 ( パラメータ詳細は②を参照 )
76
⑦C* 環境変数よりパラメータ(得意先番号)取出し C CALLB 'QtmhGetEnv' C PARM ENBUFF C PARM ENBUFFLN C PARM ENACTLN C PARM ENVARNAME C PARM ENVARLN C PARM QUSEC⑧C* HTML ボディー(得意先情報) C MOVEL *BLANK CUSTNO 5 C EVAL CUSTNO=%SUBST(ENBUFF:8:5) C CUSTNO CHAIN TOKMSR 99
⑦環境変数のデータ取得用 API”QtmhGetEnv” の呼出し CALLB命令を使用して呼出し。これはサービス・プログラムとしてバインドされるた
め。 ( パラメータ詳細は①を参照 )
⑧環境変数のデータ部からの取出し 上記⑦の API 呼び出しで、保管バッファ「 ENBUFF 」に環境変数の値が入っており、
その中から 必要なものだけを取出す必要がある。 例えば今回のサンプルでは入力フォーム上での項目名が“ CUSTNO” であり、入力さ
れた値が “ 01020” だとすると、環境変数 QUERY_STRING には“ CUSTNO=01020” という値
がセットされ る。 (“ フォームの項目名 =入力値”が返される ) 従って、 RPG の組込み関
数%SUBST を使用して 必要な部分、すなわち実際に入力された値の“ 01020” だけを抽出する。 %SUBST(ENBUFF:8:5)
5 文字分 (入力される得意先番号は 5桁 )8 文字め (抽出する得意先番号の開始位置 )
環境変数 QUERY_STRING の内容がセットされているバッファ
77
⑨C CUSTNO CHAIN TOKMSR 99 C* (得意先番号が存在した場合) ⑩C *IN99 IFEQ *OFF C* (パック --> 文字変換) C MOVE TKNYUK D 6 C MOVE TKGURI T#GURI 9 C MOVE TKNURI T#NURI 9 C MOVE TKZURI T#ZURI 9 C MOVE TKUZAN T#UZAN 9 C MOVE TKGEND T#GEND 9 ⑪C EVAL OUT=%TRIM(OUT) + C BL + ' 得意先番号 = ' + TKBANG + BR + NL + C BL + ' 得意名 = ' + TKNAKJ + BR + NL + C BL + ' 住所1 = ' + TKADR1 + BR + NL + C BL + ' 住所2 = ' + TKADR2 + BR + NL + C BL + ' 電話番号 = ' + TKTELE + BR + NL +
⑨得意先マスターファイルへのアクセス
⑩該当レコードが存在した場合の処理
⑪標準出力へ書出すための HTML をセット 標準出力へ書出すためのパラメータ「 OUT 」に、 HTML 内容(データベースから取
得したデータ 含むをセット。余分なブランクを取り除くため RPG組込み関数%TRIM を使用。
また、ブラウザには従来のエミュレータのような編集表示を行なう機能はないので、CGI プログ
ラム内で文字列編集する必要がある。例えば金額に関しては「先頭 0 の消去」、「 3桁ごとの
カンマ区切り」や日付に関しては「年 / 月 / 日」のようなスラッシュ区切り、等。
78
C BL + ' 最終入金日 = ' + C %SUBST(D:1:2) + '/' + C %SUBST(D:3:2) + '/' + C %SUBST(D:5:2) + BR + NL + C '<UL>' + C LI + ' 当月売上高 = ' + T#GURI + BR + NL + C LI + ' 当年売上高 = ' + T#NURI + BR + NL + C LI + ' 前年売上高 = ' + T#ZURI + BR + NL + C LI + ' 売掛金残高 = ' + T#UZAN + BR + NL + C LI + ' 信用限度額 = ' + T#GEND + BR + NL + C '</UL>' ⑫C ELSE C* (得意先番号が存在しない場合) ⑬C EVAL OUT=%TRIM(OUT) + HTML(15) + NL C ENDIF⑭C* HTML トレーラー C CAT HTML(13):0 OUT C CAT NL :0 OUT
⑫該当レコードが存在しない場合
⑬「存在しない」旨のエラー・メッセージを標準出力用バッファにセット
⑭残りの HTML 内容をセット
79
C* 標準出力への書出し ⑮C ' ' CHECKR OUT OUTLN ⑯C CALLB 'QtmhWrStout' C PARM OUT C PARM OUTLN C PARM QUSEC C* C SETON LR C RETURN
⑮標準出力用のバッファに格納されているデータの長さをチェック 標準出力に書出す際に、実際にどれだけの文字列 (HTML コンテンツ ) を書出すのか、
そのデー タ長を検査してパラメータに渡さなければならない。 具体的にはバッファ「 OUT 」に出力情報が格納されているので、 CHECKR命令を使
用して文字 が何バイトセットされているかをチェックしている。
⑯標準出力用 API”QtmhWrStout” の呼出し バッファ「 OUT 」にセットされた HTML データ、及びそのデータ長をパラメータに
渡す。 ( パラメータ詳細は②を参照 )
80
⑰標準出力へ書出す HTML の固定情報 当サンプルではコンパイル時配列として定義しているが、汎用性を考慮するとデータ
ベース等 に保存するほうが良いでしょう。
以下、その配列の中の固定情報部分
⑱HTMLヘッダ情報に関する情報
⑲HTML 本文
⑳該当レコードがなかった場合の HTML 本文
⑰**CTDATA HTML ⑱CONTENT-TYPE: TEXT/HTML ⑲<center><H1>CGI(ILE-RPG)</H1></center> <HR> <center><H2>得意先マスター検索 </H2></center> <FORM method="GET" action="/cgi-bin/CGI01.PGM"> 5桁の得意先番号を入力し、検索ボタンを押して下さい。 <BR><BR> <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE=""> <INPUT TYPE="SUBMIT" VALUE="検索 "> <INPUT TYPE="RESET" VALUE="クリア "> </FORM> <HR> </BODY></HTML> ⑳<B><I> 該当する得意先なし。 </I></B>
81
• ソース・コード 1 of 3000001 FTOKMSP IF E K DISK 000002 D* 環境取得変数 API 'QtmhGetEnv' のパラメータ 000003 DENBUFF S 2048A INZ 000004 DENBUFFLN S 9B 0 INZ(2048) 000005 DENACTLN S 9B 0 000006 DENVARNAME S 20A INZ('QUERY_STRING') 000007 DENVARLN S 9B 0 INZ(12) 000008 D* 標準出力書出 API 'QtmhWrStout' のパラメータ 000009 DOUT S 2048A INZ 000010 DOUTLN S 9B 0 INZ(2048) 000011 D* コンパイル時配列 000012 DHTML S 80 DIM(15) PERRCD(1) CTDATA 000013 D* EBCDIC 改行コード 000014 DNL C X'15' 000015 D* HTML 固定文字 000016 DBR C '<BR>' 000017 DBL C '<IMG SRC="/Images/ball-blue.gif">' 000018 DLI C '<LI>' 000019 D* ユーザースペース・エラーコード000020 /COPY QSYSINC/QRPGLESRC,QUSEC 000021 ** 000022 C* HTML ヘッダー 000023 C 1 DO 12 I 3 0 000024 C CAT HTML(I):0 OUT 000025 C CAT NL :0 OUT 000026 C ENDDO 000027 C* 環境変数よりパラメータ(得意先番号)取出し 000028 C CALLB 'QtmhGetEnv' 000029 C PARM ENBUFF 000030 C PARM ENBUFFLN 000031 C PARM ENACTLN 000032 C PARM ENVARNAME 000033 C PARM ENVARLN 000034 C PARM QUSEC
82
• ソース・コード 2 of 3000035 C* HTML ボディー(得意先情報) 000036 C MOVEL *BLANK CUSTNO 5 000037 C EVAL CUSTNO=%SUBST(ENBUFF:8:5) 000038 C CUSTNO CHAIN TOKMSR 99 000039 C* (得意先番号が存在した場合) 000040 C *IN99 IFEQ *OFF 000041 C* (パック --> 文字変換) 000042 C MOVE TKNYUK D 6 000043 C MOVE TKGURI T#GURI 9 000044 C MOVE TKNURI T#NURI 9 000045 C MOVE TKZURI T#ZURI 9 000046 C MOVE TKUZAN T#UZAN 9 000047 C MOVE TKGEND T#GEND 9 000048 C EVAL OUT=%TRIM(OUT) + 000049 C BL + ' 得意先番号 = ' + TKBANG + BR + NL + 000050 C BL + ' 得意名 = ' + TKNAKJ + BR + NL + 000051 C BL + ' 住所1 = ' + TKADR1 + BR + NL + 000052 C BL + ' 住所2 = ' + TKADR2 + BR + NL + 000053 C BL + ' 電話番号 = ' + TKTELE + BR + NL + 000054 C BL + ' 最終入金日 = ' + 000055 C %SUBST(D:1:2) + '/' + 000056 C %SUBST(D:3:2) + '/' + 000057 C %SUBST(D:5:2) + BR + NL + 000058 C '<UL>' + 000059 C LI + ' 当月売上高 = ' + T#GURI + BR + NL + 000060 C LI + ' 当年売上高 = ' + T#NURI + BR + NL + 000061 C LI + ' 前年売上高 = ' + T#ZURI + BR + NL + 000062 C LI + ' 売掛金残高 = ' + T#UZAN + BR + NL + 000063 C LI + ' 信用限度額 = ' + T#GEND + BR + NL + 000064 C '</UL>' 000065 C ELSE 000066 C* (得意先番号が存在しない場合) 000067 C EVAL OUT=%TRIM(OUT) + HTML(15) + NL 000068 C ENDIF
83
• ソース・コード 3 of 3000069 C* HTML トレーラー 000070 C CAT HTML(13):0 OUT 000071 C CAT NL :0 OUT 000072 C* 標準出力への書出し 000073 C ' ' CHECKR OUT OUTLN 000074 C CALLB 'QtmhWrStout' 000075 C PARM OUT 000076 C PARM OUTLN 000077 C PARM QUSEC 000078 C* 000079 C SETON LR 000080 C RETURN 000081 **CTDATA HTML 000082 CONTENT-TYPE: TEXT/HTML 00083 00084 <center><H1>CGI(ILE-RPG)</H1></center>00085 <HR>00086 <center><H2>得意先マスター検索 </H2></center>00087 <FORM method="GET" action="/cgi-bin/CGI01.PGM">00088 5桁の得意先番号を入力し、検索ボタンを押して下さい。 <BR><BR>00089 <INPUT TYPE="TEXT" NAME="CUSTNO" SIZE="6" MAXLENGTH="5" VALUE="">00090 <INPUT TYPE="SUBMIT" VALUE="検索 ">00091 <INPUT TYPE="RESET" VALUE="クリア ">00092 </FORM>00093 <HR>00094 </BODY></HTML>00095 00096 <B><I> 該当する得意先なし。 </I></B>
84
– コンパイル• RPG モジュールの作成
– CRTRPGMOD MODULE(CGILIB/CGI01)SRCFILE(CGILIB/QRPGLESRC)
SRCMBR(*MODULE)DBGVIEW(*ALL)
• RPG プログラムの作成– CRTPGM PGM(CGILIB/CGI01) MODULE(*PGM)
BNDSRVPGM(QTCP/QTMHCGI)