ASP Lecture Series (12) การส่งเนื้อหาไปยังเบราว์เซอร์
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-05-30 19:59:00
เมื่อประมวลผลสคริปต์ ASP ข้อความหรือกราฟิกใด ๆ ที่ไม่อยู่ในตัวคั่นของ ASP หรือแท็ก <SCRIPT> จะถูกส่งกลับไปยังเบราว์เซอร์ เนื้อหาสามารถส่งไปยังเบราว์เซอร์ได้อย่างชัดเจนโดยใช้วัตถุการตอบสนอง
การส่งเนื้อหา เมื่อต้องการส่งเนื้อหาไปยังเบราว์เซอร์จากภายในตัวคั่นหรือขั้นตอนของ ASP คุณสามารถใช้วิธีเขียนของวัตถุการตอบสนองได้ ตัวอย่างเช่น ข้อความต่อไปนี้สามารถส่งคำทักทายที่แตกต่างกันได้ ขึ้นอยู่กับว่าผู้ใช้ได้เยี่ยมชมหน้านี้หรือไม่:
-
ถ้าครั้งแรก = จริงแล้ว
การตอบสนองเขียน "<H3 ALIGN=CENTER>ยินดีต้อนรับสู่หน้าภาพรวม</H3>"
อื่น
Response.Write "<H3 ALIGN=CENTER>ยินดีต้อนรับกลับสู่หน้าภาพรวม</H3>"
สิ้นสุดถ้า
-
ภายนอกขั้นตอน คุณไม่จำเป็นต้องใช้ Response.Write เพื่อส่งเนื้อหากลับไปยังผู้ใช้ เนื้อหาที่ไม่อยู่ภายในตัวคั่นสคริปต์จะถูกส่งไปยังเบราว์เซอร์โดยตรง ซึ่งจะจัดรูปแบบและแสดงเนื้อหานั้น ตัวอย่างเช่น กระบวนการสคริปต์ต่อไปนี้มีผลลัพธ์เหมือนกับสคริปต์ด้านบน:
<H3 จัด=กึ่งกลาง>
<% ถ้าครั้งแรกแล้ว %>
ยินดีต้อนรับสู่หน้าภาพรวม
<%อื่น ๆ%>
ยินดีต้อนรับกลับสู่หน้าภาพรวม
<% สิ้นสุดถ้า %>
</H3>
ใช้คำสั่งสคริปต์ผสมและ HTML เมื่อคุณต้องการส่งคืนเอาต์พุตเพียงครั้งเดียวหรือเมื่อสะดวกที่จะเพิ่มคำสั่งลงในข้อความ HTML ที่มีอยู่ ใช้ Response.Write เมื่อคุณไม่ต้องการแยกคำสั่งด้วยตัวคั่น หรือเมื่อคุณต้องการสร้างสตริงที่ส่งคืนไปยังเบราว์เซอร์ ตัวอย่างเช่น คุณสามารถสร้างสตริงข้อความเพื่อสร้างแถวของตารางโดยใช้ค่าที่ส่งคืนจากตาราง HTML:
Response.Write "<TR><TD>" & คำขอแบบฟอร์ม ("FirstName") _
& "</TD><TD>" & Request.Form("นามสกุล") & "</TD></TR>"
การตั้งค่าประเภทของเนื้อหา เมื่อเว็บเซิร์ฟเวอร์ส่งคืนไฟล์ไปยังเบราว์เซอร์ เว็บเซิร์ฟเวอร์จะแจ้งให้เบราว์เซอร์ทราบถึงประเภทของเนื้อหาที่มีอยู่ในไฟล์ด้วย ซึ่งจะทำให้เบราว์เซอร์ตัดสินใจว่าจะสามารถแสดงไฟล์ได้เองหรือต้องเรียกใช้แอปพลิเคชันอื่น ตัวอย่างเช่น หากเซิร์ฟเวอร์เครือข่ายส่งคืนตาราง Microsoft Excel เบราว์เซอร์จะต้องเรียกสำเนาของ Microsoft Excel เพื่อแสดงเพจ เว็บเซิร์ฟเวอร์จะระบุประเภทไฟล์โดยการแมปส่วนขยายของไฟล์กับตารางประเภท MIME
คุณสามารถใช้คุณสมบัติ ContentType ของวัตถุการตอบสนองเพื่อตั้งค่าสตริงประเภทเนื้อหา HTTP สำหรับเนื้อหาที่ส่งถึงผู้ใช้ ตัวอย่างเช่น คำสั่งต่อไปนี้จะตั้งค่าประเภทเนื้อหาสำหรับคำจำกัดความของช่อง:
<% Response.ContentType = "แอปพลิเคชัน/x-cdf" %>
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับช่องทาง โปรดดูที่ "การสร้างช่องทางแบบไดนามิก" ในหัวข้อนี้
ประเภทเนื้อหาทั่วไปอื่นๆ ได้แก่ ข้อความ/ธรรมดา (สำหรับส่งคืนเป็นเนื้อหาข้อความแทนที่จะแปลงคำสั่ง HTML), ข้อความ/gif (สำหรับภาพ GIF) และวิดีโอ/quicktime (สำหรับภาพยนตร์ในรูปแบบ Apple QuickTime®) มีการกำหนดชุดมาตรฐานของประเภท MIME และได้รับการสนับสนุนโดยเว็บเซิร์ฟเวอร์หรือเว็บเบราว์เซอร์ หากต้องการดูว่า Microsoft Web server ของคุณรองรับเนื้อหาประเภทใด ให้ใช้ Internet Services Manager เพื่อเปิดหน้าคุณสมบัติของเว็บไซต์ของคุณ คลิกแท็บ HTTP Headers จากนั้นคลิกแท็บ File Types
เปลี่ยนเส้นทางเบราว์เซอร์ ใช้วิธีการเปลี่ยนเส้นทางเพื่อเปลี่ยนเส้นทางเบราว์เซอร์ไปยัง URL อื่นแทนที่จะส่งเนื้อหาไปยังผู้ใช้ ตัวอย่างเช่น หากคุณต้องการยืนยันว่าผู้ใช้ได้ป้อนแอปพลิเคชันของคุณจากหน้าแรกเพื่อให้พวกเขาสามารถรับรหัสลูกค้าได้ คุณสามารถตรวจสอบได้ว่าพวกเขามีหมายเลขรหัสลูกค้าหรือไม่ หากไม่มี คุณสามารถเปลี่ยนเส้นทางพวกเขาไปยังหน้าแรกได้
-
ถ้า Session("CustomerID") = 0 แล้ว
Response.Redirect "homepage.asp"
สิ้นสุดถ้า
-
เว้นแต่บัฟเฟอร์จะเปิดอยู่แล้ว คุณต้องเปลี่ยนเส้นทางเบราว์เซอร์ก่อนที่เนื้อหาหรือส่วนหัวใดๆ จะถูกส่งกลับไปยังเบราว์เซอร์ การวางคำสั่ง Response.Redirect ไว้ที่ด้านบนของหน้าและก่อนแท็ก <HTML> ช่วยให้มั่นใจได้ว่าไม่มีเนื้อหาใดถูกส่งกลับไปยังเบราว์เซอร์ หากคุณใช้ Response.Redirect หลังจากส่งคืนเนื้อหาหรือส่วนหัวไปยังเบราว์เซอร์ คุณจะเห็นข้อความแสดงข้อผิดพลาด
หากคุณใช้ Response.Redirect ตรงกลางหน้า ให้ใช้กับคุณสมบัติ Response.Buffer ตามที่อธิบายไว้ในส่วนต่อไปนี้
เนื้อหาบัฟเฟอร์ ตามค่าเริ่มต้น เว็บเซิร์ฟเวอร์จะส่งกลับผลการประมวลผล HTML และสคริปต์เมื่อประมวลผลเพจ ASP อย่างไรก็ตาม คุณสามารถตั้งค่าคุณสมบัติ Buffer ของออบเจ็กต์ Response เพื่อประมวลผลคำสั่งสคริปต์เซิร์ฟเวอร์ทั้งหมดบนเพจก่อนที่จะส่งข้อมูลใดๆ ไปยังผู้ใช้
คุณสามารถใช้เทคนิคการบัฟเฟอร์เพื่อกำหนดจุดในกระบวนการประมวลผลเพจที่คุณไม่ต้องการส่งเนื้อหาก่อนหน้านั้นชี้ไปที่ผู้ใช้ คุณยังสามารถใช้วิธีการเปลี่ยนเส้นทางของวัตถุการตอบสนองเพื่อเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าอื่น หรือใช้วิธีล้างของวัตถุการตอบสนองเพื่อล้างบัฟเฟอร์และส่งเนื้อหาที่แตกต่างกันไปยังผู้ใช้ ตัวอย่างด้านล่างใช้ทั้งสองวิธี
-
'เปิดบัฟเฟอร์ คำสั่งนี้จะต้องปรากฏก่อนแท็ก <HTML>
Response.Buffer = จริง %>
<html>
<ร่างกาย>
-
-
-
-
ถ้า Request("FName") = "" จากนั้น
การตอบสนองชัดเจน
Response.Redirect "/samples/test.html"
อื่น
Response.เขียนคำขอ ("FName")
สิ้นสุดถ้า
-
</ร่างกาย>
</html>
คุณยังสามารถใช้ Response.Buffer เพื่อป้องกันไม่ให้เว็บเซิร์ฟเวอร์ส่งคืนส่วนหัว HTTP ก่อนที่สคริปต์จะแก้ไข คุณสมบัติและวิธีการบางอย่าง เช่น Response.Expires และ Response.Redirect แก้ไขส่วนหัว HTTP
เมื่อคุณสมบัติบัฟเฟอร์ถูกตั้งค่าในสคริปต์และไม่ได้เรียกเมธอด Flush เซิร์ฟเวอร์จะรักษาคำขอ Keep-Alive ที่ออกโดยผู้ใช้ การพัฒนาลักษณะการเขียนสคริปต์นี้สามารถช่วยปรับปรุงประสิทธิภาพของเซิร์ฟเวอร์ได้เนื่องจากเซิร์ฟเวอร์ไม่จำเป็นต้องสร้างการเชื่อมต่อใหม่สำหรับแต่ละคำขอของผู้ใช้ (สมมติว่าเซิร์ฟเวอร์ ผู้ใช้ และพร็อกซีเซิร์ฟเวอร์ใด ๆ สนับสนุนข้อกำหนด Keep-Alive) อย่างไรก็ตาม ข้อเสียที่อาจเกิดขึ้นประการหนึ่งของวิธีนี้คือ บัฟเฟอร์ไม่แสดงการตอบสนองใดๆ ต่อผู้ใช้จนกว่าพวกเขาจะประมวลผลสคริปต์ทั้งหมดในไฟล์ ASP ปัจจุบัน สำหรับสคริปต์ที่ยาวและซับซ้อนมากขึ้น ผู้ใช้อาจถูกบังคับให้รอเป็นเวลานานก่อนที่จะเห็นหน้านี้
ตามค่าเริ่มต้น การบัฟเฟอร์จะถูกปิดสำหรับแอปพลิเคชัน ASP คุณสามารถใช้ Internet Services Manager เพื่อเปิดบัฟเฟอร์สำหรับแอปพลิเคชัน ASP ทั้งหมด
อนุญาตให้พร็อกซีเซิร์ฟเวอร์แคชเพจ ผ่านพร็อกซีเซิร์ฟเวอร์ แอปพลิเคชันสามารถส่งเพจไปยังผู้ใช้ได้ พร็อกซีเซิร์ฟเวอร์ร้องขอหน้าเว็บจากเว็บไซต์ในนามของเบราว์เซอร์ของผู้ใช้ พร็อกซีเซิร์ฟเวอร์แคชหน้า HTML เพื่อให้สามารถส่งคำขอซ้ำสำหรับหน้าเดียวกันไปยังเบราว์เซอร์ได้อย่างรวดเร็วและมีประสิทธิภาพ พร็อกซีเซิร์ฟเวอร์ดำเนินการร้องขอและแคชหน้าเว็บ และลดภาระบนเครือข่ายและเว็บเซิร์ฟเวอร์
แม้ว่าแคชจะทำงานได้ดีสำหรับเพจ HTML แต่ก็ทำงานได้ไม่ดีกับเพจ ASP ที่มีข้อมูลที่สร้างขึ้นแบบไดนามิก ตัวอย่างเช่น การรายงานสภาวะตลาดหุ้นหรือรายการสินค้าคงคลังที่แสดงปริมาณธุรกิจจำนวนมากจำเป็นต้องได้รับข้อมูลทันที ข้อมูลเมื่อชั่วโมงที่แล้วไม่ถูกต้องมากในขณะนี้ หากแอปพลิเคชันส่งคืนข้อมูลส่วนบุคคล เช่น หน้าแรกที่กำหนดเอง คาดว่าผู้ใช้จะไม่สามารถดูข้อมูลส่วนบุคคลของผู้ใช้รายอื่นได้
ตามค่าเริ่มต้น เซิร์ฟเวอร์ ASP Command Proxy เองไม่สามารถแคชเพจ ASP ได้ (แม้ว่าจะแคชรูปภาพ บิตแมป แอปพลิเคชันขนาดเล็ก และการอ้างอิงอื่นๆ บนเพจที่แคชไว้) คุณสามารถใช้คุณสมบัติ Response.CacheControl เพื่อตั้งค่าฟิลด์ส่วนหัว Cache Control HTTP เพื่ออนุญาตการแคชของเพจบางเพจ ค่าเริ่มต้นของ Response.CacheControl คือสตริง "ส่วนตัว" ซึ่งป้องกันไม่ให้พร็อกซีเซิร์ฟเวอร์แคชเพจนี้ หากต้องการอนุญาตการแคช ให้ตั้งค่าฟิลด์ส่วนหัวการควบคุมแคชเป็นสาธารณะ:
<% Response.CacheControl = "สาธารณะ" %>
เนื่องจากส่วนหัว HTTP ต้องถูกส่งไปยังเบราว์เซอร์หรือพร็อกซีเซิร์ฟเวอร์ก่อนที่จะส่งเนื้อหาเพจใดๆ คุณสามารถตั้งค่าคุณสมบัติ Response.CacheControl หรือใช้ Response.Buffer เพื่อแคชเพจก่อนแท็ก HTML ใดๆ
ฟิลด์ส่วนหัว Cache Control เป็นส่วนหนึ่งของข้อกำหนด HTTP 1.1 ไม่สามารถแคชเพจ ASP บนพร็อกซีเซิร์ฟเวอร์ที่รองรับ HTTP 1.0 เท่านั้น เนื่องจากไม่มีการส่งฟิลด์ส่วนหัวที่หมดอายุ
ป้องกันไม่ให้เบราว์เซอร์แคชเพจ แต่ละเวอร์ชันมีข้อกำหนดเฉพาะของตนเองว่าจะแคชเพจหรือไม่ เพื่อป้องกันไม่ให้เบราว์เซอร์แคชเพจ ASP ให้ใช้ Response.Expires เพื่อตั้งค่าส่วนหัวการหมดอายุ:
<% การตอบสนองหมดอายุ = 0 %>
ค่า 0 บังคับให้เพจที่แคชไว้หมดอายุ เนื่องจากต้องส่งส่วนหัว HTTP ไปยังเบราว์เซอร์ก่อนที่จะส่งเพจใดๆ จึงสามารถแคชเพจได้โดยการวางแอตทริบิวต์ Response.Expires ก่อนแท็ก HTML หรือโดยใช้ Response.Buffer
สร้างช่องทางแบบไดนามิก
Internet Explorer 4.0 มีคุณลักษณะใหม่ที่นักวางแผนเว็บสามารถใช้เพื่อรวมเว็บเพจที่มีธีมทั่วไปลงในช่องทางได้ ในเบราว์เซอร์ ช่องจะปรากฏบนแถบชื่อช่อง ผู้ใช้เข้าถึงช่องได้โดยคลิกที่ไอคอน ช่องจะอัปเดตโดยอัตโนมัติในเบื้องหลัง ผู้ใช้ไม่จำเป็นต้องไปที่ไซต์เพื่อดาวน์โหลดหน้าล่าสุดในเบราว์เซอร์ แชนเนลให้เส้นทางที่รวดเร็วและตรงแก่ผู้ใช้ในการเรียกดูชุดของเว็บเพจที่เกี่ยวข้อง และเว็บเพจเหล่านี้จะได้รับการอัปเดตโดยอัตโนมัติ
เมื่อใช้ ASP คุณสามารถเขียนสคริปต์เพื่อรวบรวมการตั้งค่าของผู้ใช้ จากนั้นจึงสร้างช่องแบบไดนามิก ไฟล์คำจำกัดความของช่อง (.cdf) กำหนดโครงสร้างและลำดับของเนื้อหาช่อง คำสั่งในไฟล์ .cdf ใช้ไวยากรณ์เดียวกันกับมาร์กอัป HTML ทำให้ง่ายต่อการเข้าใจและสร้างจากสคริปต์ เมื่อเขียนสคริปต์ ASP เพื่อสร้างไฟล์คำจำกัดความของช่องสัญญาณ สคริปต์จะใช้นามสกุล .cdx เมื่อ ASP อ่านไฟล์ที่มีนามสกุล .cdx ประเภทเนื้อหา application/x-cdf จะถูกส่งโดยอัตโนมัติ ซึ่งบอกให้เบราว์เซอร์ใช้คำจำกัดความของช่องสัญญาณเพื่อแปลไบต์ หากคุณไม่ได้ใช้ .cdx เป็นส่วนขยาย สคริปต์จะต้องตั้งค่าประเภทเนื้อหาเป็น application/x-cdf ด้วยตนเองโดยใช้ Response.ContentType
นี่คือตัวอย่างวิธีใช้ช่องต่างๆ แบบฟอร์ม HTML ต่อไปนี้ขอให้ผู้ใช้เลือกช่อง เมื่อส่งแล้ว แบบฟอร์มจะเรียกสคริปต์ในไฟล์ .cdx เพื่อสร้างคำจำกัดความของช่องทาง
<P> เลือกช่องที่คุณต้องการ </P>
<รูปแบบวิธีการ="โพสต์" ACTION="chan.cdx">
<P><INPUT TYPE=ชื่อกล่องกาเครื่องหมาย=ภาพยนตร์> ภาพยนตร์
<P><INPUT TYPE=ชื่อกล่องกาเครื่องหมาย=กีฬา> กีฬา
<P><INPUT TYPE="ส่ง" VALUE="ส่ง">
</รูปแบบ>
สคริปต์ใน Chan.cdx สร้างคำจำกัดความของช่องตามค่าของตารางที่ส่งมาพร้อมกับคำขอ
<% ถ้า Request.Form("ภาพยนตร์") <> "" จากนั้น %>
<ช่อง>
คำนิยามช่องสำหรับหน้าภาพยนตร์
</ช่อง>
<% สิ้นสุดถ้า %>
<% If Request.Form("กีฬา") <> "" จากนั้น %>
<ช่อง>
คำชี้แจงคำจำกัดความของช่องสำหรับหน้ากีฬา
</ช่อง>
<% สิ้นสุดถ้า %>
การส่งไฟล์ไปยังเซิร์ฟเวอร์ เบราว์เซอร์สามารถใช้แอปพลิเคชัน Posting Acceptor เพื่อส่งไฟล์ไปยังเว็บเซิร์ฟเวอร์ เมื่อ Posting Acceptor อัปโหลดไฟล์ ระบบจะส่งฟิลด์แบบฟอร์มที่เข้ารหัส URL ซึ่งแสดงรายการชื่อและที่ตั้งของไฟล์ที่ได้รับแต่ละไฟล์ คุณสามารถเพิ่ม URL การประมวลผลทางไปรษณีย์ลงในสคริปต์ที่อัปโหลดไฟล์เพื่อเรียกสคริปต์ ASP เพื่อประมวลผลชื่อฟิลด์เหล่านี้ ตัวอย่างเช่น คุณสามารถเขียนสคริปต์ที่จะส่งอีเมลถึงผู้ดูแลระบบโดยอัตโนมัติพร้อมชื่อและตำแหน่งของไฟล์