Webアプリケーションのサーバ通信[index][top][bottom][prev][next]Webアプリケーションのサーバ通信ちょっと問題が通常、Webアプリケーションでは、サーバからデータを取得する場合、サーバから次画面のHTMLを全てロードし、表示します。この方法では、実際にロードしなければならないデータは少量でも、画面表示に必要なHTML全てをロードするため、不要なネットワークトラフィックを増加させる上、クライアントPCのCPUリソースを、本来なら必要ない画面の再描画に、多くを割くことになります。これは、当然パフォーマンスの低下に直結します。この問題を解決するには、Webアプリケーションのクライアントが、直接サーバと通信する必要があります。Javaアプレットを使えば、解決するのですが、この場合もっと多くの問題が発生する可能性があります(Javaのバージョンの問題や、起動時のパフォーマンス。そもそもアプレットを作成するお金や期間の問題など等)。スマートな解決策は、多分WebブラウザがSOAPを実装することでしょう。実際一部のWebブラウザは、SOAPクライアントの機能を実装しています。これを使えば、サーバとxmlベースのデータを自由にやり取りできます。現実には、SOAPクライアントの機能を実装したWebブラウザの利用率は数パーセント程度で、これを前提としたアプリケーションなどは、到底受け入れられる状態ではありません。最低でも70~80パーセント程度の利用率がないと、顧客に提案もできません。解決策其の一そこで、HTMLのフレームを利用して、サーバとの通信を行う方法を考えて見ましょう。サーバからのデータをバッファ用のフレームに読み込み、読み込んだHTMLのonloadイベントで、データをアプリケーション用フレームの画面にコピーします。データのコピーにはJavaScriptによるDOMを利用します。HTMLのフレームや、単純にデータコピーをする程度のDOMは、現在利用されている、かなりのWebブラウザが実装しているため、作成したアプリケーションを、多くの利用者が使えないということは、殆ど無いと思われます。実現方法は至って簡単です。以下のようなHTMLとスクリプトがあれば、完成です。onLoad="result()"></body>上記の例では、Formから直接result.htmlをロードしていますが、ここをCGIやJSPに変更し、その中でコードから名前を検索して返すよう実装すれば、Webアプリケーションのできあがりです。ここで、HTMLを使って画面を作成する時の注意事項ですが、xhtmlの利用を強くお勧めします。これは、xmlの仕様に則ってコーディングすることができるからです。xmlの仕様に則ってコーディングされていれば、DOMやXSLTなどを使ってインターフェイス仕様を作成したり、複数の画面を統一的に変更したりすることが、簡単になります。100画面の特定のボタンに、クラス属性を追加する時に、全画面をHTMLエディターで開いて属性を付けるのと、特定のIDのボタンにクラス属性を追加するのとでは、労力は雲泥の差です。DOMが正しく動作しないなどのトラブルも、少なくなります。上のサンプルの実装です。効果のほどを確認してください。サンプルに多少手を加えています。(1~3)解決策其の二(こちらが本命?)iframeを使う方法は、殆どのWebブラウザで使えるうえ方式も簡単なので、ある程度JavaScriptが分かっていれば、誰にでも利用できるという大きな利点があります。この世の中を動かしているのは、プログラマ(またはSE)と呼ばれる、一種独特の人達です。彼ら(実は私も含めて)の鉄則は、「難しいものほど優れている」なのです(うそ)。現在一般的に使用されているWebブラウザの多くで実装されている機能に、XMLHttpRequestというものがあります。最近流行なので、いろいろなサイトで紹介されていますが、たしかにそれなりの利点があります(残念ながら欠点もあります!)。欠点を論(あげつら)うFormの内容を簡単にPOSTできないFormの内容をPOSTしたい場合は、全てのコントロールからデータを取得して、編集するという処理が必要になります。ファイルのアップロードができない上記の内容とも多少関連しますが、サーバへ送るデータを、独自に編集しなければならないため、ローカルのファイルをアップロードするような処理には使えません。これに関しては回避策がないので、ファイルのアップロードが必要な場合は、アップロードのみ従来のFormのサブミットを利用し、それ以外にXMLHttpRequestを利用するなどの対策が必要になります。Webブラウザによって、実装が異なる元々、マイクロソフトがActiveXオブジェクトとして実装したものなので、当り前といえば当り前なのですが、ActiveXをサポートしないIE以外のWebブラウザとIEでは、XMLHttpRequestオブジェクトのインスタンスを取得する方法が異なります。利点を褒め湛える同期通信ができるリクエストを投げてレスポンスが帰るまで、処理をブロックすることができます。サーバからのレスポンスを、確実に取得したい場合などに利用します。エラーを検知できるXMLHttpRequestを利用する、最大の理由かもしれません。Webサーバが返してくるレスポンスコードを取得して、処理を振り分けることができます。HTTPの制御ができるXMLHttpRequestには、リクエストのHTTPヘッダを変更/追加するメソッドが用意されています。このメソッドを利用することで、ひとつのファイルを分割して取得するなど、サーバ間との通信を細かく制御できます。Reserved.新規公開日:2003.07.07改定版公開:2007.02.04最終更新日:2007.02.04。