แนะนำ: ใช้ ASP เพื่อสร้างเครื่องมือค้นหาส่วนตัว ผู้ที่ชื่นชอบอินเทอร์เน็ตหลายคนทำให้สมองของพวกเขาทำหน้าที่ของเว็บไซต์ของพวกเขาให้ครอบคลุมมากขึ้นเมื่อสร้างหน้าแรกส่วนตัวของตัวเอง ที่นี่ผู้เขียนแนะนำวิธีการใช้ ASP เพื่อสร้างเครื่องมือค้นหาของคุณเอง แนวคิดพื้นฐานคือการใช้แบบฟอร์มเพื่อจัดเก็บคำหลักในการค้นหาที่ส่งโดยผู้ใช้ในตัวแปร
7.5.1 เทคโนโลยีการดีบักทั่วไปในบทที่ 2 คุณได้เห็นวิธีใช้วิธีการตอบสนองการเขียนและการรวบรวมคำขอเพื่อแสดงเนื้อหาของคอลเลกชัน หากรหัสต้องการใช้ค่าจากคำขอสิ่งแรกที่ต้องทำคือเพื่อให้แน่ใจว่ามีค่าที่ต้องการ ปัญหาง่าย ๆ คือชื่อควบคุม HTML ในเว็บเพจ <form> หน้าเว็บถูกสะกดผิดหรือเปลี่ยนแปลงหรือไคลเอนต์ผิดจะปรากฏขึ้นเมื่อสร้างสตริงแบบสอบถามที่แนบมากับ URL
1. แสดงเนื้อหาคอลเลกชันต่างๆ
เมื่อโปรแกรมพยายามที่จะทำงานด้วยค่าที่ผู้ใช้จัดหาอาจไม่ได้รับผลลัพธ์ที่ต้องการหรือไม่ได้รับอะไรเลย โปรดจำไว้ว่าการใช้ request.form (thisControl) ไม่ได้ทำให้เกิดข้อผิดพลาดเมื่อคุณอ้างอิงค่าที่ไม่มีอยู่ในการรวบรวมวัตถุคำขอ (ตัวอย่างเช่นหากคุณไม่มีตัวควบคุมที่ชื่อว่า thisControl ในแบบฟอร์มผลลัพธ์อาจได้รับสตริงว่างเปล่า
หากคุณสร้างหน้าเพื่อแสดงเนื้อหาของการรวบรวมวัตถุทั้งหมดการรวบรวมเนื้อหาเซสชันและเนื้อหาของวัตถุแอปพลิเคชันและคอลเลกชันแบบคงที่คุณสามารถเข้าถึงได้โดยใช้เซิร์ฟเวอร์ Execute งานต้องทำคือการเพิ่มบรรทัดโปรแกรมต่อไปนี้ไปยังหน้าเว็บ ASP เพื่อแสดงเนื้อหาทั้งหมดของคอลเลกชัน แน่นอนตามตำแหน่งที่เก็บไฟล์ไว้บนเซิร์ฟเวอร์พา ธ ที่สอดคล้องกันจะต้องตั้งค่าสำหรับไฟล์
< % server.execute /path_to_file/debug_request.asp %>
นี่เป็นวิธีที่ดีในการตรวจสอบให้แน่ใจว่ามีค่าใด ๆ ที่เราต้องการค้นหาในคำขอเซสชันและการรวบรวมแอปพลิเคชันมีอยู่และมีค่าที่เหมาะสม ไฟล์ที่เกี่ยวข้องมีอยู่ในไฟล์ตัวอย่างบทที่ 07 ไดเรกทอรีย่อยของหนังสือเล่มนี้ชื่อ debug_request.asp โดยพื้นฐานแล้วเป็นการรวมกันของหน้าเว็บ show_request.asp สำหรับบทที่ 2 และหน้าเว็บ show_application.asp และ show_session.asp สำหรับบทที่ 3 แต่ลบรหัสโปรแกรม HTML บางส่วน มันเป็นการวนซ้ำผ่านคอลเลกชันและใส่ค่าลงในหน้าปัจจุบัน
หน้านี้สามารถดูได้โดยเรียกใช้อินสแตนซ์หน้าข้อผิดพลาดที่กำหนดเอง ตัวอย่างนี้เห็นก่อนหน้านี้ในบทนี้ เมื่อเปิดโปรดเลือกช่องทำเครื่องหมายการดีบักการแสดงผลหรือเปิดโดยตรงในหน้าเว็บเมนูหลักในไดเรกทอรีบทที่ 07
2. แสดงค่ากลาง
วิธีที่สองในการดูสถานการณ์การทำงานในหน้าเว็บคือการแสดงค่าของตัวแปรเมื่อหน้าเว็บทำงาน เทคโนโลยีดั้งเดิมนี้ไม่สามารถยกเลิกได้เมื่อคุณรู้ว่าข้อผิดพลาดมาจากไหนและตัวแปรใดทำงานได้ อย่างไรก็ตามเนื่องจากการเปลี่ยนแปลงในวิธีการบัฟเฟอร์เว็บ IIS 5.0 จึงเป็นเรื่องยากที่จะใช้เทคโนโลยีนี้
ใน ASP และ IIS รุ่นก่อนหน้าการบัฟเฟอร์หน้าถูกปิดโดยค่าเริ่มต้นและแทบจะไม่มีใครคิดว่าจะเปิดบัฟเฟอร์ (เปิดด้วยการตอบสนอง Buffer = TRUE) เว้นแต่ว่าพวกเขาต้องการใช้การตอบกลับ เมื่อตอบสนองต่อการร้องขอหลายครั้งการบัฟเฟอร์จะลดจำนวนการสลับระหว่างหน้าเว็บซึ่งจะเป็นการปรับปรุงประสิทธิภาพของ IIS
อย่างไรก็ตามเมื่อเกิดข้อผิดพลาดรันไทม์ที่หยุดการรัน IIS จะเรียกใช้วิธีตอบสนองโดยอัตโนมัติจากนั้นเรียกเซิร์ฟเวอร์ execute เพื่อโหลดหน้าข้อผิดพลาดที่กำหนดเองดังนั้นเอาต์พุตใด ๆ ที่เขียนลงในเว็บเพจจะหายไป ทางออกคือการเพิ่มบรรทัดโปรแกรมต่อไปนี้ชั่วคราว:
< % response.buffer = false %>
บรรทัดโปรแกรมนี้จะถูกวางไว้ที่ด้านบนของหน้าหลังจาก <@Language ... > Directive และเอาต์พุตการดีบักใด ๆ ที่สร้างขึ้นโดยคำสั่ง Response.Write จะปรากฏขึ้นที่ด้านบนของหน้าข้อผิดพลาดที่กำหนดเอง อย่าลืมลบออกหลังจากเสร็จสิ้นการดีบักหน้าเว็บ
บางครั้งวิธีนี้มีประโยชน์ในการบังคับให้โปรแกรมทำงานผ่านจุดผิดพลาดจากนั้นแสดงค่าตัวแปรที่น่าสงสัย เพียงเพิ่ม ON ERROR RESUME คำสั่งถัดไปใกล้กับจุดเริ่มต้นของหน้าเว็บแล้วคุณสามารถเข้าถึงวัตถุ ERR (ใน VBScript) และแสดงหมายเลขข้อผิดพลาดแหล่งที่มาข้อผิดพลาดและคำอธิบาย
3. ตรวจสอบค่าแอตทริบิวต์ส่วนประกอบ
หากส่วนประกอบที่ใช้มีคุณสมบัติที่ตั้งไว้ในรหัสสคริปต์ ASP หลังจากการตั้งค่าเสร็จสมบูรณ์และก่อนและหลังวิธีการส่วนประกอบถูกเรียกว่าข้อผิดพลาดสามารถติดตามได้โดยการแสดงคุณสมบัติทั้งหมด (หรือเพียงแค่คุณสมบัติที่น่าสงสัย) เมื่อมีการรันวิธีการอาจพบว่าค่าทรัพย์สินได้รับการเปลี่ยนแปลงโดยบังเอิญโดยส่วนประกอบอาจตั้งใจหรือเนื่องจากข้อบกพร่องในส่วนประกอบ อย่าตั้งสมมติฐานใด ๆ โดยไม่ตรวจสอบรหัสจริงด้วยตัวคุณเอง
7.5.2 Microsoft Script Debugger
เมื่อพัฒนาแอพพลิเคชั่นที่ซับซ้อนมากขึ้นซึ่งจัดการงานจริงเครื่องมือที่ทรงพลังกว่ามักจะจำเป็นสำหรับการดีบัก Microsoft Script Debugger เป็นเครื่องมือการดีบักที่อนุญาตให้ทำการดีบักสคริปต์ที่ทำงานบนไคลเอนต์และเซิร์ฟเวอร์ มันสามารถใช้สำหรับภาษาสคริปต์ที่เปิดใช้งาน ActiveX (รวมถึง VBScript และ JScript) และยังสามารถใช้ในการดีบักการโทรไปยัง Java Applets, Java Beans และส่วนประกอบ ActiveX
ก่อนที่จะศึกษาเครื่องมือนี้ให้อธิบายปัญหาบางอย่างสั้น ๆ ดังที่ได้กล่าวไว้ก่อนหน้านี้แอปพลิเคชัน ASP ประกอบด้วยสคริปต์สองประเภทหนึ่งคือสคริปต์ไคลเอนต์และอีกสคริปต์เป็นสคริปต์เซิร์ฟเวอร์ สคริปต์ไคลเอ็นต์มักจะประกอบด้วยคำสั่งสคริปต์ VBScript หรือ JScript ที่ปรากฏในหน้า HTML เมื่อพวกเขามาถึงไคลเอนต์และถูกดำเนินการที่นั่นอาจเป็นเมื่อเอกสารถูกโหลดหรือตอบสนองต่อเหตุการณ์บางอย่าง สคริปต์ฝั่งเซิร์ฟเวอร์มักจะประกอบด้วยคำสั่ง VBScript หรือ JScript เมื่อเบราว์เซอร์ขอหน้าเว็บสคริปต์ฝั่งเซิร์ฟเวอร์จะถูกดำเนินการโดย IIS ในการสนทนาต่อไปนี้จะมีการหารือเกี่ยวกับวิธีการดีบักสคริปต์ฝั่งเซิร์ฟเวอร์ อย่างไรก็ตามเทคนิคต่าง ๆ ที่กล่าวถึงสามารถใช้สำหรับการดีบักสคริปต์ไคลเอนต์
1. การดีบักฝั่งเซิร์ฟเวอร์
ในการดีบักสคริปต์ฝั่งเซิร์ฟเวอร์ให้เรียกใช้ตัวดีบักสคริปต์บนคอมพิวเตอร์ที่ใช้งาน IIS อย่างไรก็ตามต้องเปิดใช้งานการดีบักก่อนที่จะใช้ตัวดีบักสคริปต์ เพื่อเพิ่มประสิทธิภาพแอปพลิเคชันที่ใช้ ASP ปิดการดีบักตามค่าเริ่มต้น
ระวังอย่าเปิดการดีบักในแอปพลิเคชันที่มีประสิทธิผล (เช่นเว็บไซต์สาธารณะที่ใช้งานและใช้งานโดยผู้อื่น) สิ่งนี้จะทำให้แอปพลิเคชันและข้อผิดพลาดทั้งหมดช้าลงอาจทำให้หน้าเว็บหยุดทำงานอย่างไม่แน่นอน
การดีบักสามารถตั้งค่าสำหรับแอปพลิเคชันเสมือนและเว็บไซต์ทั้งหมดเท่านั้น ในการเปิดใช้งานการดีบักให้เปิดกล่องโต้ตอบคุณสมบัติของแอปพลิเคชันหรือไซต์ในแท็บโฮมไดเร็คให้คลิกปุ่มกำหนดค่าในแท็บการดีบักแอปของกล่องโต้ตอบการกำหนดค่าแอปพลิเคชันเลือกเปิดใช้งานตัวดีบักสคริปต์สคริปต์ด้านเซิร์ฟเวอร์ ASP และเตรียมการดีบักแอปพลิเคชันของเราด้านล่าง
หมายเหตุกล่องโต้ตอบการกำหนดค่าแอปพลิเคชันมีช่องทำเครื่องหมายที่เปิดใช้งานการดีบักสคริปต์ไคลเอ็นต์ สิ่งนี้ไม่ได้ถูกนำไปใช้ใน IIS 5.0 และถูกทำเครื่องหมายว่าสงวนไว้สำหรับการใช้งานในอนาคตในเอกสาร หากหน้าข้อผิดพลาดที่กำหนดเอง 500-100.ASP ไม่พร้อมใช้งานส่วนข้อความแสดงข้อผิดพลาดของสคริปต์จะมีข้อความ
(1) สคริปต์เซิร์ฟเวอร์ประมวลผล
สคริปต์แอปพลิเคชันแอปพลิเคชันที่ใช้ ASP นั้นไม่ได้เป็นตัวขับเคลื่อนเหตุการณ์ เมื่อไคลเอ็นต์ขอหน้าเว็บจากเซิร์ฟเวอร์เซิร์ฟเวอร์จะอ่านเนื้อหาหน้าเว็บและประมวลผลสคริปต์เซิร์ฟเวอร์ทั้งหมด (เช่นทุกอย่างใน <%...%> และ <script runat = เซิร์ฟเวอร์> </script> เซ็กเมนต์) รวมถึงเนื้อหาเซ็กเมนต์สคริปต์แบบอินไลน์ในข้อความ HTML เช่น::
วาล์วของผลลัพธ์คือ: < % = stresult %>
กระบวนการไดอะแกรมกล่องแสดงผลการไหล
เมื่อ IIS โหลดหน้าเว็บสคริปต์ทั้งหมดในหน้า ASP จะถูกประมวลผล ก่อนที่จะส่งเอาต์พุตใด ๆ ไปยังไคลเอนต์เอ็นจิ้น ASP และสคริปต์สามารถตรวจจับข้อผิดพลาดทางไวยากรณ์และรันไทม์ (เว้นแต่คุณจะปิดบัฟเฟอร์หรือเรียกใช้วิธีการตอบสนองฟลัช)
(2) ความช่วยเหลือจากตัวดีบักสคริปต์
เมื่อเปิดใช้งานการดีบักสคริปต์หากเกิดข้อผิดพลาดคุณสามารถเห็นกล่องโต้ตอบที่อธิบายข้อผิดพลาดของรหัส ASP บนหน้าจอเซิร์ฟเวอร์ คลิกตกลงจากนั้นโทรในสำเนาของหน้าเว็บ ASP ปัจจุบันอย่างเดียว ตัวดีบักสคริปต์เปิดขึ้น บรรทัดที่ปรากฏในข้อผิดพลาดจะถูกระบุโดยลูกศร
ที่นี่ข้อผิดพลาดเกิดขึ้นเนื่องจากข้อผิดพลาดชื่อของวิธีการนับหน้าเว็บซึ่งควรเป็น pagehit แทน dopagehit ในเวลาเดียวกันตัวดีบักสคริปต์พบข้อผิดพลาดและยกเลิกการทำงานของหน้าเว็บ ปุ่มบนแถบเครื่องมือใช้เพื่อดำเนินการต่อโปรแกรมการทำงานโปรแกรมขั้นตอนเดียวหรือยุติการทำงานของหน้าเว็บ
ปุ่มทางด้านขวาสุดของแถบเครื่องมือจะเปิดหน้าต่างทันทีในตัวดีบั๊กสคริปต์ซึ่งสามารถใช้ในการโต้ตอบกับหน้าและมีแนวโน้มที่จะหาสถานที่ที่เกิดข้อผิดพลาด ตัวอย่างเช่นค่าตัวแปรหรือคุณสมบัติส่วนประกอบสามารถสอบถามหรือตั้งค่าฟังก์ชั่นภายในและรูทีนย่อยฟังก์ชั่นที่กำหนดเองและรูทีนย่อยและวิธีการวัตถุที่สร้างขึ้น ฯลฯ สามารถดำเนินการได้ ในรูปที่วิธีการ pagehit ขององค์ประกอบตัวนับหน้าถูกเรียกและคุณสมบัติ HITS จะถูกสอบถามเพื่อรับค่า ณ จุดนั้นในสคริปต์ที่กำลังทำงานอยู่
เพื่อให้เข้าใจว่าทำไมสคริปต์ debuggers ไม่ควรใช้ในเว็บไซต์สาธารณะคุณสามารถเปิดหน้าเว็บที่มีข้อผิดพลาดฝั่งเซิร์ฟเวอร์จากไคลเอนต์ ในกรณีนี้กล่องโต้ตอบข้อความแสดงข้อผิดพลาดจะปรากฏขึ้นบนเซิร์ฟเวอร์และตัวดีบักสคริปต์ก็เปิดบนเซิร์ฟเวอร์ด้วย บนไคลเอนต์หน้าจะไม่ถูกโหลดจนกว่าตัวดีบั๊กสคริปต์จะทำงานบนเซิร์ฟเวอร์จะปิด
(3) เริ่มต้นและใช้ดีบักเกอร์
หลังจากเปิดใช้งานการดีบักสคริปต์ตัวดีบักสคริปต์จะเกิดขึ้นโดยอัตโนมัติเมื่อเกิดข้อผิดพลาดในหน้าเว็บของแอปพลิเคชันเสมือนจริง
แบ่งปัน: ตัวอย่าง ASP: การผลิตเกมความร่วมมือ Word นี่คือเกมเกี่ยวกับการเข้ารหัสคำที่เขียนใน ASP, VBScript และ JavaScript ไม่พบปัญหาสำคัญภายใต้การทดสอบภายใต้ Win98 OEM2, PWS และ IE5 วิธีการใช้งาน: วิธีที่ 1: ตัวอย่างเช่นไดเรกทอรีของบริการ 3W ของคุณคือ C: InetPubwwwroot