第4章 Servlet環境の構築

,,,
,,,,
,,,
,,,,
,,,
,,,,
,,,,
,,,,
,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,
,,
,,,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,,,
,,,,,
,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,
,,
,,
,,
,,,,
,,,, ,,
,,,,,,
InterBase 5 for Linux Chapter 4
第4章
Servlet環境の構築
4.1 Servlet について
ダイナミックな HTML ドキュメントを生成する方法として SSI や CGI などがあります。ただ
し、SSI はセキュリティの確保に不安がある、CGI は複数アクセスが発生した場合パフォーマン
スの劣化が起こりやすいなどの問題があります。CGI のパフォーマンスの問題は、クライアント
の要求ごとに新規のプロセスが作成され、CGI プログラムの実行が起こるために発生します。こ
れらの問題を解決する手段として、ISAPI/NSAPI などを利用したダイナミックリンクなどの使
用や Apache のモジュールの使用などがあります。CGI プログラムは Perl などのスクリプト言語
を使用しないかぎり、プラットフォームに依存します。
これらの解決する選択の 1 つとして Java Servlet があります。Java Servlet は、プラットフォー
ムに依存しない、サーバーサイドプログラムで、Java プラットフォームの一部である Java Servlet
API を使用して作成されます。Java を使用するため、Java の持つ“Write Once, Run Anywhere”
の恩恵により小規模からスーパーコンピュータを使用した大規模までのスケーラビリティを持つ、
CGI や SSI のようにダイナミックな HTML ドキュメントの生成も可能となっています。
Servlet は CGI と違い、Servlet は一度クライアントからのリクエストにより Java VM( Virtual
Machine )にロードされると、Servlet が変更されないかぎり 2 度とロードされることがなくクラ
イアントからのリクエストを処理します。クライアントからのリクエストがないときは待機状態
としてメモリ上におかれています。メモリ上におかれているためきわめて高速に動作し、静的な
情報( 永続的な情報)は Servlet を実行する複数回のリクエストにわたって共用できるため、複数
のユーザー間で情報を共有することができるようになっています。開発者の立場から考えた場合、
113
第4章 Servlet 環境の構築
Servlet は Web サーバーの内部については一切考える必要がなく、フォームデータ、サーバーヘッ
ダー、Cookie などはすべて Servlet API が提供する基盤クラスによって処理されるようになって
います。
Servlet は単にダイナミックな HTML ドキュメントを生成できるだけでなく、Servlet の連鎖
や Servlet 間通信という機能が提供されています。
Servlet の連鎖機能とは、ある Servlet の出力を他の Servlet の入力にパイプ処理する機能で、
これらを複数の Servlet に対して継続するものです。この単純ながら強力な概念により、さまざ
まな Servlet を連鎖してシームレスに動作させることができるようになります。
Servlet 間通信機能とは、ある Servlet から別 Servlet への要求、Java Applet と Servlet との
通信、Servlet と Java アプリケーションとの通信など、Servlet と別の Java プログラムとの通信
機能です。通信手段としては、Java で使用できる RMI だけでなく、CORBA の使用も可能なの
で非常に複雑なシステムの Web フロントエンドとしての役目を Servlet に持たせることが可能に
なっています。
Servlet は非常に奥が深いテクノロジーで、なかなかイメージがつかみにくいですが、これから
Web を利用してシステムの構築を考慮した場合には拡張性と将来性のあるものです。
この章では、Linux 上で Servlet を動作させる環境の構築方法について説明していきます。
4.2 Linux JDK について
1999 年 12 月に Sun Microsystems 社より、Linux 版の JDK 1.2.2 の RC1 が発表されました。
Linux 版の JDK というと blackdown によりポーティングされてきました。JDK 1.2 より Linux
も正式プラットフォームの 1 つとして、Sun Microsystems よりリリースされます。本書の執筆
段階では、JDK 1.2.2 RC2 がリリースされたばかりなので、こちらの JDK を使用していきます。
Linux 版の JDK は Sun Microsystems 社のサイトからダウンロードできます。本書が書店に
並ぶころには正式版がリリースされていることと思います。
http://www.java.sun.com/
4.3 Servlet Engine について
Servlet を構築するには Servlet API が必要となります。また、作成した Servlet を動作させる
には Servlet Engine が必要です。Servlet engine には表 4-1 のようなものがあり、アドオン型
のもの、Web サーバーとの一体型のもの、組み込み型のものの 3 タイプがあります。
114
4.4 JSDK について
表 4-1 Servlet Engine の種類
製品名
(ベンダー)
タイプ
サポートしている Web サーバー
Apache JServ
The Java-Apache Project
アドオン
Apache
( UNIX 、Windows 95/98/NT )
JRun
Live Software
アドオン
Apache 、IIS 、
Netscape FastTrack/Enterprise
Java Web Server
Sun Microsystems
一体型
----------------------------
StarNine's WebSTAR
組み込み型
----------------------------
Apache JServ 以外は有料の製品となっており、Servlet Engine によってサポートしている
Servlet API のバージョンと JDK のバージョンが異なります。本書では、Apache といちばん親
和性の高い Apache JServ を使用します。
4.4 JSDK について
Java は API( Application Programming Interface )という形式でさまざまな機能が提供され
ています。オブジェクト指向に基づいて設計されている Java の API もオブジェクト指向に基づ
いて設計されています。
Servlet API は 1996 年 8 月に Jeeves Alpha 1.0 とともに登場しました。初めは、現在の Java
Web Server の前進である Jeeves の一部の機能として用意されており、明確に Servlet API として
バージョンが定義されたのは 1998 年 6 月にリリースされた JSDK 2.0
( Java Servlet Development
Kit 2.0 )からとなります。1998 年 10 月に JSDK 2.1 の使用が公開され、すでに JSDK 2.1 がリリー
スされています。
Servlet API には 2 つのパッケージがあります。
●
javax.servlet パッケージ
javax.servletServlet インターフェイスが Servlet のライフサイクルを定義しているほか、
Servlet への入出力など一般的なネットワークサービスを定義している。
●
javax.servlet.http パッケージ
ネットワークサービスの中で特に HTTP( HyperText Tranfer Protocol )に依存した通信を
定義している。HTTP ヘッダーの取り扱い、HTTP Cookie やセッション管理のためのクラ
スが用意されている。
Linux 用の JSDK はありませんが、Solaris 版のものを流用することで Linux 上でも Servlet
API を使用できます。
115
第4章 Servlet 環境の構築
JSDK は以下のサイトからダウンロードできます。
●
Servlet Development Kit のサイト
http://java.sun.com/products/servlet/index.html
4.5 Apache JServ について
Apache JServ は The Java-Apache Project Team によって開発・保守されている Apache で
使用可能な 100% Pure Java の Servlet Engine です。現在の最新バージョンである Apache JServ
1.0 は JSDK 2.0 に準拠しています。また、ディストリビューションパッケージには簡単に Apache
に組み込むことができる DSO タイプの mod_jserv モジュールのバイナリが納められいるものが
あります。Apache JServ は Apache と同じようにソースコードが公開されており、
( Java VM
が稼働すれば)Apache の稼働するプラットフォームすべてで稼働するという大きなメリットがあ
ります。
4.6 Apache JServのセットアップ
それでは、本書で使用する Apache JServ の環境を構築してみたいと思います。第 3 章で Apache
のソースコードからの構築を説明しましたが、Apache JServ の環境を構築するためには Apache
のソースコードも必要となります。DSO 対応のモジュールにすることも、Apache と静的にリン
クすることもできるようになっており、ここでは静的にリンクする方法で環境を構築します。
環境を構築するにあたり、以下のソフトウェアが必要となります。Apache と Apache JServ
は本書付属の CD-ROM に納められていますが、JDK 、JSDK は Web サイトからダウンロードす
る必要があります。
●
Apache JServ の環境を作成するのに必要なソフトウェア
JDK
jdk1_2_2rc2-linux-i386.tar.gz
( 約22MB )
JSDK
jsdk20-solaris2-sparc.tar.Z
( 約300KB )
Apache
apache_1_3_9_tar.gz
( 約1.4MB )
JServ
Apache-JServ-1_0_tar.gz
( 約360KB )
ここでは/tmp ディレクトリに Apache と Apache JServ のソースコードを解凍し、JSDK と
JDK は/usr/local 以下にそれぞれ解凍することとします。Apache JServ の configure コマンド
のオプションに以下のものがあります。
116
4.6 Apache JServ のセットアップ
●
Apache JServ の configure コマンドのオプション
--with-apache-src
--with-jdk-home
--with-enable-apache-conf
--prefix
--with-jsdk
…apache のソースが入っているパス。ここでは/tmp/apache_1.3.9
…JDK のパス。ここでは/usr/local/jdk1.2.2
…apache のコンフィグレーションを行うかどうか
…JServ のインストール先
…JSDK のパス。ここでは CLASSPATH に指定してあるので必要なし
Apache JServ を Apache と静的にリンクするためには Apache のソースコードが必要だと前述
しましたが、静的にリンクする場合、Apache JServ の configure コマンドの“--with-apache-src”
オプションで Apache のソースの位置を指定します。また、Apache JServ は Apache のヘッダー
ファイルを使用するので、一度 Apache 側の configure コマンドを実行しておき、環境に合った
ヘッダーファイルを生成しておく必要があります。それでは、Apache JServ の環境を作成して
いきたいと思います。
1
Apache の configure コマンドを実行し、Apache JServ の configure コマンドに必要なヘッ
ダーを生成する
[root@linuxpc /tmp]# cd apache_1.3.9
[root@linuxpc apache_1.3.9]# ./configure
Configuring for Apache, Version 1.3.9
+ Warning: Configuring Apache with default settings.
+ This is probably not what you really want.
+ Please read the README.configure and INSTALL files
+ first or at least run ’./configure --help’ for
+ a compact summary of available options.
+ using installation path layout: Apache (config.layout)
Creating Makefile
Creating Configuration.apaci in src
Creating Makefile in src
+ configured for Linux platform
+ setting C compiler to gcc
+ setting C pre-processor to gcc -E
+ checking for system header files
+ adding selected modules
+ doing sanity check on compiler and options
Creating Makefile in src/support
Creating Makefile in src/main
Creating Makefile in src/ap
Creating Makefile in src/regex
Creating Makefile in src/os/unix
Creating Makefile in src/modules/standard
2
JDK と JSDK のクラスパスを設定する
[root@linuxpc apache_1.3.9]# cd ../ApacheJServ-1.0
[root@linuxpc ApacheJServ-1.0]# export CLASSPATH=/usr/local/jdk1.2.2/jre/lib/ \
rt.jar:/usr/local/JSDK2.0/lib/jsdk.jar
117
第4章 Servlet 環境の構築
3
Apache JServ の configure コマンドの実行
[root@linuxpc ApacheJServ-1.0]# ./configure --prefix=/usr/local/jserv \
--with-apache-src=/tmp/apache_1.3.9 --with-java-home=/usr/local/jdk1.2.2 \
--enable-apacheconf
loading cache ./config.cache
Configuring ApacheJServ/1.0
checking for a BSD compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking whether make sets ${MAKE}... yes
checking for working aclocal... found
checking for working autoconf... found
checking for working automake... found
checking for working autoheader... found
checking for working makeinfo... found
checking host system type... i586-pc-linux-gnu
checking for ranlib... ranlib
checking for gcc... gcc
……中略……
You might consider putting frequently used options into ./configure-options
For further information please read the documentation in the docs directory.
Many frequently asked questions are answered in the FAQ-O-Matic:
http://java.apache.org/faq/
4
Apache JServ の make の実行
[root@linuxpc ApacheJServ-1.0]# make
Making all in src
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/src’
Making all in c
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0/src/c’
make[2]: Nothing to be done for ‘all’.
make[2]: Leaving directory ‘/tmp/ApacheJServ-1.0/src/c’
Making all in java
……中略……
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0/example’
Making all in conf
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/conf’
make[1]: Nothing to be done for ‘all’.
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0/conf’
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0’
make[1]: Nothing to be done for ‘all-am’.
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0’
118
4.6 Apache JServ のセットアップ
5
Apache JServ の/usr/local/jserv へのインストール
[root@linuxpc ApacheJServ-1.0]# make install
Making install in src
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/src’
Making install in c
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0/src/c’
make[3]: Entering directory ‘/tmp/ApacheJServ-1.0/src/c’
……中略……
Making install in docs
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/docs’
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0/docs’
make[2]: Nothing to be done for ‘install-exec-am’.
make[2]: Nothing to be done for ‘install-data-am’.
make[2]: Leaving directory ‘/tmp/ApacheJServ-1.0/docs’
/bin/sh ../src/scripts/build/unix/mkinstalldirs /usr/local/jserv/docs /usr/ \
local/jserv/docs/api /usr/local/jserv/docs/images /usr/local/jserv/docs/ \
install /usr/
local/jserv/docs/protocol /usr/local/jserv/docs/future
mkdir /usr/local/jserv/docs
mkdir /usr/local/jserv/docs/api
mkdir /usr/local/jserv/docs/images
mkdir /usr/local/jserv/docs/install
mkdir /usr/local/jserv/docs/protocol
mkdir /usr/local/jserv/docs/future
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0/docs’
Making install in example
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/example’
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0/example’
make[2]: Nothing to be done for ‘install-exec-am’.
make[2]: Nothing to be done for ‘install-data-am’.
make[2]: Leaving directory ‘/tmp/ApacheJServ-1.0/example’
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0/example’
Making install in conf
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0/conf’
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0/conf’
make[2]: Nothing to be done for ‘install-exec-am’.
make[2]: Nothing to be done for ‘install-data-am’.
make[2]: Leaving directory ‘/tmp/ApacheJServ-1.0/conf’
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0/conf’
make[1]: Entering directory ‘/tmp/ApacheJServ-1.0’
make[2]: Entering directory ‘/tmp/ApacheJServ-1.0’
make[2]: Nothing to be done for ‘install-exec-am’.
make[2]: Nothing to be done for ‘install-data-am’.
make[2]: Leaving directory ‘/tmp/ApacheJServ-1.0’
make[1]: Leaving directory ‘/tmp/ApacheJServ-1.0’
119
第4章 Servlet 環境の構築
6
Apache の configure コマンドの実行。作成した Apache JServ のモジュールの追加を指定
[root@linuxpc ApacheJServ-1.0]# cd ../apache_1.3.9
[root@linuxpc apache_1.3.9]# ./configure --prefix=/usr/local/apache \
--activate-module=src/modules/jserv/mod_jserv
Configuring for Apache, Version 1.3.9
+ using installation path layout: Apache (config.layout)
+ activated jserv module (modules/jserv/mod_jserv)
Creating Makefile
……中略……
make[2]: Leaving directory ‘/tmp/apache_1.3.9/src/support’
<=== src/support
make[1]: Leaving directory ‘/tmp/apache_1.3.9’
<=== src
7
Apache の/usr/local/apache へのインストール
[root@linuxpc apache_1.3.9]# make install
make[1]: Entering directory ‘/tmp/apache_1.3.9’
===> [mktree: Creating Apache installation tree]
./src/helpers/mkdir.sh /usr/local/apache/bin
……中略……
make[1]: Leaving directory ‘/tmp/apache_1.3.9’
+--------------------------------------------------------+
| You now have successfully built and installed the
|
| Apache 1.3 HTTP server. To verify that Apache actually |
|
| works correctly you now should first check the
|
| (initially created or preserved) configuration files
|
|
/usr/local/apache/conf/httpd.conf
|
|
|
|
| and then you should be able to immediately fire up
|
| Apache the first time by running:
|
|
/usr/local/apache/bin/apachectl start
|
|
|
The Apache Group
|
| Thanks for using Apache.
http://www.apache.org/ |
|
+--------------------------------------------------------+
以上で、Apache JServ の環境が構築されましたが、この状態で Apache を起動すると以下の
ようなエラーメッセージが表示されます。
[root@linuxpc apache_1.3.9]# /usr/local/apache/bin/apachectl start
You must specify a secret key, or disable this feature.
To disable, add "ApJServSecretKey DISABLED" to your Apache configuration file.
To use, add "ApJServSecretKey {filename}" where filename is document
with more or less random contents, and perhaps a few kb in length.
The Apache JServ documentation explains this in more detail.
/usr/local/apache/bin/apachectl start: httpd could not be started
120
4.6 Apache JServ のセットアップ
これは、Apache JServ の環境設定が httpd.conf に指定されていないために起こるものです。
jserv.conf を httpd.conf と同一ディレクトリにコピーしてから、
[root@linuxpc apache_1.3.9]# cp /tmp/ApacheJServ-1.0/example/jserv.conf /usr/ \
local/apache/conf
/usr/local/apache/conf/httpd.conf を開き、末尾に以下の行を追加してから実行してみてくださ
い。今度は問題なく動作するはずです。
#for Apache JServ
Include /usr/local/apache/conf/jserv.conf
続いて、Apache JServ に付属するサンプルを使用して Servlet が正しく動作するかを確認し
ます。Apache JServ のサンプルはインストールされていないので、手動でコピーします。
[root@linuxpc apache_1.3.9]# cp -r /tmp/ApacheJServ-1.0/example /usr/loccal/ \
apache
サンプルを実行する前に、Apache JServ の環境設定を行います。Apache JServ は jserv.conf
という環境設定ファイルにて Apache JServ の環境の定義を行い、servlet を動作させるための定
義は ApJServProperties に設定された環境設定ファイル jserv.properties で行います。一般的に
使用する設定命令は表 4-2 のとおりです。
表 4-2 jserv.conf の設定命令
設定命令
ApJServManual
説明
Apache が Java VM を起動するかどうか。On=手動|Off=自動 デフォルトは
“ off ”
ApJServProperties
Apache JServ を起動するための設定ファイル。ApJServMaual が Off の場合
のみ有効
ApJServLogFile
ログファイルの格納場所
ApJServDefaultProtocol
Apache JServ がホストと接続するためのプロトコル。デフォルトは
“ ajpv11 ”
ApJServDefaultPort
Apache JServ が監視するポート番号。デフォルトは ajpv11 の
“ 8007 ”
ApJServSecretKey
Apache JServ を使用するためのセキュリティキー。認証を行い、そのユーザー
またはグループだけ servlet の使用を許可できる。デフォルトは
“ DISABLE ”
ApJServMount
ApJServMount [url] [jserv-url] と指定する。JServ 用のエリアスの設定が可
能
それでは、先ほど/usr/local/apache/conf にコピーした jserv.conf を次のように修正して、環
境を整えましょう。
ApJServProperties /usr/local/apache/example/jserv.properties
ApJServLogFile
/usr/local/apache/example/jserv.log
ApJServMount
/servlets /example
121
第4章 Servlet 環境の構築
続いて、servlet を動かすための環境設定が書かれている jserv.properties を修正します。この
環境設定ファイルには JDK の場所、JSDK の場所などが書かれており、servlet を動作させるた
めの環境設定が書かれています。このファイルは example ディレクトリに納められています。一
般的に使用する設定命令は表 4-3 のとおりです。
表 4-3 jserv.properties の設定命令
設定命令
説明
wrapper.bin
Java VM のパス。デフォルトは/usr/bin/java
wrapper.classpath
Java の classpath。一 般 的 に 次 の 3 つ に は パ ス を 通 す。classes.zip 、
Apache-JServ.jar、jsdk.jar
port
JServ が監視するポート番号
zones
servlet のエリアス。Zone
<zone list>.properties
servlet の環境設定ファイルのパス
Apache JServ の configure を起動したときに自動的に作成しており、example の zone がすで
に作成されています。example を/tmp 以下のパスで動かすのであれば何も変更することはあり
ませんが、ここでは、/usr/local/apache/example に含まれているサンプルを起動するように修
正します( リスト 4-1 )
。
リスト 4-1 jserv.properties の修正箇所
( 旧)wrapper.classpath=/tmp/ApacheJServ-1.0/src/java/Apache-JServ.jar
↓
( 新)wrapper.classpath=/usr/local/jserv/lib/ApacheJServ.jar
( 旧)example.properties=/tmp/ApacheJServ/example/example.properties
↓
( 新)example.properties=/usr/local/apache/example/example.properties
それではサンプルの Hello.java を使って sevlet が正しく動くかどうかを確認してみましょう。す
でに、jserv.properties に example.properties の位置を設定しました。最後に example.properties
の設定をコピー先に合うように修正します( リスト 4-2 )
。
リスト 4-2 example.properties の修正箇所
( 旧)repositories=/tmp/ApacheJServ-1.0/example
↓
( 新)repositories=/usr/local/apache/example
Apache を次のように再起動して、ブラウザから Hello.java を呼び出してみましょう。
122
第6章 Delphi を使用した Web アプリケーション
●
TDataSetTableProducer コンポーネント
複数のレコードを HTML テーブルに変換し
ます。
●
TDataSetPageProducer コンポーネント
HTML 透過タグをカレントレコードの値で置
換します。
6.6 WebBroker によるプログラミング
6.6.1 コンテンツプロデューサにHTMLテンプレートファイルを指定する方法
WebBroker では、コンテンツプロデューサによりプログラムと HTML を分離できます。さら
に、コンテンツプロデューサに設定する HTML テンプレートをファイルから読み込むことによ
り、次のメリットが発生します。
●
プログラムを変更せずに HTML だけを変更できる
●
HTML を専用の HTML エディタで編集できる
●
プログラムを開発する担当者と HTML を作成する担当者を別々にできる
コンテンツプロデューサに、HTML テンプレートファイルを指定するのは、HTMLFile プロパ
ティで行います。しかし、HTMLFile プロパティには、HTML テンプレートファイルへの絶対パ
スを設定するため、後でパスを変更するとき、プログラムを修正する必要があります。特に、テ
スト環境と本番環境ではディレクトリが異なることが多くあります。せっかく、テスト環境でテ
ストを完了したプログラムを、本番環境で稼動させる前に、パスを変更するためにプログラムを
修正するということは、あまり好ましいことではありません。
一般的に HTML テンプレートファイルは、Web サーバーアプリケーションと同じディレクト
リか、そのサブディレクトリに格納されます。そこで、DBLinux 受注管理システムでは、次のよ
うにして、Web サーバーアプリケーションのディレクトリが設定されるようにしています。
1
HTMLFile プロパティに、Web サーバーアプリケーションのディレクトリを表す文字列
( <SelfDir>)を埋め込む。
pgpMenu.HTMLFile := ’<SelfDir>Y menu.htmt’;
pgpStockList.HTMLFile := ’<SelfDir>Y stocklist.htmt’;
2
Web サーバーアプリケーション起動時に、その文字列( <SelfDir>)を Web サーバーアプ
リケーションのディレクトリに置換( リスト 6-1 )
リスト 6-1 Web サーバーアプリケーションのディレクトリを設定
// Web モジュールの OnCreate イベントハンドラ
procedure TwmMain.wmMainCreate(Sender: TObject);
274
6.6 WebBroker によるプログラミング
var
I: Integer;
SelfPath: string;
FileName: array[0..MAX_PATH- 1] of Char;
begin
// Web サーバーアプリケーションのパスを取得
// この方法は、ISAPI DLL の場合です。CGI の場合、ParamStr(0) で取得します。
GetModuleFileName( hInstance, FileName, SizeOf(FileName) );
SelfPath := ExtractFileDir( FileName );
// Web モジュールに配置された TPageProducer コンポーネントを探す
for I:=0 to ComponentCount-1 do
begin
if Components[I] is TPageProducer then
begin
with TPageProducer(Components[I]) do
begin
// '<SelfDir>' を Web サーバーアプリケーションのパスに置換
HTMLFile := StringReplace( HTMLFile, ’<SelfDir>’,
SelfPath, [rfIgnoreCase] );
end;
end;
end;
end;
これで、テスト環境と本番環境で Web サーバーアプリケーションのディレクトリが異なって
いてもプログラムを修正する必要がありません。
6.6.2 TPageProducerコンポーネントのHTML透過タグを置換する方法
TPageProducer コンポーネントは 、Content プロパティにアクセスされると 、指定された
HTML テンプレートの HTML 透過タグを任意の文字列に置換して、HTML を作成します。
たとえば、在庫一覧画面では、HTMLFile プロパティに指定された stocklist.htmt ファイル(リ
スト 6-2 )を読み込んで、<#LIST>などの HTML 透過タグを在庫一覧の HTML テーブルなど
に置換して、在庫一覧画面の HTML を作成しています。*9
リスト 6-2 在庫一覧画面の HTML テンプレート∗9
<HTML>
<HEAD>
<TITLE>DBLinux 受 注 管 理 シ ス テ ム 在 庫 一 覧 </TITLE>
</HEAD>
<BODY>
<FORM action="/cgi-bin/dblinux/dblinuxweb.dll/stocklist"> 検 索 条 件 <BR>
*9 解説の関係から、実際の stocklist.htmt ファイルとは若干異なります。
275
第6章 Delphi を使用した Web アプリケーション
商 品 コ ー ド <INPUT size="10" type="text" name="gc" maxlength="10" value="<#GC>">
商 品 名 <INPUT size="40" type="text" name="gn" maxlength="40" value="<#GN>"><BR>
ソ ー ト 順 :<INPUT type="radio" name="sr" value="gc" <#SR_GC>> 商 品 コ ー ド
<INPUT type="radio" name="sr" value="gn" <#SR_GN>> 商 品 名 <BR>
<INPUT type="submit" value=" 検 索 ">
<INPUT type="reset" value=" 条 件 ク リ ア ">
</FORM>
<#RESULT>
<P>
<#LIST>
<P>
<P>
<#PREV> <#NEXT>
<P><A href="/dblinux/menu.html"><IMG src="/dblinux/images/menu.gif" width="150"
height="40" border="0" alt=" メ ニ ュ ー へ "></A></P>
</BODY>
</HTML>
TPageProducer コンポーネントが HTML 透過タグを見つけると、OnHTMLTag イベントが
発生します。HTML 透過タグの置換は、OnHTMLTag イベントハンドラで行います(図 6-40 )
。
HTML 透過タグを置換するときに、HTML 作成を要求したメソッドが持つデータが必要にな
る場合があります。
たとえば、在庫一覧画面では、
[ 検索]ボタンが押されたときの商品コードなどの検索条件を、
新しく作成する在庫一覧画面にも表示します。そのため、在庫一覧画面の HTML 透過タグを置
換するときに、フォームデータから取り出した検索条件が必要になります。この場合、次のよう
にして、OnHTMLTag イベントハンドラにデータを受け渡します( 図 6-43 )
。
1
Web モジュールのクラス宣言に、受け渡すデータのフィールド( 変数)を宣言。
TwmMain = class(TWebModule)
private
FGoodsCode: string; // 商品コードのフィールド
FGoodsName: string; // 商品名のフィールド
public
end;
2
アクション項目イベントハンドラで、Content プロパティにアクセスする前に、フィール
ドに値を設定
// ブラウザから送られたフォームデータをフィールドに設定する
FGoodsCode := UpperCase( Request.QueryFields.Values[ ’gc’ ] );
FGoodsName := Request.QueryFields.Values[ ’gn’ ];
// HTML テンプレートから HTML を作成
Response.Content := PageProducer1.Content;
276
6.6 WebBroker によるプログラミング
3
HTML 透過タグが見つかると、OnHTMLTag イベントハンドラが呼び出される
4
OnHTMLTag イベントハンドラで、フィールドを参照して、HTML 透過タグを置換
procedure TwmMain.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
if CompareText( TagString, ’GC’ ) = 0 then
begin
// 条件 商品コードの値を設定
ReplaceText := FGoodsCode;
end
else if CompareText( TagString, ’GN’ ) = 0 then
begin
// 条件 商品名の値を設定
ReplaceText := FGoodsName;
end;
end;
アクション項目
イベントハンドラ
②Contentプロパティ
にアクセス
①値の設定
フィールド
(変数)
TPageProducer
コンポーネント
③OnHTMLTag
イベント
④値の取得
OnHTMLTag
イベントハンドラ
図 6-43 フィールドでデータを受け渡す
OnHTMLTagイベントハンドラでのタグ名の比較
TPageProducer コンポーネントが HTML 透過タグを見つけると、OnHTMLTag イベントが発生します。
そのとき、TPageProducer コンポーネントは、OnHTMLTag イベントハンドラの TagString パラメータ
に、HTML 透過タグのタグ名を設定します。OnHTMLTag イベントハンドラでは、このタグ名を比較して、
タグ名ごとに処理を振り分けます。
このタグ名の比較には、注意が必要です。Object Pascal の文字列比較は、拡張 ASCII 文字セットの文字
順に比較されます。よって、大文字小文字は別物として扱われます。タグ名は厳密に比較する必要はないの
で、大文字小文字を同一視したほうが扱いやすくなります。そのため、タグ名の比較には、大文字小文字を同
一視で比較する CompareText 関数を使います。
procedure TwmMain.pgpStockListHTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
277
第6章 Delphi を使用した Web アプリケーション
if CompareText( TagString, ’username’ ) = 0 then
begin
// username タグの置換処理
end
else if CompareText( TagString, ’password’ ) = 0 then
begin
// password タグの置換処理
end;
end;
//
username タグ
//
password タグ
CompareText 関数は、パラメータに渡された 2 つの文字列を、大文字小文字同一視で比較して、等しけ
れば「 0 」を返します。
あらかじめ URLエンコードしておくこと
URL の Query 部に設定する値は、
HTML の中に URL を埋め込むことは、しばしばあります。たとえば、A エレメントや IMG エレメント
です。
<A HREF="/cgi-bin/dblinux/dblinuxweb.dll/stocklist?ln=11"> 次 の 10 件 へ </A>
<IMG src="/cgi-bin/dblinux/dblinuxweb.dll/goodsimage?gc=BOR0001" border="0">
このとき注意しなければならないのが、URL の QueryField 部の値です。このリストの A エレメントであ
れば、
「 ln=11 」の「 = 」の後ろの「 11 」です。
本来、Web ブラウザでは、入力されたフォームデータを URL エンコードして、Web サーバーに送りま
す。しかし、A エレメントや IMG エレメントなどで指定された URL の QueryField 部のデータは、URL エ
ンコードされません。そのため、Web サーバーアプリケーションで URL デコードすると、間違ったデータ
になります。
A エレメントや IMG エレメントなどで URL を指定する場合は、QueryField 部の値を URL エンコードし
たものを設定してください。
WebBroker では、URL エンコードする HTTPEncode 関数が用意されているので、これを利用します。
HTTPEncode 関数を使って IMG タグを設定する例は、次のとおりです。
ReplaceText
:= ’<A HREF="/cgi-bin/dblinux/dblinuxweb.dll/stocklist?’
+ ’ln=’
+ HTTPEncode(’11’)
+ ’"> 次 の 10 件 へ </A>’;
6.6.3 セッション管理
DBLinux 受注管理システムでは、画面ごとに利用できる社員を制限しています。たとえば、入
荷予定一覧画面は、入荷担当部署の社員しか見ることができません。DBLinux 受注管理システム
では、始めのログイン画面で、ユーザー名とパスワードを入力してから、アプリケーションにロ
グインします。その後、画面を表示するときに、その画面を利用できる社員かチェックして、利
用できる場合のみ画面を表示します。
278
,,,
,,,,
,,,
,,,,
,,,
,,,,
,,,,
,,,,
,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,
,,
,,,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,,,
,,,,,
,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,
,,
,,
,,
,,,,
,,,, ,,
,,,,,,
InterBase 5 for Linux Chapter 7
第7章
Servlet によるデータアクセス
7.1 Servletの利用
第 6 章で Delphi を使用した CGI の作成方法を説明しました。Delphi を使用することで柔軟
な Web ベースのシステムを構築できますが、Delphi が Windows プラットフォーム( Windows
95/98/NT )でしか動作しないため、Linux をデータベースサーバーとしてしか利用できません。
システムをすべて Linux で構築したいのであれば、Perl 、PHP3 、Phython 、Java などを使用す
るとよいでしょう。Java は Perl 、PHP3 などのスクリプト言語と違って、非常に柔軟性に富んで
おり、クライアント側、サーバー側の両方を構築することができます。また、RMI や CORBA を
利用することにより、分散環境を実現することもできます。ここでは、Java を利用して Web ベー
スのアプリケーションを構築してみたいと思います。構築する内容は、第 6 章で Delphi で構築し
たものと同じものです。同じアプリケーションを別の言語を使用して構築するのでそれぞれの言
語の特性がより明確になるでしょう。
Java で動的な HTML ドキュメントを生成するには次の 3 通りの方法があります。
●
Servlet を利用
●
SSI( Server Side Include )を利用
●
JSP( Java Server Page )を利用
通常、Servlet を利用するのが一般的ですが、JSP は新しい技術なので、これから先使用する
人も増えてくると思います。Servlet と JSP の違いは、Servlet は Java ですべての HTML ドキュ
メントを生成するのに対し、JSP では HTML の中に埋め込まれている Java のスクリプトから
283
第7章 Servlet によるデータアクセス
Java のプログラムが呼び出されます。JSP はよく ASP( Active Server Page )と似ているともい
われます。確かに、JSP と ASP は HTML の中の特殊なタグによってサーバーサイドのプログラ
ムが呼び出されるという共通点がありますが、拡張性、可用性を考えると JSP のほうが優れてい
ると筆者は思います。JSP はマルチプラットフォームですが、ASP は基本的に Windows プラッ
トフォームに限定されたものだからです。
Apache などでは Java で SSI を利用するための mod_java などのモジュールがありますが、あ
まり一般的ではありません。また、JSP を使用するには JDK 1.2 と JSDK 2.1 が必要になります。
1999 年 12 月現在、Linux 版の JDK 1.2 はまだ RC2 の段階です。JDK 1.2 の正式版がリリースさ
れることで、Linux 上で JSP を使用する人も増えていくでしょう。
Servlet を利用するためには JSDK( Java Servlet Development Kit )と Servlet を動作させる
Servlet エンジンが必要となります。JSDK には、HTTP を使用するための API が用意されてお
り、これらの API は Servlet クラスや httpServlet クラスなどのクラスでカプセル化されており、
必要なクラスを使用していくことで Servlet を作成できます。これは Delphi の VCL コンポーネ
ントが受け持つ役割と似ています。JSDK の詳細については JSDK に付属するドキュメントを参
照してください。クラス構造、API などの説明が書かれています。
第 4 章で Servlet の環境の構築について説明しましたが、Linux 版の JSDK はないので Solaris
版の JSDK を流用します。Sun Microsystems 社のサイトからダウンロードできます。JSDK には
2.0 、2.1 、2.2 というようにバージョンがあります。使用したいエンジンがどのバージョンの JSDK
をサポートしているかを確認する必要があります。本書で使用している Apache JServ 1.0 の場合
では JSDK 2.0 を使用します。一部の Servlet エンジンや JBuilder などの開発ツールには JSDK
の jar ファイルが含まれており、JSDK をダウンロードする必要はありませんが、ドキュメント
が付属していない場合もあるので別にダウンロードしておくことをお勧めします。
Servlet 環境をまだ構築していない方は第 4 章に戻って、お使いの Linux 上に Servlet 環境を
構築してください。
7.2 Servlet API について
Servlet の API の詳細については JSDK に付属するドキュメントを参照していただくことにし
て、ここでは Servlet の API の概要と API がどのように動いているかについて説明します。
7.2.1 Servlet APIの概要
1998 年 10 月に Servlet API version 2.1 の仕様が公開されたため、Windows および Solaris の
プラットフォームでは JSDK 2.1 が主流になりつつありますが、Apache JServ の正式バージョンが
まだ 1.0 のため、Linux の世界では JSDK 2.0 が主流になっています。JSDK 2.1 および JSDK 2.2
に対応した JServ の開発プロジェクトである jakarta のビルドが公開されていくにつれて、Linux
でも JSDK 2.1/2.2 が浸透していくでしょう。
284
7.2 Servlet API について
通常、Java の API は java.net……、java.io……と java で始まりますが、Servlet API は javax.
servlet 、javax.servlet.http と extention を意味する“x”がパッケージ名に付けられており、JSDK
2.0 は次の 2 つのパッケージから構成されています。
●
javax.servlet パッケージ
javax.servlet.Servlet や javax.servlet.ServletResponse などの Servlet のライフサイクルを
定義している 6 つのインターフェイス、javax.servlet.GenericServlet などの Servlet からの出
力と一般的なネットワークサービス上の通信を定義している 3 つの抽象クラス、javax.servlet.
ServletException などの 2 つの例外などが定義されています。
●
javax.servlet.http パッケージ
ネットワークサービスの中で特に HTTP に依存した通信を定義している、具体的なレベ
ルでのクラス群。HTTP のヘッダーの処理を行う javax.servlet.http.HttpServletRequest、
HTTP の response を処理するための javax.servlet.http.HttpServletResponse などの 5 つ
のインターフェイス、HTTP Cookie を使用するための javax.servlet.http.Cookie や HTTP
の Post 、Get 、Put 、Delete を処理する javax.servlet.http.HttpServlet クラスなど 4 つのク
ラスが定義されています。
JSDK 2.0 では HTTP にしか対応していませんが、将来的には FTP( File Transfer Protocol )
や IIOP( Inter-Internet ORB Protocol )などについてもサポートされる予定となっており、さま
ざまなネットワークサービスに対応するようになります。
7.2.2 Servletのライフサイクル
Servlet のライフサイクルは図 7-1 に示すようになります。ライフサイクルを定義しているの
は javax.servlet.Servlet インターフェイスで定義されているメソッドです。
クラスファイル
生成
ロード
初期化
(init())
再ロード
消滅
アンロード
(destroy())
動作
要求/応答
(service())
図 7-1 Servlet のライフサイクル
図 7-1 のライフサイクルは次のように動作します。
1. クラスファイルが Servlet Engine( Java VM )上にロードされ、インスタンスが生成される
2. ロードされたクラスファイルの init() メソッドが起動され、初期化が行われる
285
第7章 Servlet によるデータアクセス
3. 初期化された後の動作状態でクライアントからの要求が発生すると、service() メソッドで
定義されている処理が実行され、応答がクライアントに返される。通常はこの状態で存在
し、service() メソッドが繰り返し実行される
4. 管理ツールなどで明示的にアンロードされたときやクラスファイルが更新されたことを
Servlet Engine が見つけた場合、destroy() メソッドが起動され、servlet がメモリ上から
消滅する
5. クラスファイルが更新されて destroy() メソッドが起動された場合は更新後のクラスファイ
ルがロードされ、インスタンスが生成される
7.2.3 Servletの開発効率
Java は言語自体で、オブジェクト指向、マルチスレッド処理、ガベージコレクション、マルチ
プラットフォームなどの特長を持っています。java 言語を使って記述される Servlet に対しても
これらの特長が有効です。Java 言語は既存のプログラミング言語の長所/短所を分析した結果、
簡素な仕様でしかも、C 、C++言語と同等の記述能力を持っています。GUI を作成した場合、既
存のコンパイラ言語と比較してパフォーマンスの問題が発生する場合もありますが、早い進化を
続けている Java 言語が他の言語と同等のパフォーマンスを持つ日もそれほど遠くはないでしょ
う。そういった短所よりも、Java の持つマルチプラットフォームの特長により、アクセスに応じて
Servlet Engine の動作するプラットフォームを変更することや、新しい JSDK や Servlet Engine
を使用することで機能拡張を簡単に実現したりすることができるという点が重要です。
開発面で考えた場合、すでに数多くのビジュアル開発ツールがリリースされており、近いうち
に Linux プラットフォーム上でも使用できるようになります。こういったビジュアル開発ツール
を使用した場合、JDK をコマンドラインで使用するのに比べ、生産性が数十倍高くなるだけでな
く、初めて Java を書く場合の敷居が低くなります。本書には、JBuilder のトライアル版が付属
しているので、Java を知らない方もトライアル版をインストールして Java の世界を味わってみ
るとよいと思います。きっと、C/C++言語に挫折した人もポインタ操作のない Java ならもう一
度プログラミングの世界に戻ることができると思います。
拡張性を考えた場合、ブラウザベースの検索は Servlet 、更新系は Applet またはアプリケー
ションと分けて共通のビジネスロジックが書かれたパッケージを共有できます。また、小さいプ
ログラムを組み合わせ、ある程度のシステムを作り上げることもそれほど難しくはありません。
Java は RMI や CORBA を使用することでメンテナンス性と拡張性に優れた分散システムを作成
できますし、JNI を利用することで他の言語で書かれた DLL などを利用することも可能です。こ
のように、Java の持つ拡張性をうまく活用することで小さいシステムを大規模なシステムへと拡
張していくことも可能になります。
286
7.3 JBuilder について
7.3 JBuilder について
エディタでプログラムを書き、JDK のコマンドラインコンパイラを使用して Java のプログラ
ムを作成することもできますが、開発ツールを使用したほうが生産性が高くなるだけでなく、初
心者にとっては入りやすいでしょう。この章で作成する Servlet を構築する開発ツールとしてイ
ンプライズ社の JBuilder を使用します。本書に JBuilder 3 Enterprise Trial Edition が付属して
います。JBuilder はビジュアルに設計した画面がすべて Java のソースに反映される、またその
反対にコードに書いたことがビジュアルな設計画面に反映されるという Two-Way 機能を持って
います。生成されるコードはすべて Pure Java です。JBuilder は複数の JDK を使用できる機能
があり、JDK 1.2 が付属する JBuilder 3 に JDK 1.1.8 をインストールすることで JDK 1.1 ベース
のプログラム開発を行うことができます。
図 7-2 は JBuilder の統合開発環境の画面で、設計画面をアクティブにしています。メニューの
下には JBuilder に付属しているさまざまなコンポーネント( JavaBeans )があり、これらのコン
ポーネントを使用することで生産性を高めることができます。また、JBuilder には Servlet ウィ
ザード、Applet ウィザード、配布ウィザードなどのさまざまなウィザード機能があり、これらの
機能を使用することで簡単に作成したいプログラムのひな形を作ることができます。
図 7-2 JBuilder の統合開発環境
287
,,,
,,,,
,,,
,,,,
,,,
,,,,
,,,,
,,,,
,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,,,,,,,,
,,,
,,
,,,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,,,
,,,,,
,
,,
,,,,,
,,,,,
,,,,,
,,,,,
,
,,
,,
,,
,,
,,,,
,,,, ,,
,,,,,,
InterBase 5 for Linux Chapter 8
第8章
携帯電話からのアクセス
8.1 携帯電話で表示可能なHTML について
NTT ドコモの i モード、IDO/セルラー/ツ−カーの EZ アクセスなど携帯電話にブラウザ機能
が装備された携帯電話が販売されています。これらのブラウザ機能を使ってみましょう。まず、そ
れぞれの携帯電話がサポートする HTML ドキュメントについて説明していきます。
8.1.1 iモード対応HTML
i モード対応の HTML は HTML 3.2 のサブセット版である CompactHTML を NTT ドコモが
独自に改良したものです。HTML ベースなので、タグの違いさえ理解してしまえば非常に簡単
に対応ページを作成することができます。現在、i モード対応の HTML ドキュメントには 2 つの
バージョンがあります。Version 2.0 はカラー対応( 502i のみ)となっています。表 8-1 は i モー
ドで使用できるタグの一覧です。ご覧のとおり、ほとんど通常の HTML と同じです。
327
第8章 携帯電話からのアクセス
表 8-1 i モードで使用できるタグ一覧
タグ
書式
内容
Version 1.0
( 全機種で対応可能)
<!-- -->
コメント。画面には表示されない情報を記載
する
<A>
name="マーカ名"
href="URL#マーカ名"
accesskey="char"
マーカーへリンクする
リンク先の URL およびマーカーを指定する
指定されたキーをアクセスキーとして使用す
る
<BASE>
href="URL"
HTML ファイル内で扱う基準にするパスを
指定する
<BLOCKQUOTE>
<BLOCKQUOTE>∼
</BOLOCKQUOTE>
文章をブロック化し、インデントする
<BODY>
<BODY>∼</BODY>
ページとして表示される内容を記載する
<BR>
clear="left | right | all"
改行を指定する。Clear オプションが指定さ
れているときは、BR 以降の文字列の回り込
みを解除する
<CENTER>
<CENTER>∼</CENTER>
文字列やイメージを中央揃えにする
<DIR>
<DIR>∼
<LI>∼
</DIR>
リストを作成する
<DD>
<DL>
<DT>見出し
<DD>内容
</DL>
定義型リストを作成する
<DIV>
align="left|center|right"
タグで囲まれた部分を、指定した表示位置に
揃える
<FORM>
Action="url"
Method="post|get"
CGI にデータを渡すためのフォームを指定す
る
<HEAD>
<HEAD>∼</HEAD>
ページタイトルやサーバー等が利用する情報
を指定する
<H>
align="left|center|right"
見出し
(ヘッダー)
を指定する。携帯電話の機
種で指定されているものがないかぎり、Hn
の n にどの数字を指定しても H4 扱いとなる
<HR>
align="left | center | right"
size="ピクセル数"
width="ピクセル数 | %"
水平線
(区切り記号)
を指定する
<HTM>
<HTML> ... </HTML>
HTML ドキュメントであることを明示する
<IMG>
src="ファイル名"
align="top | middle | bottom |
left | right"
width="ピクセル数 | %"
height="ピクセル数 | %"
hspace="ピクセル数"
vspace="ピクセル数"
alt="文字列"
イメージデータを表示する
328
8.1 携帯電話で表示可能な HTML について
タグ
書式
内容
Version 1.0
( 全機種で対応可能)
<INPUT>
type="text | password |
checkbox | radio | hidden |
submit | reset"
name="フィールド名"
value="データ"
size="文字数"
maxlength="最大文字数"
checked
accesskey="char"
データを入力するテキストボックスやチェッ
クボックス、ラジオボタン、送信ボタン、リ
セットボタンなどを表示する
<MENU>
<MENU>∼
<LI>∼
</MENU>
リストを作成する
<OL>
<OL>∼
<LI>∼
</OL>
番号付きリストを作成する
<P>
align="left | center | right"
段落を作成する
<PLANTEXT>
<PLANTEXT>∼
</PLANTEXT>
プレーンテキストとして、すべてそのまま表
示する
<PRE>
<PRE>∼</PRE>
改行や空白を含めて、そのまま表示する
<SELECT>
<SELECT name="リスト名"
size=リスト行数>
<OPTION>∼
</SELECT>
選択リストを作成する
<TEXTAREA>
name="フィールド名"
rows="行数"
cols="桁数"
複数行の文字列を入力するためのボックス
フィールドを作成する
<TITLE>
<TITLE>∼</TITLE>
ページタイトルを指定する。Bookmark や画
面メモの一覧表に表示されるタイトルとなる
<UL>
<UL>∼
<LI>∼
</UL>
行頭文字のあるリストを作成する
Version 2.0
( 502i のみ対応)
<BLINK>
istyle
<BLINK>∼<BLINK>
istyle="入力モード"
( 属性値で指定)
BLINK タグで挟まれた文字列を、一定間隔
で点滅させる
入力項目の文字の入力モードを指定する。
( かな入力モード時)
1=全角かな
2=全角カナ
3=英字
4=数字
( ポケットベル入力時)
1=全角文字
2=半角文字
3=半角文字
(小文字推奨)
4=半角文字
(数字推奨)
329
第8章 携帯電話からのアクセス
タグ
書式
内容
Version 2.0
( 502i のみ対応)
<MARQUEE>
direction="left | right"
behavior="scroll | slide | alter
nate"
loop=回数
MARQUEE タグで挟まれた文字列が画面上
を流す。タグで囲まれた文字列は 64 バイト
まで
<META>
Charset="Shift_JIS"
明示的に文字セットを指定する
<SELECT>
自動的にオプション値の折り返しが可能
<OL>、<LI>
type="1 | a | A"
start="開始番号"
番号付きリストで OL タグに挟まれた部分全
体のラベル形式を任意に変更する。
1:算用数字
a:小文字アルファベット
A:大文字アルファベット
<BODY>
bgcolor="16 進数による色指定|色
の名前"
text="16 進数による色指定|色の
名前"
link="16 進数による色指定|色の名
前"
16 進数による色指定以外に標準の 16 色につ
いては色の名前による指定もできる。 色指定
の際は必ず背景色も指定する
<FONT>
color=" 16 進数による色指定|色の
名前"
16 進数による色指定以外に標準の 16 色につ
いては色の名前による指定もできる
HTML を作成する場合の考慮点は次のようになります。
●
●
文字について
●
SHIFT-JIS のみ対応
●
半角カナの使用が可能
●
約 200 種類の絵文字の利用が可能
ブラウザについて
●
一切の禁則処理は行わない
●
縦スクロール機能のみ
●
横スクロールはしないため、長文は自動折り返しされる( PRE タグば LAINTEXT タグ使
用時も含む)
●
BR タグ、P タグの改行処理はそのまま
●
改段落処理を行うタグ( FORM 、PRE 、PLAINTEXT、BLOCKQUOTE、MENU 、OL 、
UL 、DL 、DIR 、Hn )に関して、上下の空行はなくなる
●
330
URL について
●
タグリストで指定している“ URL ”については、基本的に HTML に準拠
●
相対パスと絶対パスの指定については両方とも対応
8.1 携帯電話で表示可能な HTML について
●
1
2
3
●
URL に指定可能なプロトコル
http://
mailto:
tel:
HTTP( Web サーバー)
電子メール
電話( A タグのみ)
ブックマークのタイトルは TITLE タグの記載が反映されるので、ブックマークの可能性
のある画面に関しては記述する
●
HTTP ヘッダー
●
●
●
CGI 作成時に「 Content-Type」、
「 Content-Length」は必須項目
制限値
●
URL エンコード後の文字長は最大 200 バイト
●
直接入力可能な URL 長はそれぞれ最大 100 バイト
●
ブックマークに登録可能な URL 長は最大 100 バイト
●
登録可能なブックマークのタイトル長は 24 バイト
イメージ( Version 1.0 の仕様)
●
モノクロ 2 階調の GIF ファイルのみをサポート
●
GIF ファイルは GIF87/87a/89a 形式の通常画像のみ
●
GIF ファイルの大きさは最大 94×72 ドットまで
●
Version 2.0 ではノンインターレース GIF 、アニメーション GIF 、透過 GIF(カラー対応機
のみ)をサポート
また、表示可能な HTML ファイルの大きさは端末によって異なりますが、2KB 以下を目安と
します。i モード対応の HTML を作成できる HTML エディタにはデービーソフト社の「 i. ホタル
2001 」などがあります。i. ホタル 2001 を使用することで i モードに対応した HTML ファイルを確
認できます( 図 8-1 )。しかし、社内の Web サーバーに接続して確認する機能を持つ PC 上のブ
ラウザはまだありません。Netscape などのブラウザでテストを行ったあとは、インターネットに
接続された Web サーバーで最終確認を行う必要があります。
簡単な i モードのページを見てみましょう。
小さい画面でより多くの情報量を出すために、カタカナはすべて半角にしています。ここでは
リンクにアクセスキーを使用しており、
1
を押すと指定されたリンク先にジャンプすることが
できます。
“ &#63879; ”は絵文字で、図 8-2 を見てわかるように、アクセスキーの 1 を示してい
ます。
331
第8章 携帯電話からのアクセス
図 8-1 i. ホタル 2001 で i モード対応ページを表示したところ
リスト 8-1 i モード対応のページ
<HTML>
<HEAD>
…カタカナはすべて半角にする
<TITLE>i モードサンプルページ</TITLE>
</HEAD>
<BODY>
<CENTER> ◆ よ う こ そ ◆ <BR></CENTER>
<BLOCKQUOTE>
絵 文 字 と か 、アクセスキー と か を う ま く 使 用 し て ページ を 作 成 し て み て く だ さ い
</BLOCKQUOTE>
<A HREF="dummy1.htm" ACCESSKEY="1">&#63879; 次 の リンク</BODY>
</HTML>
図 8-2 携帯電話で見たイメージ
332
8.1 携帯電話で表示可能な HTML について
8.1.2 EZ アクセス
EZ アクセスは、IDO 、セルラー、ツーカーが使用している携帯電話でのインターネットサービ
スです。EZ アクセスは WAP( Wireless Application Protocol )という携帯電話、PDA などと無
線で通信を行う携帯小型端末上でのインターネット利用を実現するための通信プロトコルを使用
しているのが特長です。WAP は WAP Forum によって、通信プロトコルの標準化が進められて
おり、モトローラ、ノキア、エリクソン、アットモーションドットコム社など WAP Forum には
主要な通信関連企業が参加しています。非常にオープンな国際規格です。
HDML を使用するためには、Web サーバーに mime の追加設定が必要となります。Apache の
場合では、mime.types ファイルに以下の 3 行を追加します。NCSA 系の Web サーバーの場合、
この 3 行を.htsccess ファイルに書いて、HDML ファイルと同一ディレクトリに置いてもかまい
ません。筆者の属している ISP で試してみたところ、正常にアクセスできました。charset の指
定は日本語を使用するためには絶対に必要です。この指定がないと日本語はすべて化けてしまい
ます。
addtype text/x-hdml;charset=Shift_JIS hdml
addtype text/vnd.wap.wml
wml
addtype image/bmp
bmp
WAP は HDML という HTML ドキュメントに似た言語を使用しています。HDML には、小
さなディスプレイに効率よく情報を提供するために HTML にはないデッキとカードという概念
があります( 図 8-3 )
。ディスプレイに一度に表示できる範囲がカードであり、カードの集合体が
デッキとなります。表示するカードには、テキストなどを表示させるための DISPLAY カード、
選択肢を表示させるための CHOICE カード、文字列を入力させる ENTRY カード、ローカル変
数などを初期化させるための NODISPLAY カードの 4 種類があります。よく使われるタグは表
8-2 のようになります。
<HDML>
デッキ
<DISPLAY NAME="#1">
カード
</DISPLAY>
</HDML>
図 8-3 デッキとカードの概念
333
第8章 携帯電話からのアクセス
表 8-2 HDML で使用されるタグ
デッキ
<HDML>∼</HDML>
ドキュメントが HDML で書かれていることを宣言する
VERSION="<number>"
HDML のバージョンを指定する。通常は 3.0。
例:<HDML VERSION="3.0">
TTL="<秒>"
デッキのキャッシュ有効時間の設定。デフォルトは 30 日。
例:<HDML VERSION="3.0" TTL="600"> 10 分間で設定
する場合 TTL="秒"
MARKABLE="TRUE/FALSE"
デフォルトでは FALSE。TRUE に設定すると、ブックマー
クを許可する
PUBLIC="TRUE/FALSE"
デフォルトでは FALSE。TRUE に設定すると、どこからで
も参照可能、ブックマークを許可する
ACCESSDOMAIN="URL"
MARKABLE、PUBLIC が FALSE のときアクセスを許可
するドメインの指定ができる
ACCESSPATH="PATH"
MARKABLE、PUBLIC が FALSE のときアクセスを許可
するパス
( URL の)
の指定ができる
カード
<DISPLAY>∼</DISPLAY>
テキストなどの情報を表示するカードを宣言する
<CHOICE>∼</CHOICE>
選択肢をリスト化して表示するカードを宣言する
<ENTRY>∼</ENTRY>
文字列を入力させるためのフォームカードを宣言する
<NODISPLAY>∼</NODISPLAY>
ローカルの変数を初期化するカードを宣言する
NAME="<name>"
カードの名前を指定する
TITLE="<title>"
ブックマーク時のタイトル
BOOKMARK="<URL>"
このカードがブックマークされたときに別のページを指定し
たい場合、直接 URL を指定する
KEY="<variable>"
変数の指定を行う。変数名が入る
METHOD="NUMBER/ALPHA"
選択肢の左側に通し番号を表示させたい場合は NUMBER 、
させない場合は ALPHA を指定する。デフォルトでは NUM
BER
DEFAULT="<value>"
デフォルトで KEY 変数に入る値を指定する
IKEY="<variable>"
CHOICE カードの選択肢のインデックスナンバーを格納す
る変数名を指定する
IDEFULT="<value>"
インデックスナンバーのデフォルトの値を、変数で指定する
テキストの整形
<CENTER>∼</CENTER>
行の中央揃えができる
<RIGHT>∼</RIGHT>
行の右揃えができる
<TAB>
行のインデントを揃える
<WRAP>
英単語を単語レベルで改行する
<LINE>
改行を禁止する
<BR>
行末を指定し改行させる
334
8.1 携帯電話で表示可能な HTML について
ナビゲーション
<ACTION>
ソフトキーの作業を定義する
TYPE="<name>"
使用するソフトキーの名前を指定する
TASK="<"
ソフトキーの行う作業を指定する。GO 、PREV 、RETURN 、
CANCEL などが指定可能
LABEL="<value>"
ラベルの内容を記述する
DEST="<URL|Address|TEL>"
リンク先を指定する
DEST="#CARDNAME"
カード名を指定
DEST="#deck.html#CARDNAME"
デッキ名を指定
DEST="http://www.ido.co.jp/index.
hdml"
URL を指定
DEST="?"
カレントデッキを再度読み込み
DEST="device:UP.Link のサービス"
UP.Link サーバーの機能を利用するとき。
例:
DEST="device:home/goto?svc=Email&SUB=sendMsg"
VARS="[email protected]"
REL=NEXT
DEST で指定されたデッキをユーザーがアクションを起こす
前にダウンロードする
VARS="<valiable>"
変数名が入る。変数を設定する
RECEIVE="<valiable>"
GOSUB タスクからの戻り値を格納する変数名を、セミコロ
ンで区切り指定する
NEXT="<URL>"
飛び先 、URL が入る。ネストされたアクティビティから
TASK=RETURN したあとにアクセスする URL を指定す
る
CANCEL="<URL>"
飛 び 先 、URL が 入 る 。次 に 行 く ア ク ティビ ティか ら
TASK=CANCEL されたときにアクセス URL を指定する
CLEAR="<TRUE/FALSE>"
TRUE または FALSE が入る。ネストされたアクティビティ
から戻るときに、呼び出すアクティビティの変数を消去する
場合は TRUE を指定する
FRIEND="<TRUE/FALSE>"
TRUE または FALSE が入る。GOSUB タスクで指定された
アクティビティがフレンドリーであるかどうかを指定する
SENDREFERER="<TRUE/FDALSE>"
UP ブラウザが、DEST や NEXT に指定されたサーバーに
対して、現在のデッキの URL を Referer ヘッダーとして送
るかどうかを指定する
RETVALS="<value>"
呼び出し元に TASK=RETURN で戻るときに返す値を、セ
ミコロンで区切り指定する
POSTMETHOD="POST/GET"
GET または POST が入る。DEST で指定した URL にアク
セスする方法を指定する
335
第8章 携帯電話からのアクセス
ナビゲーション
POSTDATA="<valiable=value>"
POST メソッドで POST するデータを指定する
ACCEPT-CHARSET="<value>"
UP ブラウザがデータを返すときに使うべきキャラクタセッ
ト
( 文字の種類)
を指定する
NUMBER="<TEL number>"
タスクで CALL を指定したときに、そのあとに続けて電話
番号を指定する
SRC="<value>"
ソフトキーラベルの位置に表示する画像の名前を指定する
ICON="<value>"
Up.Link や端末に搭載されている画像の名前を指定する
<A>∼</A>
リンクを指定する
ACCESSKEY="<value>"
0∼9 の数字が入る。テンキーに対応して設定された動作を
行う
NUMBER="<TEL Number>"
電話番号を指定する。TASK=CALL のときに使用する
図 8-4 UP.Simulator
EZ アクセス対応の携帯のほとんどは、@Motion Inc 社( 現 Phone.com )社の UP.Browser を
利用しています。Phone.com 社の Web サイト*1 に UP.SDK という開発者キットがあり、この中
*1 http://www.phone.com/
http://www.phone.com/japan/home.html( 日本語)
336