เพื่อให้ทำงานได้อย่างถูกต้อง ต้องวางไฟล์เหล่านั้นไว้ในแอปพลิเคชันเสมือนบนเซิร์ฟเวอร์ และไฟล์ global.asa ที่ให้มาจะต้องวางไว้ในไดเร็กทอรีรากของแอปพลิเคชัน วิธีที่ง่ายที่สุดคือการใส่ไฟล์ global.asa ลงในไดเร็กทอรีรากของเว็บไซต์เริ่มต้น (C:/InetPub/WWWRoot ตามค่าเริ่มต้น)
เป็นความคิดที่ดีที่จะเปลี่ยนชื่อไฟล์ global.asa ที่มีอยู่เพื่อให้สามารถกู้คืนได้ในภายหลัง
1. การแสดงเนื้อหาของคอลเลกชันแอปพลิเคชัน
วัตถุ ASPCounter เป็นสมาชิกของคอลเลกชัน StaticObjects (กำหนดผ่านองค์ประกอบ <OBJECT>) แต่ส่วนที่เหลือ (สร้างอินสแตนซ์โดย Server.CreateObject) เป็นสมาชิกของคอลเลกชันเนื้อหา
คุณสามารถดูค่าที่ใส่ลงในคอลเลกชันเหล่านี้ได้โดยใช้หน้าเว็บตัวอย่าง global.asa ซึ่งเราเห็นก่อนหน้านี้:
<!-- ประกาศอินสแตนซ์ขององค์ประกอบ ASPCounter ด้วย
ขอบเขตระดับแอปพลิเคชัน //-->
<OBJECT ID=”ASPCounter” RUNAT=”เซิร์ฟเวอร์” SCOPE=”แอปพลิเคชัน”
PROGID=”MSWC.เคาน์เตอร์”>
</วัตถุ><
-
-
<ภาษาสคริปต์=”VBScript” RUNAT=”เซิร์ฟเวอร์”>
Application_onStart() ย่อย
'สร้างอินสแตนซ์ของการเชื่อมต่อ ADO ด้วยขอบเขตระดับแอปพลิเคชัน
ตั้งค่าแอปพลิเคชัน ("ADOConnection") = Server.CreateObject ("ADODB.Connection")
Dim varArray(3) 'สร้างอาร์เรย์ Variant แล้วเติมลงไป
varArray(0) = "นี่คือ"
varArray(1) = "อาร์เรย์ตัวแปร"
varArray(2) = “เก็บไว้ใน”
varArray(3) = "วัตถุแอปพลิเคชัน"
Application("Variant_Array") = varArray 'จัดเก็บไว้ใน thd Application
Application(“Start_Time”) = CStr(Now) 'จัดเก็บวันที่/เวลาเป็นสตริง
Application(“Visit_Count”) = 0 'ตั้งค่าตัวแปรตัวนับเป็นศูนย์
จบหมวดย่อย
-
-
</SCRIPT>
(1) โค้ดสำหรับการสำรวจคอลเลกชันเนื้อหา
คุณสามารถใช้โครงสร้าง For Each...Next ได้ แต่ละรายการในคอลเลกชันอาจเป็นตัวแปรประเภท Variant แบบธรรมดา อาร์เรย์ของ Variant หรือการอ้างอิงไปยังออบเจ็กต์ เนื่องจากค่าแต่ละประเภทจำเป็นต้องได้รับการจัดการที่แตกต่างกัน จึงต้องตรวจสอบแต่ละค่าเพื่อกำหนดประเภทของค่านั้น
คุณสามารถใช้ฟังก์ชัน VarType ใน VBScript เพื่อทำงานนี้ให้สำเร็จได้ ใช้ฟังก์ชัน IsObject และ IsArray แทน:
For Each objItem in Application.Contents
ถ้า IsObject(Application.Contents(objItem)) แล้ว
การตอบสนองเขียน "การอ้างอิงวัตถุ: '" & objItem & "'
-
ElseIf IsArray(Application.Contents(objItem)) จากนั้น
Response.Write "Array: '" & objItem & "' เนื้อหาคือ:
-
VarArray = Application.Contents (objItem)
'หมายเหตุ: สิ่งต่อไปนี้ใช้ได้กับอาร์เรย์หนึ่งมิติเท่านั้น
สำหรับ intLoop = 0 ถึง UBound(varArray)
การตอบสนองเขียน “ Index(“ & intLoop & “) = “ & _
VarArray(intLoop) & “
-
ต่อไป
อื่น
การตอบสนองเขียน "ตัวแปร: '" & objItem & "' = " _
& แอปพลิเคชันเนื้อหา (objItem) & “
-
สิ้นสุดถ้า
ต่อไป
สังเกตว่าโปรแกรมดึงข้อมูลอาร์เรย์นี้จากออบเจ็กต์แอปพลิเคชันอย่างไร กำหนดให้กับตัวแปรภายในเครื่อง (Variant) และใช้คำสั่งต่อไปนี้:
varArray = Application.Contents(objItem)
ใช้ฟังก์ชัน UBound เพื่อค้นหาขนาดของอาร์เรย์ (จำนวนองค์ประกอบ) ค่านี้สามารถใช้เป็นเงื่อนไขการสิ้นสุดได้ สำหรับการแวะผ่าน:
สำหรับ intLoop = 0 UBound(varArray)
ตัวอย่างนี้เป็นอาร์เรย์หนึ่งมิติและจะแสดงเฉพาะเนื้อหาของอาร์เรย์ดังกล่าวเท่านั้น แก้ไขโค้ดตามความจำเป็นเพื่อจัดการอาร์เรย์หลายมิติ เช่น
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
สำหรับ intDimension = 0 ถึง intNumberOfDimensions
การตอบกลับเขียน “ Index(“ & intLoop & “) = “ _
& varArray(intLoop, intDimension)
ต่อไป
ตอบกลับเขียน ""
ถัดไป
(2) สำหรับการสำรวจเส้นทางคอลเลกชัน StaticObjects
คอลเลกชัน StaticObjects ประกอบด้วยการอ้างอิงวัตถุทั้งหมดที่ประกาศโดยใช้องค์ประกอบ <OBJECT> ใน global.asa เนื่องจากแต่ละรายการเป็นตัวแปรอ็อบเจ็กต์ อาร์เรย์จึงสามารถวนซ้ำด้วยโค้ดที่ง่ายกว่า เราจะส่งออกชื่อของวัตถุ (ตามที่กำหนดไว้เดิมในคุณสมบัติ ID):
สำหรับแต่ละ objItem ใน Application.StaticObjects
ถ้า IsObject(Application.StaticObjects(objItem)) จากนั้น
การตอบสนองเขียน "<OBJECT> องค์ประกอบ: ID='" & objItem & "'
-
สิ้นสุดถ้า
ถัดไป
2. การดำเนินการกับคอลเลกชัน
1) เพิ่มค่าให้กับคอลเลกชัน
เนื้อหา วิธีการเพิ่มค่าให้กับคอลเลกชันเนื้อหาจะเหมือนกับวิธีที่ใช้ในโค้ดสคริปต์ของหน้าเว็บ global.asa อนุญาตให้เพิ่มค่า Variant ใหม่ให้กับออบเจ็กต์แอปพลิเคชัน โดยมีชื่อและค่าที่แนะนำ (ซึ่งสามารถแก้ไขได้ตามต้องการ) คลิกปุ่ม โหลดเพจใหม่ เพิ่มค่าให้กับคอลเลกชัน Application.Contents และแสดงในรายการ .
เพิ่มโค้ดสำหรับรายการเนื้อหาใหม่
เพื่อวางปุ่มทั้งหมดและตัวควบคุม HTML อื่นๆ บนฟอร์มในเว็บเพจตัวอย่าง ACTION จะกำหนดเส้นทางของหน้าเว็บปัจจุบันและโหลดซ้ำเมื่อมีการส่งแบบฟอร์ม แอตทริบิวต์วิธีการคือ "POST" ดังนั้นค่าในตัวควบคุมจึงปรากฏในคอลเลกชัน Request.Form เทคนิคทั้งสองนี้ถูกใช้ในบทที่แล้ว:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %><" METHOD="POST">
ปุ่มบนแบบฟอร์มนี้เป็นตัวควบคุมอินพุต HTML ธรรมดา มีชื่อเหมือนกัน (สามช่องว่าง) แต่เป็นชื่ออื่น ตัวอย่างเช่น รหัสสำหรับสร้างปุ่มแรก (เพิ่มค่าให้กับออบเจ็กต์แอปพลิเคชัน) คือ:
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
เมื่อโหลดหน้าเว็บใหม่ ให้ตรวจสอบคอลเลกชัน Request.Form , พิจารณาว่าปุ่ม SUBMIT ใดที่ถูกคลิกและจัดการตามนั้น ถ้าเป็นปุ่มที่เพิ่มค่าให้กับ Application object (ปุ่มชื่อ cmdAdd ในองค์ประกอบ HTML <INPUT>) ให้ใช้ส่วนของโปรแกรมต่อไปนี้:
ถ้า Len(Request.Form("cmdAdd")) จากนั้น
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
แอปพลิเคชั่นล็อค
แอปพลิเคชัน ("strVarName") = strVarValue
แอปพลิเคชั่นปลดล็อค
สิ้นสุด หาก
สังเกตว่าแอปพลิเคชันใช้วิธีการ Application.Lock และ Application.Unlock อย่างไรเพื่อให้แน่ใจว่าค่าเหล่านี้จะไม่สับสนโดยผู้ใช้สองคนที่เข้าถึงพร้อมกัน โดยทั่วไปจะไม่สามารถทำได้หากคุณเพียงตั้งค่าเฉพาะ แต่ควรใช้วิธีการล็อคและปลดล็อคเสมอ
2) ลบค่าออกจากคอลเลกชันเนื้อหา
สร้างรายการนี้เมื่อดำเนินการเว็บเพจ ASP โดยการสำรวจคอลเลกชันเนื้อหา (อย่างที่เราทำก่อนหน้านี้) อย่างไรก็ตาม เรารวบรวมเฉพาะชื่อของแต่ละรายการและใส่ไว้ในองค์ประกอบ <OPTION> ภายในองค์ประกอบรายการ <SELECT>:
...
<SELECT NAME=”lstRemove” SIZE=”1”>
-
สำหรับแต่ละรายการ objItem ใน Application.Contents
การตอบสนองเขียน “<OPTION>” & objItem & “</OPTION>”
ต่อไป
&
</เลือก><
…
หลังจากที่โค้ด ASP ถูกดำเนินการ ผลลัพธ์ที่เห็นในเบราว์เซอร์คือ:
<SELECT NAME="lstRemove" SIZE="1">
<ตัวเลือก><การเชื่อมต่อ ADO</ตัวเลือก>
<OPTION>ตัวแปร_อาร์เรย์</OPTION>
<OPTION>เวลาเริ่มต้น</OPTION>
<OPTION>เยี่ยมชม_นับ</OPTION>
<OPTION><ค่าใหม่ของฉัน</OPTION>
</SELECT><
(1) ลบค่าเดียว
เมื่อคุณคลิกปุ่มเพื่อลบค่าเดียว แบบฟอร์มจะถูกส่งไปยังหน้าเว็บเดิมอีกครั้ง แต่คราวนี้ปุ่ม SUBMIT สำหรับ cmdRemoveThis จะถูกตั้งค่า จากนั้นจึง Remove วิธีการรวบรวม Application.Contents จะถูกเรียก :
ถ้า Len(Request.Form("cmdRemoveThis")) จากนั้น
strToRemove = คำขอแบบฟอร์ม ("lstRemove")
การตอบสนองเขียน "strToRemove = " & strToRemove
แอปพลิเคชั่นล็อค
Application.Contents.Remove (strToRemove)
แอปพลิเคชั่นปลดล็อค
End If
โปรดทราบว่านี่เป็นวิธีการของการรวบรวมเนื้อหา ไม่ใช่วัตถุแอปพลิเคชัน ไวยากรณ์คือ Application.Contents.Remove ไม่ใช่ Application.Remove
ผลลัพธ์ของการลบค่า Start_Time ออกจากคอลเลกชัน Contents
(2) ลบค่าทั้งหมด
หากคุณคลิกปุ่มประเภท SUBMIT ปุ่มสุดท้ายจากทั้งหมดสามปุ่ม โค้ดในหน้าเว็บจะตรวจพบว่าปุ่มที่ถูกคลิกคือ cmdRemoveAll และจะดำเนินการเมธอด RemoveAll ของ Application.Contents collection:
ถ้า Len( แบบฟอร์มคำขอ ("cmdRemoveAll")) จากนั้น
แอปพลิเคชั่นล็อค
แอพลิเคชัน เนื้อหา ลบทั้งหมด
แอปพลิเคชั่นปลดล็อค
End If
เตือนคุณอีกครั้งว่านี่เป็นวิธีการของการรวบรวมเนื้อหา ไม่ใช่แอปพลิเคชัน ไวยากรณ์คือ Application.Contents.RemoveAll ไม่ใช่ Application.RemoveAll