ちょっと物知り博士のちょこっと講座 戻る

第17回 JavaServletって本当にすごい??

JAVA という「言葉」 を聞いたのはもう9年も前だったろうか。SunMicrosystems からプラットフォームに依存しないインターネット用言語がリリースされた。以降ほぼ9年ずいぶん以前に購入したJAVAの解説本と月刊雑誌が手をつけられずに眠っている。
そうです、JAVA を聞いたときには筆者の周りはインターネット環境なんかほとんどなかったし、というよりインターネットという言葉さえも非常に耳新しい言葉で電話回線を使用してコンピュータ通信を行うぐらいとしか認識していなかった。当時はやっていたパソコン通信にしても仕事の世界、趣味の世界共に必要性をあまり感じなかったものだ。
年月がインターネットを育て、4年ほど前から、爆発的に普及し始めた。3年ほど前、会社で始めてのHomepageなるものを作成したとき(若い人に指示したのではあるが)JAVA という言葉は出てこなかった。代わりに耳にしたのは HTML という言葉で、これを使えば簡単にHomepageが作れるという。
JAVAを意識し始めたのは、おおよそ1年半前自分でHomepageを作り始めてからだ。当初は IBMのHomePageBuilderを用いて意気盛んに作成したものだ。一通りHomepage を作って感じたことは HTML というのは確かに「Homepage」を作成するのには非常に手軽で使いがってがいいが、コンピュータ屋から見るといかにもダルマに見える。
画面から入力したもの(文、データ)の処理は?ファイルの処理はできないの?データベースなんてとてもアクセスできそうにないな?・・・
必要に迫られて、インターネットでの「プログラム」をおさらいしたのです。
画面から入力したもの(文、データ)の処理、ファイルの処理、データベースのアクセス・・・等々、これらは全てサーバー側で処理してHTML ドキュメントに加工してブラウザへ送ってやらなければ実現できません。(一応コンピュータ屋ですから、ここらへんのことはよく理解できます。)そしてそれらの処理を可能にするのが「CGI」というものであります。(CGIだけではないというのはあとから解ったものです。)
CGI は多くがPerlで書かれています。その他にも VB、C、DELPHY、RUBY、JAVA・・・・等の言語で記述できます。ここへ初めてJAVAが出てきました。
Perl という言葉の響きに引かれて、Perl CGI プログラムを書き始めました。「言葉の響きに引かれて」 というのは嘘で、RedHat LINUX には PERL インタプリタが標準的にインストールされているのを調べたからで他の言語プロセッサをインストールするのがうっとうしかったのです。
とにかくPerl で手当たり次第にCGI プログラムを作成したのです。
筆者にはある怠惰な性格があります。どんな事も非常に興味を持って取り組むが、ある程度わかってきたらその事に飽いてくるのです。(かみさんにはまだ飽いたとはいえませんが)。
Perl CGIもプログラム本数にして50本も組んだころ飽いてきまして、ちょうどそのころ、本屋で立ち読みがてら何か面白い本はないかいなと探していたら、技術評論社から出ている「サーブレット&JSPで始めるJAVAサーバーサイドプログラミング」という本が目に止まった。
パラパラとめくって見ると何とか なりそうな書き方でしたので、JAVA という言葉は長年頭の隅に引っかかっていたこともあり、躊躇無く取り掛かることにしたのです。
Java は当初 Green プロジェクトがビデオ、テレビ、照明、電話などを制御するユーザインタフェースのために開発した言語で、Oak と名付けられていました。Oak というのはこの名前を付けた James Gosling 氏のオフィスの窓から見える大きな樫の木が由来となっています。
ところが、公開間際になって Oak がすでに他のプログラミング言語に付けられた名前であることが判明し、コーヒーに関係する Java という名前になりました。
なぜ、Java なのかについては、開発チームがよく行くカフェの店員が"It's a jungle out there, So drink your Java" と書かれている T シャツを着ていた、Sun Microsystems社の近くに Oak Street と Java Street があった、後に Marimba を設立したキム・ポレーゼがマーケティング的に響きの良いインパクトのある語句を選んだなど、さまざまな説があり謎につつまれています。
Java 誕生に至る経緯については以下の URL を参照してください。
http://www.hotwired.co.jp/wiredmagazine/2.03/java.html

JavaServlet の動作の仕組み

ブラウザ ⇒ APACHE ⇒ TOMCAT ⇒ サーブレットコンテナ ⇔ Class
................................................................................ ↑ ............................↓
.........................................................................................インスタンス

インストール

JavaServlet 開発用のパッケージは次のサイトからダウンロードしました。
Apache------ http://www.apache.org/dist
Tomcat ------http://jakarta.apache.org/
IBM JDK------http://www.ibm.com/java/jdk/index.html
APACHE のインストール
@ usr/local/apache を生成
A apache_1_3_19_tar.tar を copy from backup file
B tar zxfv apache_1_3_19_tar.tar
C cd apache_1_3_19
D ./configure --prefix=/usr/local/apache --enable-rule=SHARED_CORE --enable-module=so
E make
F make install(root 権限にて)
JAVAservlet のインストール
@ usr/local/java_servlet を生成
A パッケージを usr/local/java_servlet へコピー
B cd usr/local/java_servlet
C tar -zxvf IBMJava2-SDK-13.tgz
D rpm -i IBMJava2-JRE-1.3-9.0.i386.rpm
rpm -i IBMJava2-JAAS-1.3-9.0.i386.rpm
rpm -i IBMJava2-JAVACOMM-1.3-9.0.i386.rpm
E JAVA_HOME =/usr/local/java_servlet/IBMJava2-13
6. TOMCAT のインストール
バイナリ-ファイルをインストールしました
@ /usr/local/tomcat を生成します
A jakarta-tomcat-3.2.1.tar.gz をコピーする
B 展開
tar zxfv jakarta-tomcat-3.2.1.tar.gz
jakarta-tomcat-3.2.1 フォルダが作られる
7. tomcat source を展開する
/usr/local/java_servletにて
@ tar zxfv jakarta-tomcat-3.2.1-src.tar.gz
8. module mod_jk for addon to apache
@ /usr/local/java_servlet/jakarta-tomcat-3.2.1-src/src/native/apache1.3
の Makefile.linux の apxs のpath を
/usr/local/apache/bin/apxs
に修正
A make -f Makefile.linux
B mod_jk.so を /usr/local/apache/libexec
へコピー
8.1 上記のしょりにてERRORあり。 PERLのバージョン:5.005 を使用しているが
現在インストールされているバージョンは perl-5.6.0
cdrom より 強制的にインストール
rpm -i --force perl-5.00503-10.i386.rpm
perl-5.6.0 と共存しているがこれで前述の処理を実行してOK
9. TOMCAT_HOME =/usr/local/tomcat/jakarta-tomcat-3.2.1
10. /usr/local/apache/conf/httpd.conf を更新from backup fileより
/usr/local/tomcat/jakarta-tomcat-3.2.1/conf
ajpv13.conf
mod_jk.conf_suppl
server.xml
11. /home/httpd
cgi-bin、cgi-local、html、icons copied from backuped files
12. tomcat apache normally kicked
13. mail program 設定
unzip jaf-1.0.1.zip ⇒activation.jar
unzip javamail-1.2.zip ⇒mail.jar
unzip pop3-1.1.1.zip ⇒pop3.jar
⇒ /usr/local/tomcat/jakarta-tomcat-3.2.1/lib/
14. jdbc のinstall
export CLASSPATH=$CLASSPATH:/usr/local/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc
cd /usr/local/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc
make jdbc2

/usr/local/src/pgsql/postgresql-7.0.2/src/interfaces/jdbc に生成された postgresql.jar
を $TOMCAT_HOME/lib に置く
15. java program テスト方法
@ text editor でプログラム作成
A JDK 環境でコンパイルする javac pg_name.java ⇒ pg_name.class
B 実行する java pg_name
postgres jdbc を使う場合は postgresql.jar へCLASSPATH を通す
postgres の起動は postmaster -i & とする
16.JAVA servlet 漢字のテスト
読んで表示する
DB(euc) ⇒ JDBC ⇒ servlet(euc2unicode)⇒JSP(ブラウザ:euc) は文字化け
DB(euc) ⇒ JDBC ⇒ servlet ⇒JSP(ブラウザ:euc) はOK

ブラウザ:euc ⇒ servlet。getpost(sjis2unicode)⇒servlet。dbOut(unicode2euc)⇒DB(euc) は文字化け
ブラウザ:euc ⇒ servlet。getpost ⇒servlet。dbOut ⇒DB(euc) は文字化け
ブラウザ:euc ⇒ servlet。getpost(sjis2euc) ⇒servlet。dbOut ⇒DB(euc) は文字化け
⇒servlet。dbOut(euc direct) ⇒DB(euc) はOK
結局ブラウザから送られてくる2バイト系文字コードが問題だ。
ブラウザ:SJIS ⇒ servlet。getpost(sjis2unicode)⇒servlet。dbOut(non convertion) ⇒DB(euc) はOK
17. JAVA program test
/home/postgres/sqls 内では動作するが

/usr/local/tomcat/jakarta-tomcxat-3.2.1/otherpg 内では動作しない
complie はできるが 実行時 NoClassDefFoundError:eg3main が表示されてとまる

CLASSPATH に /usr/local/tomcat/jakarta-tomcxat-3.2.1/otherpg を追加すると動く
こうするとどのdirからでも指定のclassを呼びに行き実行する
実行時に呼ばれるCLASSが格納されるフォルダをCLASSPATHに登録しておかなければならない

JavaServletは本当にすごいのか??

非常に意気込んに JavaServlet に取り組んでみたが、確かにすごいことは解るが、サイトの全体像を作り上げるに大きな時間を要するし、CLASS とJSP、XMLの連携が複雑で誰にでも容易に取り組めるというものでない。
小さなサイト構築でも結構複雑な構造になってしまうので、同じことをPerl あるいは後述するPHPで書くのに比べて3倍くらいの知識と時間が必要になってしまう。
大きなサイトを大勢で構築する場合には、データベース、CLASS、JSP、XMLの設計に十分な時間が取れそれなりにしっかりとしたものが出来る事は請け合いだが、少人数でこじんまりとしたサイトを作るならJavaServletに十分に習熟した場合を除いてPerl、PHPに軍配が上がるのではないだろうか。