แนะนำ: เกี่ยวกับการแยกรหัสและหน้า ASP เพื่อหลีกเลี่ยงปัญหาการบำรุงรักษาที่เกิดจากความเข้าใจผิดของรหัสโปรแกรม TML ของโปรแกรม ASP บทความนี้แนะนำวิธีการใช้เทมเพลตเพื่อแยกโปรแกรมและหน้าเพื่อทำให้การเขียนโปรแกรมง่ายขึ้น เมื่อใช้ ASP เพื่อสร้างไซต์ไฟล์ ASP มักจะปรากฏขึ้นรหัสโปรแกรมและ HTM
มีประโยชน์มากมายในการแปลงหน้าแบบไดนามิกเพื่อสร้างไฟล์ HTML แบบคงที่เช่นการสร้างหน้าเว็บ HTML นั้นเอื้อต่อการถูกรวมเข้าด้วยกันโดยเครื่องมือค้นหา (โดยเฉพาะสำหรับหน้าเว็บที่ยอมรับพารามิเตอร์แบบไดนามิก) เมื่อเข้าถึงแผนกต้อนรับส่วนหน้าจะถูกแยกออกจากการเข้าถึงข้อมูลช่วยลดแรงกดดันในการเข้าถึงฐานข้อมูลและเร่งการเปิดหน้าเว็บ
แน่นอนว่าทุกอย่างมีข้อดีและข้อเสีย การสร้างหน้า HTML นั้นใช้พื้นที่ดิสก์จำนวนมากเพื่อจัดเก็บไฟล์คงที่เหล่านี้ นอกเหนือจากการอ่านและการเขียนฐานข้อมูลระหว่างกระบวนการแก้ไขคุณต้องอ่านและเขียนดิสก์เซิร์ฟเวอร์ด้วย การเปลี่ยนแปลงรูปแบบหน้าต้องสร้างไฟล์ HTML ทั้งหมดใหม่ ฯลฯ
ตัวอย่างเช่นเครื่องมือค้นหาจำนวนมากสามารถส่งรายการที่อยู่หน้าเว็บไซต์ได้ การรวมไฟล์แบบไดนามิกไม่ใช่ปัญหาอีกต่อไป (เช่น Google Sitemap) เราต้องวัดและเข้าใจผลกำไรและการสูญเสียด้วยตัวเอง แต่ไม่ว่าอะไรเราก็ยังต้องรู้วิธีการทำงาน ที่นี่ฉันจะอ้างบทความของคนอื่นเพื่ออธิบายแนวคิดการสร้างทั่วไปหลายประการสำหรับการอ้างอิงของคุณ
1. ตัวอย่างต่อไปนี้ใช้ FSO โดยตรงเพื่อเขียนโค้ด HTML ลงในไฟล์แล้วสร้างรูปแบบไฟล์. html นี่คือดั้งเดิมมากที่สุด ข้อได้เปรียบคือมันง่ายและข้อเสียคือการปรับเปลี่ยนหน้าไม่สะดวก สถานที่ที่ฉันมักจะใช้คือใช้เพื่อสร้างไฟล์พารามิเตอร์ไซต์ทั้งหมด (โดยปกติแล้วเว็บไซต์เช่นชื่อชื่อชื่อ ฯลฯ จะถูกเก็บไว้ในฐานข้อมูลฉันสร้าง config.asp เพื่อบันทึกการโทรตัวแปรเหล่านี้เพื่อหลีกเลี่ยงการเข้าถึงฐานข้อมูลบ่อยครั้ง)
| ต่อไปนี้เป็นเนื้อหาที่ยกมา: % filename = test.htm หากคำขอ (ร่างกาย) <> แล้ว ตั้งค่า fso = server.createObject (scripting.filesystemobject) ตั้งค่า htmlwrite = fso.createtextfile (server.mappath (& filename &)) htmlwrite.write <html> <head> <title> & request.form (ชื่อ) & </title> </head> htmlwrite.write <body> เอาท์พุทเนื้อหาชื่อ: & request.form (ชื่อ) & <br/> เนื้อหาร่างกายเอาท์พุท: & request.form (body) & </body> </html> htmlwrite.close ตั้งค่า fout = ไม่มีอะไร ตั้งค่า fso = ไม่มีอะไร สิ้นสุดถ้า - <ชื่อฟอร์ม = วิธีการฟอร์ม = โพสต์การกระทำ => <ชื่ออินพุต = title value = title size = 26> <br> <ชื่อ textarea = body> body </textarea> <br> <br> <ประเภทอินพุต = ส่งชื่อ = ส่งค่า = สร้าง html> </ฟอร์ม> |
2. อย่างไรก็ตามมันไม่สะดวกมากที่จะสร้างไฟล์ HTML ตามวิธีการข้างต้น วิธีที่สองคือการใช้เทคโนโลยีเทมเพลตเพื่อแทนที่ค่าของรหัสพิเศษในเทมเพลตด้วยค่าที่ได้รับจากฟอร์มหรือฟิลด์ฐานข้อมูลให้ทำฟังก์ชันเทมเพลตให้สมบูรณ์และสร้างไฟล์ HTML ด้วยรหัสเทมเพลตทั้งหมดที่ถูกแทนที่ในที่สุด เทคโนโลยีนี้ใช้บ่อยขึ้นและ CMS ส่วนใหญ่ใช้วิธีนี้
| ต่อไปนี้เป็นเนื้อหาที่ยกมา: template.htm '// ไฟล์เทมเพลต <html> <หัว> <ชื่อเรื่อง> $ title $ โดย cuoxin.com </title> </head> <ร่างกาย> $ body $ </body> </html> testtemplate.asp '// สร้าง html % Dim fso, htmlwrite Dim strtitle, strcontent, strout '// สร้างวัตถุระบบไฟล์ ตั้งค่า fso = server.createObject (scripting.filesystemobject) '// เปิดไฟล์เทมเพลตเว็บและอ่านเนื้อหาเทมเพลต ตั้งค่า htmlwrite = fso.opentextfile (server.mappath (template.htm))) strout = f.readall htmlwrite.close strtitle = ชื่อหน้าเว็บที่สร้างขึ้น strContent = เนื้อหาหน้าเว็บที่สร้างขึ้น '// แทนที่แท็กในเทมเพลตด้วยเนื้อหาจริง strout = แทนที่ (strout, $ title $, strtitle) strout = แทนที่ (strout, $ body $, strcontent) '// สร้างหน้าคงที่ที่จะสร้าง ตั้งค่า htmlwrite = fso.createtextfile (server.mappath (test.htm), จริง) '// เขียนเนื้อหาไปยังหน้าเว็บ htmlwrite.writeline strout htmlwrite.close Response.write หน้าคงที่ถูกสร้างขึ้นสำเร็จ! '// ปล่อยวัตถุระบบไฟล์ ตั้งค่า htmlWrite = ไม่มีอะไร ตั้งค่า fso = ไม่มีอะไร - |
3. วิธีที่สามคือการใช้ XMLHTTP เพื่อรับเนื้อหา HTML ที่สร้างขึ้นโดยหน้าแบบไดนามิกจากนั้นใช้ ADODB.Stream หรือ Scripting.FilesYstemObject เพื่อบันทึกไว้ในไฟล์ HTML ค้นหาชิ้นส่วนของรหัสเพื่อสร้าง HTML สำหรับ XMLHTTP
| ต่อไปนี้เป็นเนื้อหาที่ยกมา: % 'ฟังก์ชั่นทั่วไป '1. ป้อนที่อยู่เว็บเพจปลายทางของ URL และค่าส่งคืน GetHttppage เป็นรหัส HTML ของหน้าเว็บปลายทาง ฟังก์ชั่น gethttppage (url) สลัว http ตั้งค่า http = server.createObject (msxml2.xmlhttp) http.open get, url, false http.send () ถ้า http.readystate <> 4 แล้ว ฟังก์ชั่นออก สิ้นสุดถ้า gethttppage = bytestobstr (http.responsebody, gb2312) ตั้งค่า http = ไม่มีอะไร ถ้า err.number <> 0 จากนั้น err.clear ฟังก์ชันสิ้นสุด '2. แปลง Lanma โทรโดยตรงหน้าเว็บที่มีอักขระภาษาจีนด้วย XMLHTTP คุณจะได้รับ Lanma ซึ่งสามารถแปลงผ่านส่วนประกอบ ADODB.Stream ฟังก์ชั่น bytestobstr (body, cset) สลัว objstream ตั้งค่า objstream = server.createObject (adodb.stream) objstream.type = 1 objstream.mode = 3 objstream.open objstream.write ร่างกาย objstream.position = 0 objstream.type = 2 objstream.charset = cset bytestobstr = objstream.readText objstream.close ตั้งค่า objstream = ไม่มีอะไร ฟังก์ชันสิ้นสุด txturl = server.mappath (../ index.asp) stext = gethttppage (txturl) ตั้งค่า fileObject = server.createObject (scripting.filesystemobject) filename = ../index.htm ตั้งค่า openfile = fileObject.opentextfile (server.mappath (ชื่อไฟล์), 2, true) 'จริงถูกสร้างขึ้นด้วยตัวเองหากไม่มีอยู่จริง OpenFile.WriteLine (Stext) ตั้งค่า openFile = ไม่มีอะไร - <สคริปต์> การแจ้งเตือน (การสร้างหน้าเว็บแบบคงที่เสร็จสมบูรณ์); History.back (); </สคริปต์> |
สรุปวิธีทั้งสามนี้เป็นวิธีที่ใช้กันมากที่สุดในการสร้างไฟล์ HTML ฉันชอบที่จะใช้วิธีที่สามเพราะการเปลี่ยนแปลงของหน้านั้นสะดวกมาก แม้ว่าหน้าแบบไดนามิกจะเปลี่ยนไป แต่ก็ดี เพียงใช้ XMLHTTP เพื่ออ่านและสร้างอีกครั้ง
แบ่งปัน: การออกแบบความเข้ากันได้ของแคชสำหรับเว็บแอปพลิเคชัน หลังจากผ่านพร็อกซีเนื่องจากมีการเพิ่มเลเยอร์กลางระหว่างไคลเอนต์และบริการเซิร์ฟเวอร์ไม่สามารถรับ IP ของไคลเอนต์ได้โดยตรงและแอปพลิเคชันฝั่งเซิร์ฟเวอร์ไม่สามารถกลับไปที่ไคลเอนต์ได้โดยตรงผ่านที่อยู่การส่งต่อ อย่างไรก็ตามในข้อมูลส่วนหัวของ HTTP ของคำขอส่งต่อจะเพิ่ม http_x