著者: Cloves Carneiro
翻訳者: simmone
著作権に関する声明: Matrix によって許可されている Web サイトでは、転載する場合、記事およびこの声明の元の情報源と著者情報を必ずハイパーリンクの形式で示してください。著者: Cloves Carneiro;simmone。
元のアドレス: http://www.javaworld.com/javaworld/jw-06-2005/jw-0620-dwr.html
中国語のアドレス: http://www.matrix.org.cn/resource/article/43/43926_DWR_AJAX.html
キーワード: DWR javascript :void(0);">AJAX
概要
この記事では、Web アプリケーションの使いやすさを向上させるためのオープン ソースプロジェクト DWR (Direct Web Remoting) と javascript :void(0);">AJAX (Asynchronous JavaScript and XML ) の概念の使用について説明します。著者がステップごとに示します。 DWR が javascript を作成する仕組み :void(0);">AJAX アプリケーションはシンプルかつ高速です。 (1,600 ワード、2005 年 6 月 20 日)
javascript :void(0);">AJAX (非同期 JavaScript および XML) は、 HTML (または XHTML) とカスケード スタイル シートを組み合わせて使用して、インタラクティブな Web アプリケーションを作成するための情報を表現する開発テクノロジを説明します。ドキュメントオブジェクトモデル (DOM) )、JavaScript は、表現された情報を動的に表示し、対話します。また、XMLHttpRequest オブジェクトは、Web サーバーと非同期にデータを交換および処理します。
インターネット上の多くの例では、HTML ファイル内で XMLHttpRequest を使用してサーバーと対話するために必要な手順が示されています。 XMLHttpRequest コードを手動で記述して保守する場合、開発者は多くの潜在的な問題、特にブラウザ間の DOM 実装の互換性などの問題に対処する必要があります。これにより、JavaScript コードのコーディングとデバッグに数え切れないほどの時間が費やされることになりますが、これは明らかに開発者にとって使いやすいものではありません。
DWR (Direct Web Remoting) プロジェクトは、JavaScript :void(0);">AJAX およびXMLHttpRequestを簡単な方法で使用したい開発者向けの、 Apacheライセンスに基づくオープン ソース ソリューションです。 HTML ページからアプリケーション サーバー上のJavaオブジェクトを呼び出す方法。HTML コードの可読性を維持しながら、さまざまな種類のパラメータを操作します。
DWR はデザインに挿入するものではなく、オブジェクトに何らかの継承構造の使用を強制するものでもありません。サーブレット フレームワーク内のアプリケーションとうまく連携します。 DHTML プログラミング経験のない開発者のために、DWR は、テーブルの組み立て、選択ドロップダウン ボックスへの項目の入力、<div> や <span などの HTML 要素の内容の変更など、頻繁に使用される DHTML タスクを含む JavaScript ライブラリも提供します。 . >
DWR の Web サイトには詳細が記載されており、この記事の基礎となる広範なドキュメントが用意されています。 DWR がどのように使用され、そのライブラリを使用してどのような種類の作業を実行できるかを示すために、いくつかの例が提供されています。
この記事では、DWR を使用した Web アプリケーションがどのように構築されるかを段階的に確認できます。この単純なサンプル アプリケーションを作成するために必要な詳細を示します。このサンプル アプリケーションはダウンロード可能で、環境にデプロイして DWR がどのように機能するかを確認できます。
注: javascript :void(0);">AJAX に関する情報を見つけるのは難しくありません。Web 上にはこのトピックを扱った記事やブログ エントリがいくつかあり、それぞれがこの概念のさまざまな側面を指摘し、コメントしようとしています。 「リソース」セクションには、javascript :void(0);">AJAX について詳しく学ぶための例や記事への興味深いリンクがいくつかあります。
サンプル アプリケーション<BR>この記事で使用されるサンプル アプリケーションは、トロントのアパート賃貸検索エンジンをシミュレートします。ユーザーは、検索する前に一連の検索基準を選択できます。インタラクティブ性を向上させるために、javascript :void(0);">AJAX は次の 2 つの状況で使用されます。
·アプリケーションは、ユーザーの選択に基づいて返される検索結果の数をユーザーに通知します。この数は、ユーザーが選択したベッドルームとバスルームの数、または価格帯が変更されたときに、javascript :void(0);">AJAX を使用してリアルタイムで更新されます。条件に一致する検索結果が存在しないか、多すぎる場合の場合、ユーザーは検索ボタンをクリックする必要はありません。
· データベースのクエリと結果の取得は javascript :void(0);">AJAX によって行われます。ユーザーが [結果の表示] ボタンを押すと、データベースが検索を実行します。このようにして、アプリケーションの応答性が向上し、全体の応答性が向上します。結果を表示するためにページをオーバーロードする必要はありません。
データベース<BR>私たちが使用するデータベースは HSQL です。これは Java SQL データベース エンジンであり、使用するリソースが非常に少なく、インストールや設定を行わずに Web アプリケーションにバンドルできます。 SQL ファイルは、Web アプリケーション コンテキストの開始時にメモリ内テーブルを作成し、いくつかのレコードを追加するために使用されます。
Java クラス<BR>アプリケーションには、Apartment と ApartmentDAO という 2 つの主要なクラスが含まれています。 Apartment.java クラスは、プロパティとゲッター/セッター メソッドを備えた単純な Java クラスです。 ApartmentDAO.java は、データベースにクエリを実行し、ユーザーの検索条件に基づいて情報を返すために使用されるデータ アクセス クラスです。 ApartmentDAO クラスの実装は簡単です。Java データベース接続呼び出しを直接使用して、ユーザーの要求に一致するアパートメントの総数と利用可能なアパートメントのリストを取得します。
DWR の構成と使用<BR>DWR の使用のセットアップは簡単です。DWR jar ファイルを Web アプリケーションの WEB-INF/lib ディレクトリにコピーし、web.xml にサーブレット宣言を追加して、DWR 構成ファイルを作成します。 DWR の配布には別の jar ファイルが必要です。 DWR サーブレットをアプリケーションの WEB-INF/web.xml のデプロイメント記述子セクションに追加する必要があります。
<サーブレット>
<サーブレット名>dwr-invoker</サーブレット名>
<表示名>DWR サーブレット</表示名>
<description>ダイレクト Web リモーター サーブレット</description>
<サーブレットクラス>uk.ltd.getahead.dwr.DWRServlet</サーブレットクラス>
<初期パラメータ>
<param-name>デバッグ</param-name>
<param-value>true</param-value>
</init-param>
</サーブレット>
<サーブレットマッピング>
<サーブレット名>dwr-invoker</サーブレット名>
<url-パターン>/dwr/*</url-パターン>
</サーブレットマッピング>
オプションの手順では、上記の例のように、サーブレットの説明セクションでデバッグ パラメーターを true に設定して、DWR をデバッグ モードに設定します。 DWR がデバッグ モードの場合、HTML ページからアクセス可能なすべての Java オブジェクトを確認できます。使用可能なオブジェクトのリストを含む Web ページが URL /WEBAPP/dwr に表示され、オブジェクトのパブリック メソッドが表示されます。リストされているメソッドはページから呼び出すことができ、初めてサーバー上のオブジェクトに対してメソッドを実行できるようになります。次の図は、デバッグ ページがどのように見えるかを示しています。
デバッグページ
次に、XMLHttpRequest オブジェクトを介してどのオブジェクトがリクエストを受信するかを DWR に知らせる必要があります。このタスクは、dwr.xml という構成ファイルによって実行されます。構成ファイルでは、DWR が Web ページから呼び出すことを許可するオブジェクトを定義します。設計上、DWR では公開クラスのすべてのパブリック メソッドへのアクセスが許可されていますが、この例ではいくつかのメソッドへのアクセスのみが許可されています。この例の構成ファイルは次のとおりです。
<dwr>
<許可>
<convert Converter="bean" match="dwr.sample.Apartment"/>
<create Creator="new" javascript="ApartmentDAO" class="dwr.sample.ApartmentDAO">
<include method="findApartments"/>
<include method="countApartments"/>
</作成>
</許可>
</dwr>
この例では、上記のファイルにより両方の目標が達成されます。まず、<convert> タグは、セキュリティ上の理由から、DWR はデフォルトでは通常の Bean を変換しないため、DWR に dwr.sample.Apartment オブジェクトの型を連想配列に変換するように指示します。次に、<create> タグにより、DWR は JavaScript 呼び出し用の dwr.sample.ApartmentDAO クラスを公開できます。ページ内で使用する JavaScript ファイルは javascript 属性によって定義されます。 <include> タグに注意する必要があります。このタグは、dwr.sample.ApartmentDAO クラスのどのメソッドが使用可能かを指定します。
HTML/JSP コードが構成されたら、Web アプリケーションを開始できます。この時点で、DWR は HTML または Java サーバー側ページ (JSP) から必要なメソッドを呼び出すことができます。 JavaScript ファイルを作成します。 search.jsp ファイルでは、DWR によって提供される JavaScript インターフェイスと DWR エンジンを追加し、次の 3 行をコードに追加する必要があります:
<script src='dwr/interface/ApartmentDAO.js'></スクリプト>
<script src='dwr/engine.js'></script>
<script src='dwr/util.js'></script>
ユーザーが検索条件を変更すると、これがサンプル プログラム内の javascript :void(0);">AJAX の最初のアプリケーションであることがわかりました。基準が変更されると、利用可能なアパートメントの数が更新されます。私は 2 つの JavaScript 関数を作成しました。ApartmentDAO.countApartments() 関数は、最初のパラメーターである、loadTotal() 関数です。 DWR は、サーバーから応答を受信したときに呼び出します。次に、対話型シナリオで使用される JavaScript 関数の <div> に結果を表示するために、loadTotal が呼び出されます
。
$("resultTable").style.display = 'none';
var 寝室 = document.getElementById("寝室").value;
var バスルーム = document.getElementById("バスルーム").value;
var 価格 = document.getElementById("価格").value;
ApartmentDAO.countApartments(loadTotal、ベッドルーム、バスルーム、価格);
}
関数loadTotal(データ) {
document.getElementById("totalRecords").innerHTML = データ;
明らかに、
ユーザーは自分の検索条件に一致するアパートのリストを見たいと考えています。次に、ユーザーが検索条件に満足し、合計が有効である場合、結果を表示するボタンを押すと、updateResults() JavaScript メソッドが呼び出されます。
関数 updateResults() {
DWRUtil.removeAllRows("アパート本体");
var 寝室 = document.getElementById("寝室").value;
var バスルーム = document.getElementById("バスルーム").value;
var 価格 = document.getElementById("価格").value;
ApartmentDAO.findApartments(fillTable、ベッドルーム、バスルーム、価格);
$("resultTable").style.display = '';
}
関数 fillTable(アパートメント) {
DWRUtil.addRows("アパートボディ", アパート, [ getId, getAddress, getBedrooms, getBathrooms, getPrice ]);
}
updateResults() メソッドは、返された検索結果を格納するテーブル フィールドをクリアし、ユーザー インターフェイスから必要なパラメーターを取得し、これらのパラメーターを DWR によって作成された ApartmentDAO オブジェクトに渡します。次に、データベース クエリが実行され、fillTable() が呼び出されます。これにより、DWR (アパートメント) によって返されたオブジェクトが解析され、ページ (アパートメントボディ) に表示されます。
セキュリティ要素<BR>例を簡潔にするために、ApartmentDAO クラスは可能な限り単純に保たれていますが、そのようなクラスには通常、insert()、update()、delete() などのデータを操作するための set メソッドのセットがあります。 DWR は、すべての HTML ページから呼び出されるすべてのパブリック メソッドを公開します。セキュリティ上の理由から、このようにデータ アクセス レイヤーを公開するのは賢明ではありません。開発者は、すべての JavaScript 関数と基礎となるビジネス コンポーネント間の通信を一元化するファサードを作成して、機能の過剰な公開を制限できます。
結論<BR>この記事は、プロジェクトで DWR を利用した JavaScript :void(0);">AJAX を使用するための始まりにすぎません。DWR を使用すると、アプリケーションの対話モデルを改善する方法に集中できます。 JavaScript コードの作成とデバッグの負担 javascript :void(0);">AJAX の最も興味深い課題は、ユーザビリティを向上させる場所と方法を定義することです。 DWR は、Web ページと Java オブジェクト間の通信を操作する役割を担うため、アプリケーションのユーザー インターフェイスをより使いやすくする方法に完全に集中できるようになります。
この記事を読んで非常に貴重なフィードバックをくれた Mircea Oancea と Marcos Pereira に感謝します。
リソース·javaworld.com:javaworld.com
·Matrix-Java 開発者コミュニティ: http://www.matrix.org.cn/
·onjava.com:onjava.com
・サンプルプログラムの全ソースコードをダウンロード:http://www.javaworld.com/javaworld/jw-06-2005/dwr/jw-0620-dwr.war
·DWR: http://www.getahead.ltd.uk/dwr/index.html
・HSQL: http://hsqldb.sourceforge.net/
·javascript :void(0);">AJAX の定義: http://en.wikipedia.org/wiki/javascript :void(0);">AJAX
· 「javascript :void(0);">AJAX: Web アプリケーションへの新しい道」: Jesse James Garrett (Adaptive Path、2005.2): http://www.adaptivepath.com/publications/essays/archives/000385.php
· 「非常に動的な Web インターフェイス」Drew McLellan (xml.com、2005.2): http://www.xml.com/pub/a/2005/02/09/xml-http-request.html
·XMLHttpRequest & javascript :void(0);">AJAX の動作例: http://www.fiftyfoureleven.com/resources/programming/xmlhttprequest/examples
· 「使用可能な XMLHttpRequest の実践」 Thomas Baekdal (Baekdal.com、2005.3): http://www.baekdal.com/articles/Usability/usable-XMLHttpRequest/
·「XMLHttpRequest 使用ガイドライン」Thomas Baekdal (Baekdal.com、2005.2): http://www.baekdal.com/articles/Usability/XMLHttpRequest-guidelines/