เมื่อเร็ว ๆ นี้ฉันวางแผนที่จะพยายามใช้สถาปัตยกรรม MVC ใน ASP บางคนต้องถามฉัน: ASP ถูกกำจัดไปแล้วทำไมฉันถึงยังศึกษาอยู่? ฉันก็รู้เรื่องนี้ด้วย เนื่องจาก Microsoft ละทิ้ง ASP 3.0 และเปลี่ยนเป็น ASP.NET ASP จึงล้าหลัง PHP และ JSP ซึ่งเริ่มเกือบจะในเวลาเดียวกันกับมัน ประโยชน์ของโอเพ่นซอร์สเหนือแหล่งที่ปิดนั้นเหมือนกับ PHP และ ASP ASP บอกว่ามันจะถูกกำจัดและไม่มีใครสามารถบันทึกได้ อย่างไรก็ตามเป็นที่น่าสังเกตว่า ASP นั้นค่อนข้างกว้างในตลาดจีนโดยเฉพาะอย่างยิ่งการใช้งานขององค์กรขนาดเล็กและขนาดกลางบางแห่ง CMS ง่าย ๆ ไม่มีปัญหาและง่ายต่อการปรับใช้ ในระบบ Windows เก่าบางระบบไม่จำเป็นต้องมีการติดตั้ง. NET Framework เพื่อทำงานโดยตรงดังนั้นจึงยังจำเป็นต้องเตรียมเฟรมเวิร์ก อย่างไรก็ตามนี่เป็นกรอบการทดลองซึ่งเป็นเพียงการตรวจสอบว่า ASP สามารถใช้สถาปัตยกรรม MVC ที่คล้ายกับ PHP ได้หรือไม่
โอเคหลังจากพูดมากเราจะหันไปหาหัวข้อ เหตุผลสำหรับปัญหานี้คือฉันต้องรวมไฟล์ ASP แบบไดนามิก อย่างที่คุณทราบมีเพียงวิธีเดียวเท่านั้นที่มีวิธีการใน ASP นั่นคือ SSI (Server Side รวม) ซึ่งโดยทั่วไปแบ่งออกเป็นสองประเภทต่อไปนี้:
การคัดลอกรหัสมีดังนี้:
<!-#include file = "sample.asp"->
<!-#include virtual = "sample.asp"->
โดยพื้นฐานแล้วอันแรกสำหรับสองประเภทนี้จะใช้มากขึ้น #include เสมือนมีพา ธ เสมือนจริงซึ่งสามารถใช้ในไดเรกทอรีเสมือนจริง แต่ทั้งสองสิ่งนี้คงที่ หากเราต้องการรวมแบบไดนามิกเราไม่สามารถเขียนเป็น:
การคัดลอกรหัสมีดังนี้:
<!-#include file = "<%= myVar%>"->
<!-#include virtual = "<%= myVar%>"->
วิธีการเขียนข้างต้นไม่ถูกต้อง สามารถเข้าใจได้ว่า #include Directive จะดำเนินการก่อนที่ ASP จะเริ่มเอ็นจิ้นสคริปต์เพื่อเรียกใช้แท็ก ASP < % % %> กล่าวอีกนัยหนึ่ง #include ไม่ใช่งานของ ASP แต่เป็นโปรแกรมฝั่งเซิร์ฟเวอร์เช่นงานแปลของ IIS ดังนั้นคุณจะไม่ให้ความสนใจกับรหัส ASP ของคุณ
วิธีการใช้งานรวมถึง include_once, ต้องการและ require_once รวมถึงวิธีการสคริปต์แบบไดนามิกที่คล้ายกับ PHP? มาดูวิธีการของวัตถุเซิร์ฟเวอร์ ASP: Server.Execute ค้นหาคุณสมบัติ ASP ทั้งหมดและคุณสามารถพบได้ว่าฟังก์ชั่นนี้คล้ายกับ Dynamic Incident มากที่สุด เราสามารถทำการทดลอง:
sample.inc.asp
การคัดลอกรหัสมีดังนี้:
-
Response.write "Hello World!"
-
test.asp
การคัดลอกรหัสมีดังนี้:
-
server.execute "sample.inc.asp"
Response.write "I Am Test.asp!"
-
เอาต์พุตจริงควรเป็น "Hello World! ฉันกำลังทดสอบ. asp!" ระบุว่าเซิร์ฟเวอร์ execute ทำงานได้ดีในการรวมแบบไดนามิก แต่ถ้าฉันต้องการรวมคลาสหรือฟังก์ชั่น? ถัดไปทำการทดลองต่อไปนี้:
sample.class.asp
การคัดลอกรหัสมีดังนี้:
-
ตัวอย่างชั้นเรียน
ชั้นเรียนจบ
-
test.asp
การคัดลอกรหัสมีดังนี้:
-
server.execute "sample.class.asp"
Response.write typename (eval ("ตัวอย่างใหม่"))
-
เรียกใช้โดยตรงข้อผิดพลาด "Microsoft VBScript Runtime Error Error Error '800A01FA' ไม่ได้กำหนด: 'ตัวอย่าง'" ผลลัพธ์ที่น่าผิดหวังมากทำไมสิ่งนี้ถึงเกิดขึ้น? ฉันค้นหา MSDN และพบคำอธิบายนี้: "หากไฟล์รวมอยู่ในหน้าการโทรโดยใช้ #include, Executed .asp จะไม่ใช้มันตัวอย่างเช่นคุณอาจมีรูทีนย่อยในไฟล์ที่รวมอยู่ในหน้าการโทรของคุณ ดูเหมือนว่าจะแตกต่างจากปัญหาที่ฉันพบ Server.execute Code-isolated หรือไม่? จากนั้นทำการทดลองต่อไปนี้: