表 4 アドオンで使える Servlet Engine ServIet Engine ( べンダー ) jserv (The Java-Apache Project) http://java ・ apache.org/ -JRun (Live Software) http://www.livesoftware.com/products/jrun/ ServletExec (New Atlanta Communication http://www.newatlanta.com ServIetExpress (IBM) http://www.ibm.com/java/servexp/ Netscape FastTrack/Enterprise Java のサーバー技術 サポートする、 veb サーパー Apache (UNIX 、 NT) Apache (UNIX 、 Win95/NT) 、 IIS 、 NS* (Solaris 、 UP-UX 、 IRIX 、 AIX 、 NT) IIS 、 NS* (Solaris 、 NT) Apache (Solaris 、 AIX) 、 IIS 、 - NS* (Solaris 、 AIX 、 NT) ServletEngine は、 1 つ目と 2 つ目のタイプのどちらと もいえない実装になっています。 Jigsaw は 100 % Pure Java の Web サーバーで、サーバーのコア部分のつくりは Servlet Engine とよく似ています。コア部分にリソース を追加してサーバーの機能を孑劇長するところは Java Web Server と同し方式ですが、 Jigsaw にリソースを追加す る API は Servlet API に準尠匙していません。このため、 Jigsaw で Servlet を使う場合は、 Servlet API を利用す るのに必要なリソース ServletWrapper を追加します 7 Servlet を使える Web サーバーの情報は、 JavaSoft の「 Java Servlets Out ln the world 」 8 の一覧で石寉認 してください。 ひろく普及している Web サーバーでは、一殳に Serv- let Engine を、、アドオン " として使用します。この種の Servlet Engine には、表 4 に示すものがあります。 Apache にアドオンで追加する Servlet Engine は、通 常、組込みモジュールが用意されています。このモジュー ルを Apache に糸はみ込み、 S ervlet Engine を動かす成疋 をすれば ServIet か使えるようになります。 ServIet A 曰の配布形態と履歴 Servlet API の配布形態 Servlet API は、次の 4 不職頁の方法でリリースされた 点で Java の API のなかでも異色の存です。 1. Java Web Server JavaSoft か版売している Java で実装された Web サ 7 http://www.w3.org/Jigsaw/User/Reference/w3c.jigsaw. servlet. ServletWrapper. html 8 http://jserv.javasoft.com/products/java-server/servlets envrronments. htrnl UNIX MAGAZINE 1998.6 ーバーです。リリース当初は Jeeves と呼はれていまし たが、現在は Java Web Server と改称されました。 2. JSDK (Java Servlet Development Kit) Servlet の開発キットです。 Java Web Server を使 わなくてもテストできるように、 ServIetRunner と呼 ばれるスタンドアローン・サーバーが含まれています。 このほかに、 Netscape Enterprise サーノヾーや Mi- crosoft IIS 、 Apache で ServIet を重川乍させるモジュ ールを組み込むためのコードも提供されています。 65 1.0 が FCS (Final Customer Shipment) される直 1.1996 年 8 月 ~ 1997 年 6 月頃まで (Java Web Server よって次の 4 つに大別できます。 これらの ServIet API は、リリース時期と配布形態に のかが分かりにくくなっています。 れぞオ功ゞどう違うのか、またどのように使い分けたらいい API にはバージョン番号が付いていません。そのため、そ のように頻繁にリリースされたにもかかわらず、 ServIet 形態で合わせて 20 回を超えるリリースがありました。 Servlet API は、 1996 年 8 月から上記の 4 つの配布 ServIet API の履歴 ようになりました。 になり、 1997 年 12 月から JDK に含めて配布される JDK 1.2 から Servlet API は Standard Extensions 4. JDK (Java DeveIopment Kit) 供されています。 ビスの一例として、 Java Web Server の基本機能力甘是 て起動・管理する機能があります。ネットワーク・サー Web サーバーを含むネットワーク・サーピスを一舌し Java のサーバー・アプリケーション開発キットです。 3. JST (JavaServer Toolkit)
$ ⅵ e Java のサーバー技術 ー原田洋子 図 1 Applet の竟 ServIet とは何か ダウンロード Applet Web サーバー Applet Java Virtual Machine Web ブラウザ クライアント Java といえば、すぐに Applet を思い浮カヾる人が多 いのではないでしようか。 AppIet はクライアント側で動 きますが、 ServIet はサーバー側で動くプログラム・モジ ュールです。ここで、、プログラム・モジュール " と書いた 図 2 Servlet の竟 のは、 Servlet も Applet と同様に単豸虫では動かないプロ Web サーバー グラムだからです。 Servlet Applet の場合は、 HTML ファイルにアクセスしたと きに、ファイルに言当された指定にもとづいて必要なクラ スファイルが、 Veb サーバーからプラウサ側の Java VM (Virtual Machine) 上にロードさ起動します ( 図 1 ) 。 これとは逆に、 Servlet の場合には、 Web サーバーか起動 時もしくは Servlet や Servlet カ甘旨定されている HTML ファイルの URL にアクセスしたときに、必要なクラス ファイルが Web サーバー側の Java VM 上にロードさ れてから起動します ( 図 2 ) 。 す。 Servlet API は、 HTTP にかぎらす、さまざまな Java プログラミングの観点からみると、 ServIet は ネットワーク・サーピスに対応できるように設計されて Javax. servlet. Servlet インターフェイスを実装している います。現時点でサポートされているのは HTTP だけ クラス」と定義することができます。 ServIet をプログラ ですが、新たなプロトコルに対応させたい場合は、 javax ・ ミングするための API が、、 Servlet API" です。 javax. servlet. http ノヾッケージと同様に、新しいノヾッケージを servlet. Servlet は、この Servlet API のなかで定義さ 追加します。 れています。 機育顎勺な面からみると、 ServIet はサーバーの機能を実 Servlet API のパッケージ構成とおもなクラスを表 1 現する手段といえます。 ServIet は CGI 的に使われるケ に示します。 ースが多いのですが、 HTML ページの重加勺な生成、 SSI Servlet API には、 Servlet の重川乍とーイ勺な通信につ (Server Side lnclude) 、フォームの処理、 URL リダイ いて定義したクラス君第である javax. servlet と、 HTTP レクション、 HTTP Cookie 、セッション管理など、い に依存した通信について定義したクラス群である javax ままで CGI て夫現されていた機能は ServIet でより効率 . servlet. http の 2 種類のパッケージが用意されていま 的に実現できます。さらに、 CGI 相当の機能を実装する PULL Servlet PULL GET Web プラウザ クライアント Servlet Servlet Java Virtual Machine Servlet Engine Web サーバー 57 UNIX MAGAZINE 1998.6
表 6 JDK 1.2 Servlet API サーパー Java Web Server 1.1 ( 1.1.1 ) JServ 0.9.10 JRun 滝 4 アーカイフ名 」 ws ・」 ar servclasses. zi p Jrun ・ Jar た。その他、 Java Web Server 1.1 とクラス構成に 変化はありませんが、セッション管理関係でいくつかの メソッドか削除されました。 現在はこのバージョンが主流となっていて、 JDK 1.2 に伺属しているところから、これを、、 JDK 1.2 ServIet API" と呼ぶことが多いようです。 これらのあいだには、かならすしも互換性はありませ ん。たとえば、書籍などでよくみかける、もっとも旧い Java. servlet や java. servlet. http というノヾッケージを利 用した Servlet は現在は重川乍しません。 Servlet API の履歴を表 5 に示します。 ServIet API のアーカイフ ServIet API は、 Java Web Server ではほかのクラス と同しアーカイプ・ファイルに含まれていますが、 JSDK や JST では独立したアーカイプ・ファイルになってい ます。 JDK では、 1.2 滝 2 ではコア API と同しファイルに 含まれていましたが、 1.2 3 から独立したアーカイプ・ ファイルになりました。さらに、表 6 の ServIet 対応の Web サーバーでは、 Servlet API か表に示したアーカイ プ名で伺梱されて提供されています。 Ser ⅵ et を用いたシステム設計 Servlet を利用するシステムの言叔こは、 Servlet の 有効性を支えるさまざまな新しい技術を最大限に活用した システムにするために、おもに次の要素を考えます。 1. どのようなオプジェクト・モデルを構友するか。 2. 通信形態と通イ大態の糸財寺に何を利用するか。 3. 並行処理をどのように扱うか。 オフジェクト・モデル Servlet は、オプジェクト指向言語である Java 言語と、 オプジェクト指向言 t にもとづいて作られたクラス群を用 ロ UNIX MAGAZINE 1998.6 Java のサーバー技術 いて作成します。 ServIet を使用したシステムを言 t する には、ます、何をオプジェクトにしてどのようなメソッド を用意するかといったオプジェクト・モデルの構成を考え る必要があります。 たとえば、カウンタを ServIet で作るとします。カウ ンタをオプジェクトにして、カウンタ・オプジェクトの状 態の 1 っとしてカウンタ値を設けます。そして、カウン タをインクリメントするメソッドを用意します。 ServIet は、カウンタ・オプジェクトをロード時にインスタンス化 し、リクエストがあるとカウンタ・オプジェクトのメソッ ドを起動してカウンタ値をインクリメントし、その結果を クライアントに返します。 オプジェクト指向言語で記したシステムのキ致を活か した拡張生やオプジェクトの再利用性を高めるには、デザ インパターン [ 6 ] をはじめとするオプジェクト指向設引法 を学ぶことも重要でしよう。 Java 言語では、 Object Serialization を用いてオプ ジェクトを転送する機能か供されているので、 HTTP 上でオプジェクトを使って通信することができます。 このような手枷友にするときには、シリアライズはフィー ルド ( インスタンス変数のを送り込むもので、メソッ ドは転送先のオプジェクト定義に従うという点を考慮し、 転送元と転送先でオプジェクトのバージョンを統一する なんらかのガ去をシステム構成に組み入れる必要がありま す。 ServIet の通信についてさきに述べましたが、 Servlet がどのような手段で通信をおこなうかはシステム設言 t の 1 つの要素となります。 HTTP で通信する場合、 HTTP 仕様による限界や寺 徴を考慮する必喫があります。たとえば、 HTTP はでき るだけ早くコネクションが切れるように言 t されたプロト コルなので、原則として 1 回のリクエスト - レスポンス・ シーケンスでコネクションが切れます。 また、各 HTTP リクエストは基本的に独立なので、ユ ーサーごとにセッション管理が必要になる場合がありま す。セッション管理をおこなうには、 Servlet API の javax. servlet. http.C00kie クラスが提供する HTTP Cookie を利用し、どのクライアントとのセッションであ 通信形態 67
ServIet 表 5 ServIet API の履歴 J eeves J eeves J eeves Jeeves Jeeves 1.0 1.1 1.2 2.0 3.0 ( 米対 / カナタ版 ) J avaServer JavaServer 滝 ( バグフィックス JavaServer 1.0 FCS JavaServer 1.0.1 Java Web Server 1.0.2 Java Web Server 1.0.3 Java Web Server 1.1.1 FCS Java Web Server 1.1 FCS Java Web Server 1.1 Java Web Server 1. 1 リリース時期 Java Web Server 1998 年 3 月 1997 年 12 月 1997 年 10 月 1997 年 9 月 1997 年 10 月 1997 年 9 月 1997 年 7 月 1997 年 6 月 1997 年 4 月 1997 年 3 月 1996 年 11 月 1996 年 9 月 1996 年 9 月 1996 年 8 月 Servlet API 4 4 3 3 2 2 2 2 1 1 1 1 1 1 1 JSDK 1.0 JSDK 1.0.1 JST 1.1 JST 1.1 2 JDK 1.2 2 JDK 1.2 3 前まで ) Java Servlet Development Kit 1997 年 5 月 1 1997 年 7 月 2 JavaServer Toolkit 1997 年 12 月 4 1998 年 2 月 4 Java DeveIopment Kit 1997 年 12 月 4 1998 年 3 月 4 アーカイプ名 classes. Z ip classes. ZIP classes. Z ip classes. Zip classes. Zip classes. zip classes. 」 ar classes. 」 ar classes. 」 ar classes. J ar JWS ・ Jar 」 ws ・」 ar 」 ws ・」 ar classes. Z ip classes. Z ip jsdk. jar jsdk. jar classes. Z ip servlet. j ar この日芋其月には、 java. servlet 、 java. servlet. http とい うパッケージ名が使用されています。対応している HTTP のバージョンは 1.0 [ 4 ] です。 リリース当初は java. servlet だけでクラス数も少なか ったのです力ゞ、 Jeeves 2.0 で java. servlet のクラ ス数か増え、 java. servlet. http ノヾッケージが追加され ノヾッケージ名は javax. servlet 、 javax. 2.1997 年 6 月 ~ 12 月頃まで (JavaWeb Server 1.0 や これ以外のパッケージも存在していま この時期から、 JSDK) ーー 0 ました。一時、 66 3.1997 年 9 月 ~ 10 月 (Java Web Server 1.1 の版と この時期は Servlet API は動きがなく安定していまし servlet. http に変更されています。 日判月は短いのですが、次の FCS に向けた動きがありま HTTP 1.1 に対応し、 HTTP Cookie とセッション 管理闕イ系のクラスが Servlet API に追加されました。 同日月に分類していますが、住版と版の ServIet API は同しではありません。 HTTP 1.1 に対応したことで、 HTTP 1.1 の Method を扱うためのメソッドも追加されました。 javax. servlet. http パッケージは、滝版になってさら にインターフェイスとクラスが追加されました。版か らあったセッションを扱うクラスは、版になってメ ソッドか変更されています。 4.1997 年 12 月以降 (Java Web Server 1.1 FCS や JST) HTTP 1.1 に対応しただけでなく、いくっかの変更が 加えられています。 クラス構成では SingIeThreadModel が追加されまし 0 UNIX MAGAZINE 1998.6
Java のサーバー技術 図 6 Socket と HTTP を組み合わせたミ言モデル Web サーバー Web サーバー Java. net. URLConnection Servlet Servlet ja 、 'a. net. Socket ja 、 . net. Socket デーモン デーモン 図 4 Servlet Sandbox Web サーバー Web サーバー Servlet Servlet Servlet unsigned ブラウサ Applet local signed Servlet Sandbox Servlet バーの機能に依存します。 Java Web Server ではサポー トされていますが、その他のすべての竟てサポートされ ているわけではありません。 セキュリティ対策か施されていない Servlet は自由度 が高く、システムにとって脅威となる ServIet も作れま す。この点ではこれまでの CGI と変わらないので、言 には注意が必要です。 ServIet の通信 Servlet Java Virtual Machine ServIet Engine Web サーバー 図 5 3 層モデル ブラウザ AppIet Servlet セキュリティ上の制約を受けない Servlet には、 JDK Web サーバー Core API て提供される、 ・ソケット通信 ACL ・ HTTP 通信 ACL は ServIet ごとに実彳 - 」範囲を制限するもので、以 う攵オプジェクト間通信 下の各項目について可 / 不可の設定かできます。 などの通信形態が適用できます。これらの通信形態を組み ・ ServIet のロード 合わせると、次のようなモデルが考えられます。 ・ファイル出力 3 層モデル ・ファイル入力 ・ソケット接続 おそらくもっともポピュラーな多層モテルです ( 図 5 ) 。 ポートの listen Applet—ServIet 間の通信は java. net. URLConnection ・外部フ。ロセスの起動 で、 Servlet—トランザクション・サーバー間は JDBC な ・ライプラリのリンク どの API によってコネクションを張ります。 Servlet の ・システム・プロノヾティのアクセス セッション管理の機能を組み合わせると、クライアントご とのトランザクション管理も可能です。 複数のユーザーが Servlet を登録して使う環境を考え ると、ファイル入出力を一律に禁止するのではなく実彳 - 薺危 Socket と HTTP を組み合わせた通信モデル 囲を設けたいところですが、朋大ではそのようなことはで Servlet どうしの通信と、さらに Servlet がソケット きません。 を張れるデーモンと通信する形態です ( 図 6 ) 。 Java では、 Web サーバーによる違い TCP で接続するための java. net. Socket と、 UDP で接 続するための java. net. DatagramSocket が用意されて Sandbox と ACL の機能は Servlet API だけでは実 います。 ServIet 間を java. net. URLConnection で接 現できないので、 Servlet Engine と連携する Web サー J ava. net. U RLConnection トランザクション サーバー タス 63 UNIX MAGAZINE 1998.6
ServIet 図 7 ORB と HTTP を組み合わせた言モデル ファイアウォール Servlet Web サーバー Servlet Servlet Web サーバー A let ブラウザ 図 8 HTTP による相互う甬信モデル Web サーバー ORB Servlet Servlet Web サーバー Servlet Web サーバー もあります。 続すると、途中にファイアウォールがあってもデーモン どうしの対話が可能です。 java. net. URLConnection で は、 Object Serialization を利用して相互にオプジェク トを送ることもできるので、通信に使う情報にもバリエー ションをもたせることができます。このモデルでは、た とえは SNMP と組み合わせると、 Web べースのネット ワーク管理システムをすべて Java で言当できます。 ORB と HTTP を組み合わせた通信モデル ServIet とリモート・オプジェクト間の通信です ( 図 7 ) 。 Servlet を介してファイアウォールを越え、リモート・オ プジェクトを利用するモデルも考えられます。 OMG (Object Management Group)5 が f けを定め ている CORBA (Common Object Request Broker Architecture) サービスのなかに、 ORB (Object Re- quest Broker) があります。 ORB とは、すべてのメッセージ通信を管理する彳難リを はたすサーピスです。これによって、クライアントがリ モート・オプジェクトにアクセスする際、リモート・オプ ジェクトのネットワーク上の位置を知らなくても通信がで きるようになります。 Java では JDK 1.2 から Java IDL がサポートされ、 Java による CORBA/IIOP 2.0 準拠の ORB カ甘是供さ れました。 idltojava というツールを使えは、 CORBA オ プジェクトを Java で実装することもできます。 Java で は、これ以外にも JDK 1.1 でサポートされた RMI (Re- mote Method lnvocation) を使ってリモート・オプジェ クトを扱う技術や、 HORB6 という分散オプジェクト環竟 5 http://www.omg ・ org/ 6 http://ring ・ etl ・ go ・ jp/openlab/horb/ RemoteObjec RemoteObjec 64 インターネットで ServIet を利用して ORB 間をつな ぐガ去も有効です。あるいは、インターネット上で ORB を探す際に、どこに ORB があるかを知っている Servlet を用意し、この Servlet に HTTP リクエストを発行す るガ去もあります。 Java 言語で言当されている ORB な ら、 JDK Core API の機能を用いて Servlet と容易に接 続できます。 HTTP による相醗信モデル Object Serialization を利用して、複数の Servlet 間 をオプジェクトカヾ度り歩くモデルです ( 図 8 ) 。モバイル・ 工ージェント的な使い方です。 HTTP という標勺なプ ロトコル上に実装できる点が Servlet ならではの移動の仕 方です。 ServIet の使用方法 Servlet を使うには、 Servlet 対応の Web サーバー JDK 1.1 以降と Servlet API が必要です。 ServIet API は、 Web サーバーに内蔵されていることもあります。 Servlet 対応の Web サーバーは以下の 3 不頁です。 1. Web サーバー経由で Servlet Engine に接続できる仕 組みが用意されているもの (Apache 、 Microsoft ln- ternet lnformation Server 、 Netscape FastTrack/ Enterprise) 2. Web サーバー自体が Servlet Engine になっているも の (Java Web Server) 3. Servlet Engine があらかしめ組み込まれているもの (StarNine's WebSTAR 、 Lotus Domino GO Ⅵ発し server このはかに、 W3C からリリースされている Jigsaw と ーも Servlet に対応しています。 Jigsaw の し、つサーノヾ UNIX MAGAZINE 1998.6
図 2 CORBA と Java の標準アーキテクチャ クライアント HTM L Java アプレット ORB 用ができる ( 図 2 ) 。 HTTP CGI または Web API ビジネス・オブジェクト ドキュメント HTML ORB CORBA&Java ■ , オプジェクト ORB ORB IIOP 代替となるアプローチ 企業内イントラネットでは、 CORBA と Java か雎一 のアーキテクチャではない。 Microsoft の DCOM (Dis- tributed Component Object M0del) と ActiveX など のように別のアプローチもある。 CORBA と Java に対抗 する技術としては以下のもの力げられる。なかには、特 定の市場では優位に立っと思われるものもある。しかし、 ま人降でみていくように、企業内イントラネットを構築 する際に IT 糸目系勧ゞ直面する ) な問題に一括して対処で きるものはない。 Microsoft の DCOM と ActiveX は、 CORBA と Java に航する技術のうちでも、もっともよく使われて いるものであろう。 DCOM は、 CORBA と同様のアー キテクチャを多く備えた強力な技術だが、 Microsoft が サポートするシステムでしカ硬えない。範囲か限定された ワークグループや Microsoft 製品しか利用しない組織で あ川ま受け入れられるだろうが、さまざまなシステムカ鯤 在する大莫な竟には対応できない。 HTTP/CGI 上に構築された従来の Web アプリケー ションは、企業組織において、今後も一定の彳齬リをはた し続けるであろう。構築や実装か容易で、すべての Web UNIX MAGAZINE 1998.6 ーに備わる標準をベースとしているからである。だ が HTTP や CGI については、状態保存かできなかった り、クライアントがリクエストするたびに重いアプリケー ションを起動しなければならなかったり、あるいはサー ーに依存しすぎていて拡張匪が乏しいといった欠点がよ く知られている。状態管理や CGI のオーバーヘッドの問 題は、さまざまな Web サーバー API により改善されて きてはいるが、独自イ士様の枠に縛られるという犠牲を払っ たうえでのことである。 Java 独自の RMI (Remote Method lnvocation) は、 Java のみで当されたアプリケーションに対応した良質 の分散システムであり、 Java クラスがほかのクラスのメ ソッドをリモートコールできるようにする。だが、企業規 模の実装では、 Sun が RMI に代わって IIOP を推進し そうである。 ソケット・プログラミングはすでに定着した手法になっ ていて、あらゆる主要 OS てサポートされており、きわめ て不身直生に富んでいる。 Java では、 Java. net と Java. io パッケージを通してサポートされる。だが、ソケット・プロ グラミングは低レベルの手法であり、開発者がネットワー ク・プログラミングをおこなう必要がある。 異機種混在工竟では、 CORBA と Java の組合せのみ がすべての代替アプローチを顳勺かっ有効に統合するこ とができる。 CORBA の利用によって、はかのアプロー 83
表 3 Servlet の代勺なメソッド javax. servlet servlce servlce doDeIete() javax. servlet. http init() doGet() doPost() doTrace() doOptions( mimeservlets. properties は、 MIME タイプをある ServIet に対応させるプロノヾティで、 mime-type/subtype= く servlet-name 〉 という書式で指定します。呼出し側の ServIet が次に呼 びたい Servlet の MIME タイプを Content-Type: へ ッダに出力すると、 Java Web Server がこれを判断して Chaining します。 ただし、このカ 1 去カイ吏えるのは、「 Servlet の使用力 1 去」 の節で紹介する ServIet 対応の Web サーバーのうち、 Java Web Server や JRun などの一部の環境に限られ ています。対応 / 非対応はそれぞれの環境のドキュメント て確認してください。 Servlet Chaining の 2 つ目のカ 1 去は、ある ServIet か ら別の ServIet のメソッドを直接起動するガ去です。たと えは、 Java Developer Connection (http://develop- er.javasoft.com/) では、セッション管理、用の Servlet を 経由して FiIeServIet へ ServIet Chaining しています。 "Cookie" response . setHeader ( public void service ( (Fi1eServIet) context . getServ1et fi1eServ1et public void init ( プログラムの一部を示します。 UNIX MAGAZINE 1998.6 fi1eServIet . service (request , response) ; "SessionServ1et=" + session. getld() ) ; HTTP リクエストが発生すると service() メソッドが 次に呼ぶ FiIeServIet をあらかしめ取得しておきます。 getServlet() メソッドを利用し、 Servlet Chaining で ロードされたときに実行される init() メソッドのなかで このプログラムでは、 Servlet が Servlet Engine に J ava のサーバー技術 実行されるので、そのセッションの HTTP Cookie を 取得しようと試み、失敗した場合は HTTP Cookie を setHeader() メソッドで HTTP ヘッダに追加してクライ アントに返します。次に service() メソッドか実行された ときには、 HTTP Cookie を HTTP ヘッダに付加してか ら、あらかじめ取得しておいた FileServlet の service( メソッドを実行します。 ただし、この方法では init() メソッドを実行した点 て呼び出される側の Servlet がロードされていない可能生 があります。その場合、 getServIet() メソッドを実行し ても Servlet のインスタンスか彳等られないので、 Servlet Chaining は実現できません。したがって、確実にロード しておくためには、呼び出される側の ServIet を起重加芋に ロードされるように設定する必要があります。 ServIet の実装 Servlet API は、 1997 年 9 月にリリースされた Java doPut() 61 doGet() 、 doPost() 、 doPut() 、 doDelete() 、 doTrace を利用したい場合には、 javax. servlet. http パッケージの service() メソッドとして実装します。 HTTP 固有の機能 生したときに実行されます。 ServIet の機能は、通常は service() メソッドは、クライアントのリクエストが発 let のさまざまな初期設定をおこなうように実装します。 ードされるときに実行されます。このメソッドは、 Serv- init() メソッドは、 Servlet が Servlet Engine 上にロ される代表的なメソッドを示します。 表 3 に、最斤の ServIet API で ServIet の実装に使用 実装します。 servlce ( ) 、 doGet() などのメソッドを 作成し、 init() 、 javax. servlet. http.HttpServlet クラスのサプクラスを ラス、とくに HTTP に依存した機能を使用するときは 般には javax. servlet. GenericServlet クラスのサプク ッドが追加されています。 ServIet を作成する場合、 し、とくに javax.gervlet. http ノヾッケージに多数のメソ Web Server 1.1 AIpha から HTTP 1.1 [ 5 ] に対応
DNS での署名鍵 : DNS レコードのイ隻の必要生は認知 されているが、鍵レコード自体を署名すべきであるとは 訒識されていない。 ロ・じ X. 509V3 : 認証のインフラストラクチャ。合意にはいたっ ていない。 TLS : 透 ; 顳勺レイヤ・セキュリティオ 有用て日一分な能力を備えているにもかかわらす、新しす ぎたり、ほかのコアプロトコルと同様の用途という理由で 外されたプロトコルも多い。たとえば、 AFT/SOCKS 、 RADIUS 、 firewalls 、 GSS-API 、 PGP 、 Kerberos 、 PGP-MIME 、 PKIX-3 、各種のホッフごとの認証 (OSPF 、 RSVP 、 RIPv2) 、 *POP 、 OTP 、 S/MIME 、 SSH 、 PFKey 、 IPsec API 、 SASL 、 CRAM/CHAP などが含まれている。 いくつかのプロトコルは、、有用ではない " と判断され た。 PEM ( RFC1421 ~ 1424 ) や MOSS ( RFC1848 ) などがそうである。さらに、平文によるパスワードだけは 絶対に使用すべきではないという点についても合意カ碍ら れている。 そのうえで、ワークショッフ。参加者はインターネット に、、欠けている要素 " として以下の 3 つを述べている。 ・オプジェクト・セキュリティ 安全な電子メーノレ 糸習各のセキュリティ これらは、すでに標準化の過程に入っているものもあれ ば、研究途ー - : のものもあるが、いすれにせよ今後インター ネット標準として広めていくべきものであろう。 DNS 関連 RFC2308 Negative Caching of DNS Queries (DNS NCACHE) DNS NCACHE : DNS 問合せの無効キャッシュ PS. 、 M. Andrews ( RFC1034 、 1035 更新 ) DNS (Domain Name System) による間合せ時の無 効キャッシュについて定義している。現在の状態は、、標準 化への提唱 " である。 1998 年 3 月 18 日に公開された。 RFC1034 では、無効キャッシュ ( 間合せ先に対する 非存 ) 芯答のキャッシュ ) はオプション ( イ寸加機能 ) だっ た。しかし、存在しないサイトに対する間合せは無駄であ 158 ds. internic. net のサービス終了と RFC/I-D の取得方法 言田は次回に述べる予定だが、 FYI としてお知らせしてお く。これまでは、 RFC や I-D は InterNIC のサーピスとし て集約されていた。しかし、 1998 年 3 月 31 日をもってこの サーピスは終了となり、それぞれ別の場所から得なければなら なくなっている。 すでに多くのミラーサイトで対策がとられているが、未対応 のところもあるようだ。新しい情報か増えない場合などは対応 していない可能性があるので、はかのサイトをあたってみる必 要があるだろう。 I-D のマスターサイトは、 http://www.ietf.org/ID.html からたどれる。 RFC はさまざまな場所に置かれている。 http://www.isi.edu/in-notes/rfc-retrieval.txt を参照してはしい。 国内では、 ftp://ftp.jaist.ac.jp/lnternet/ でム斤の情報をミラーしている。 I-D が、 ftp://ftp ・ jaist ・ ac. jp/Internet/lETF/internet-drafts/ RFC が、 ftp://ftp ・ jaist ・ ac. jp/Internet/RFC/ に置かれているのて活用していただきたい。 り、その間合せを削除する無効キャッシュは、 DNS の問 合をで発生するトラフィックの削減にきわめて有効な手段 である。 そこで、 RFC2308 ではこれまでの運用上明らかになっ た経験を適用し、無効キャッシュを DNS の必頭項目と して定義するものである。 RFC1034 との相違点を以下にまとめる。 ・無効キャッシュは付加機能ではない。 ・ RR をキャッシュする場合は非存在施もキャッシュ しなければならない。 ・オーサライズされていない非存在応答はキャッシュし なくてもよい。 ・オーソリテイからの SOA レコードはキャッシュしな けれはならない。 ・キャッシュされた SOA レコードを返答に加えなけれ はならない。 UNIX MAGAZINE 1998.6
ServIet 表 1 Servlet API のパッケージとおもなクラス クラス / インターフェイス名 機能 Javax ・ servlet ′ヾッケージ このインターフェイスはかならす実装しなければいけない。生成・重川い消滅に必要なメソッ Servlet ドカ症義されている 特定のプロトコルに依存しない汎用のメソッドを用いて Servlet を実装するためのクラス GenericServlet クライアントからデータを受信するためのインターフェイス ServIet Request クライアントに MIME 形式のデータを送信するためのインターフェイス Servlet Response Javax. servlet. http / ヾッケージ HTTP を処理する ServIet を作成するためのクラス HttpServIet HTTP および HTTPS 上で Cookie を扱うためのクラス Cookie HTTP でクライアントのデータを受信するためのインターフェイス (HTTP 特有のヘッ HttpServIetRequest ダも処理する ) HTTP でクライアントにデータを送信するためのインターフェイス (HTTP 特有のヘッ HttpServletResponse ダも処理する ) せん。 Java Web Server などの Java で実装されてい だけでなく、 Apache のモジュールのように、 ServIet を るサーバーでは、サーバーカ吶部て利用しているクラスを 利用してサーバー自身の機能を実装できます。たとえば、 Ser ⅵ et からも使えることがあります。しかし、このよう JavaSoft からリリースされている Java Web Server で な畤定のサーバー依存の機能を使用していない Servlet な ーとしてのすべての機能が Servlet で実 は、 Web サー らは、 Windows 95 - ーヒの Java Web Server でも、 So- 現されています。 Java Web Server のコア部分は Serv- laris 2 上の Servlet Engine を組み込んだ Apache でも let を動作させる機能をもつサーバーだけです。そして、 重川乍します。 このコアサーバー上で、指定された URL のファイルを送 信する FileServIet 、 CGI を実行する CgiServlet 、 SSI ーにアクセスするための JDBC さらに、 SQL サー を実現するための SSIncludeServlet などのさまざまな (Java Database Connectivity) など、 Java には豊富 Servlet を重川させることで Web サーバーの機能を実現 な API が用意されているので、複数の開発竟を使い分 しています。 Java Web Server については、別の記事国 けすに Java だけでアプリケーションカ鯛発できます。 を参考にしてください 1 もう 1 つの利点は、マルチスレッド処理を前提に言 - されていることです。このため、 Servlet は複数のプロセ ServIet の利点 スを起重丿ける CGI よりはるかに小さなコストでプログラ ムカ起動でき、しかも複数のリクエストを同時に受け付け ServIet にはいくつかの利点がありますが、とくに大き た場合のスケジューリングも軽くなります。 なものは次の 2 つです。 次の「動作メカニズム」の節で説明しますが、 ServIet ます、、、 Java 言語で記述できる " 点が挙げられます。 はマルチスレッド・モデルを用いています。 ServIet を使 衄はオプジェクト指向、マルチスレッド処理、 Java ロロロ、 うことで、マルチスレッド化された効率のよいプログラム ガべージ・コレクションなど、さまざまなソフトウェア技 を簡単に書くことかできます。 術の成果を採り入れています。しかも、既存のプログラミ ング言言韶 ) 長所噬可斤を徹底的に斤して、簡潔な信様と Apache 上でおこなった CGI 、 mod-perl 、 Servlet の べンチマーク・テストの結果を表 2-a に示します。このテ 強力な言当能力をあわせもつように日されています。 ストには、「 WWW サーバーの育て方」 [ 2 ] にある去を 、 100 % pure Java " の規定に材処して作られた Java プ 利用しました。 ServIet については、同等の処理をおこな ログラムは、 "Write Once, Run Anywhere ”のオ垣五に う Servlet を作成しました。処理の内容は、 URL のパラ 區われているとおり、特定のプラットホームに依存しま メータを読み込んで出力するものです。テストでは、 50 回 1 この記事では、リリース当衫、、 Jeeves" という名前て召介されていま 繰り返し呼び出しています。 す。 1 三ロ 58 UNIX MAGAZINE 1998.6