Application オブジェクトを使用すると、指定されたアプリケーションのすべてのユーザー間で情報を共有できます。ASP 対応アプリケーションは、仮想ディレクトリとそのサブディレクトリにあるすべての .asp ファイルとして定義されます。Application オブジェクトは複数のユーザーで共有できるため、これらのユーザーがプロパティを同時に変更することがないように、Lock メソッドと Unlock メソッドが用意されています。
Application.method
Application Contents コレクション | スクリプト コマンドによってアプリケーションに追加されたすべての項目が含まれます。 |
Application StaticObjects コレクション | <OBJECT> タグによってセッションに追加されたすべてのオブジェクトが含まれます。 |
Contents.Remove | Contents.Remove メソッドは、Application オブジェクトの Contents コレクションから項目を削除します。 |
Contents.RemoveAll | Contents.RemoveAll メソッドは、Application オブジェクトの Contents コレクションからすべての項目を削除します。 |
Lock | Lock メソッドは、ほかのクライアントが Application オブジェクトのプロパティを変更できないようにします。 |
Unlock | Unlock メソッドは、ほかのクライアントが Application オブジェクトのプロパティを変更できるようにします。 |
Application_OnEnd |
Application_OnStart |
これらのイベントに対応するスクリプトは、Global.asa ファイルで宣言されています。これらのイベントおよび Global.asa ファイルの詳細については、「Global.asa リファレンス」を参照してください。
Application コレクションには値を格納できます。Application コレクションに格納されていえる情報はアプリケーションを通じて利用でき、アプリケーション スコープを持ちます。次のスクリプトは、2 種類の変数を格納します。
<%
Application("greeting") = "Welcome to My Web World!"
Application("num") = 25
%>
これらの変数はそれぞれ Application Contents コレクションのメンバになります。
アプリケーション スコープを持つ変数にコンポーネントのインスタンスを割り当てることもできます。コンポーネントのインスタンスを Server.CreateObject メソッドを使用して変数に割り当てた場合は、この変数は Application.Contents コレクションのメンバになります。<OBJECT> タグを使用して変数に割り当てた場合は、この変数は Application StaticObjects コレクションのメンバになります。
コンポーネントによってはアプリケーション スコープを持つように設計されていないものがあるので、アプリケーション スコープを持つ変数にコンポーネントのインスタンスを割り当てる場合は注意が必要です。詳細については、Platform SDK を参照してください。
Application Contents コレクション内の変数にコンポーネントのインスタンスを割り当てる際に、主要スクリプト言語として Visual Basic® Scripting Edition (VBScript) を使用する場合は、Set キーワードを使用する必要があります。このスクリプト例を次に示します。
<% Set Application("Obj1") = Server.CreateObject("MyComponent") %>
この後、次のようにして MyComponent
のメソッドとプロパティを後続の Web ページ上で参照することができます。
<% Application("Obj1").MyObjMethod %>
または、オブジェクトのローカル コピーを取り出して次のようにすることもできます。
<%
Set MyLocalObj1 = Application("Obj1")
MyLocalObj1.MyObjMethod
%>
アプリケーション スコープを持つオブジェクトを作成する方法には、Global.asa ファイルで <OBJECT> タグを使用する方法もあります。詳細については、「Global.asa リファレンス」を参照してください。
Application オブジェクトに組み込みオブジェクトを格納することはできません。たとえば、次のようなスクリプトはすべてエラーを返します。
<%
Set Application("var1") = Session
Set Application("var2") = Request
Set Application("var3") = Response
Set Application("var4") = Server
Set Application("var5") = Application
Set Application("var6") = ObjectContext
%>
アプリケーション スコープを与えるコンポーネントで使用されているスレッド モデルには注意が必要です。コンポーネントのインスタンスを Application コレクションの任意のコレクション内の変数に割り当てる必要があるかどうかは、コンポーネントの開発に使用したスレッド モデルによって左右されます。
Application オブジェクトに配列を格納する場合は、配列に格納されている要素を直接変更しないようにしてください。たとえば、次のようなスクリプトは正しく機能しません。
<% Application("StoredArray")(3) = "new value" %>
これは、Application オブジェクトがコレクションとして実装されているためです。この場合、新しい値は、配列要素 StoredArray(3)
に設定されるのではなく、Application オブジェクト コレクションに含まれることになり、その場所に格納されていた情報はすべて上書きされてしまいます。
このため、Application オブジェクトに配列を格納する場合は、配列のコピーを取得してからその要素の取得や変更を行うようにしてください。そして、配列の操作が終わった時点でもう一度 Application オブジェクトに配列を格納し、変更内容が保存されるようにします。以上の操作の例を次に示します。
---file1.asp---
<%
'Creating and initializing the array.
dim MyArray()
Redim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"
'Storing the array in the Application object.
Application.Lock
Application("StoredArray") = MyArray
Application.Unlock
Server.Transfer("file2.asp")
%>
---file2.asp---
<%
'Retrieving the array from the Application Object
'and modifying its second element.
LocalArray = Application("StoredArray")
LocalArray(1) = " there"
'Printing out the string "hello there."
Response.Write(LocalArray(0)&LocalArray(1))
'Re-storing the array in the Application object.
'This overwrites the values in StoredArray with the new values.
Application.Lock
Application("StoredArray") = LocalArray
Application.Unlock
%>
次の例は、アプリケーション変数 NumVisits を使用して、特定のページへのアクセス数を格納します。まず、現在のクライアントだけが NumVisits
にアクセスしたり、値を変更したりできるようにするために、Lock メソッドを呼び出します。その後、ほかのユーザーが Application オブジェクトにアクセスできるように Unlock メソッドを呼び出します。
<%
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application.Unlock
%>
This application page has been visited
<%= Application("NumVisits") %> times!
Application オブジェクトを使用したサンプル .asp ファイルは、Platform SDK の IIS セクションにある ASP Samples または MSDN Online - Internet Information Services にあります。