正しく動作するには、これらをサーバー上の仮想アプリケーションに配置し、提供された global.asa ファイルをアプリケーションのルート ディレクトリに配置する必要があります。最も簡単な方法は、global.asa ファイルをデフォルトの Web サイトのルート ディレクトリ (デフォルトでは C:/InetPub/WWWRoot) に置くことです。
後で復元できるように、既存の global.asa ファイルの名前を変更することをお勧めします。
1. Application コレクションのコンテンツの表示
ASPCounter オブジェクトは StaticObjects コレクション (<OBJECT> 要素で定義) のメンバーですが、残りのオブジェクト (Server.CreateObject によってインスタンス化) は、Contents コレクションのメンバーです。
前に見た global.asa サンプル Web ページを使用すると、これらのコレクションに値が入れられていることがわかります。
<!-- ASPCounter コンポーネントのインスタンスを宣言します。
アプリケーションレベルのスコープ //-->
<OBJECT ID=”ASPCounter” RUNAT=”Server” SCOPE=”Applicatoin”
PROGID=”MSWC.カウンター”>
</オブジェクト>
...
...
<スクリプト言語=”VBScript” RUNAT=”サーバー”>
サブアプリケーション_onStart()
'アプリケーションレベルのスコープを持つ ADO 接続のインスタンスを作成します
Set Application("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'バリアント配列を作成し、それを埋めます
varArray(0) = "これは"
varArray(1) = "バリアント配列"
varArray(2) = 「に保存されている」
varArray(3) = "アプリケーション オブジェクト"
Application("Variant_Array") = varArray 'アプリケーションに格納します
Application(“Start_Time”) = CStr(Now) '日付/時刻を文字列として保存します
Application(“Visit_Count”) = 0 'カウンター変数をゼロに設定します
エンドサブ
...
...
</SCRIPT>
(1)Contents コレクションを走査するためのコード
Contents コレクションを走査するには、For Each...Next 構造体を使用します。コレクション内の各項目は、単純な Variant 型変数、Variant の配列、またはオブジェクトへの参照にすることができます。値のタイプごとに異なる方法で処理する必要があるため、それぞれをチェックしてタイプを判断する必要があります。
VBScript で VarType 関数を使用すると、この作業を実行できます。代わりに IsObject 関数と IsArray 関数を使用してください。
Application.Contents の各 objItem に対して
If IsObject(Application.Contents(objItem)) then
Response.Write "オブジェクト参照: '" & objItem & "'
」
ElseIf IsArray(Application.Contents(objItem)) then
Response.Write "Array: '" & objItem & "' の内容は次のとおりです:
」
VarArray = Application.Contents(objItem)
'注: 以下は 1 次元配列でのみ機能します
intLoop = 0 の場合 UBound(varArray)
Response.Write " Index(" & intLoop & ") = " & _
VarArray(intLoop) & “
」
次
それ以外
Response.Write "変数: '" & objItem & "' = " _
& Application.Contents(objItem) & “
」
終了の場合
次に、
プログラムが Application オブジェクトからこの配列をどのように取得するかに注目してください。これをローカル (バリアント) 変数に割り当て、次のステートメントを使用します。
varArray = Application.Contents(objItem)
UBound 関数を使用して、配列のサイズ (要素数) を確認します。この値は終了条件として使用できます。トラバーサルの場合:
intLoop = 0 UBound(varArray) の場合
この例は 1 次元配列であり、そのような配列の内容のみを表示します。多次元配列を処理するには、必要に応じてコードを編集します。例:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
intDimension = 0 の場合 intNumberOfDimensions まで
Response.Write " Index(" & intLoop & ") = " _
& varArray(intLoop, intDimension)
次
応答。「」と書き込みます。
次へ
(2) StaticObjects コレクションを走査するコード
StaticObjects コレクションには、global.asa の <OBJECT> 要素を使用して宣言されたすべてのオブジェクト参照が含まれています。各エントリはオブジェクト変数であるため、より単純なコードで配列を反復処理できます。オブジェクトの名前 (元々 ID プロパティで定義されているとおり) を出力します。
Application.StaticObjects の各 objItem について
IsObject(Application.StaticObjects(objItem)) の場合
Response.Write "<OBJECT>要素:ID='" & objItem & "'
」
終了の場合
次へ
2. コレクションに対する操作
1) Content
コレクションに値を追加します。Contents コレクションに値を追加する方法は、global.asa Web ページのスクリプト コードで使用される方法と同じです。提案された名前と値 (必要に応じて編集可能) を使用して、新しい Variant 値を Application オブジェクトに追加できるようにします。ボタンをクリックし、ページをリロードし、値を Application.Contents コレクションに追加して、リストに表示します。 。
新しい Content エントリのコードを追加して、
サンプル Web ページのフォームにすべてのボタンとその他の HTML コントロールを配置します。 ACTION は、現在の Web ページのパスを設定し、フォームが送信されたときにそれを再読み込みします。 METHOD 属性は「POST」であるため、コントロールの値は Request.Form コレクションに表示されます。これら 2 つのテクニックは前の章で使用されています:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
このフォームのボタンは通常の HTML INPUT コントロールであり、同じタイトルが付いています。 (スペース 3 つ) ただし、名前は異なります。たとえば、最初のボタンを作成する (Application オブジェクトに値を追加する) コードは次のとおりです。
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
Web ページをリロードするときに、Request.Form コレクションを確認します。 , どの SUBMIT ボタンがクリックされたかを判断し、それに応じて処理します。 Application オブジェクトに値を追加するボタン (ボタンの名前は HTML <INPUT> 要素で cmdAdd です) の場合は、次のプログラム セグメントを使用します。
If Len(Request.Form("cmdAdd")) then
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
アプリケーション.ロック
アプリケーション("strVarName") = strVarValue
アプリケーション.ロック解除
End If
アプリケーションが Application.Lock メソッドと Application.Unlock メソッドを使用して、2 人のユーザーが同時にアクセスすることによってこれらの値が混同されないようにする方法に注意してください。特定の値を設定するだけの場合、これは通常不可能です。ただし、常に Lock メソッドと Unlock メソッドを使用することが賢明です。
2)Contents コレクションから値を削除します。
(前に行ったように) ASP Web ページを実行するときに、Contents コレクションを走査してこのリストを作成します。ただし、各項目の名前を収集し、それを <SELECT> リスト要素内の <OPTION> 要素に入れるだけです
。
<SELECT NAME=”lstRemove” SIZE=”1”>
<%
Application.Contents の各 objItem について
Response.Write “<OPTION>” & objItem & “</OPTION>”
次
&>
</SELECT>
…
ASP コードが実行されると、ブラウザに表示される結果は次のようになります:
<SELECT NAME="lstRemove" SIZE="1">
<OPTION>ADO接続</OPTION>
<オプション>Variant_Array</オプション>
<OPTION>開始時刻</OPTION>
<OPTION>訪問回数</OPTION>
<OPTION>My_New_Value</OPTION>
</SELECT>
(1) 単一値の削除 単一
値を削除するボタンをクリックすると、フォームは再度同じ Web ページに送信されますが、今度は cmdRemoveThis の SUBMIT ボタンが設定され、削除Application.Contents コレクションのメソッドが呼び出されます。
If Len(Request.Form("cmdRemoveThis")) then
strToRemove = Request.Form("lstRemove")
Response.Write "strToRemove = " & strToRemove
アプリケーション.ロック
Application.Contents.Remove(strToRemove)
アプリケーション.ロック解除
End If
これは、Application オブジェクトではなく、Contents コレクションのメソッドであることに注意してください。構文は Application.Remove ではなく、Application.Contents.Remove です。
Content コレクションから Start_Time 値を削除した結果。
(2) すべての値を削除します。3
つの SUBMIT タイプのボタンのうち最後のボタンをクリックすると、Web ページのコードはクリックされたボタンが cmdRemoveAll であることを検出し、Application.Contents コレクションの RemoveAll メソッドを実行します
。リクエスト。Form("cmdRemoveAll")) 次に、
アプリケーション.ロック
アプリケーション.コンテンツ.すべて削除
アプリケーション.ロック解除
これはアプリケーションではなく、コンテンツ コレクションのメソッドであることを再度思い出してください
。
構文は Application.RemoveAll ではなく、Application.Contents.RemoveAll です。