JSP-4.6 แท๊ก Scriptlet
4.6 แท๊ก Scriptlet
จากที่เราใช้แท็ก Expression เพื่อแสดงผลข้อมูลในเอกสาร JSP โดยการ
ใส่ค่าหรือสมการต่างๆ ไว้ในเครื่องหมาย <% = และ %> จะเหมาะสำหรับโค้ดที่มี
ความยาวไม่มาก แต่ถ้าโค้ดมีความยาวมากๆ ทำให้ยากที่จะใส่โค้ดที่เป็นสมการ
เข้าไป แท็ก Scriptlet จึงใช้เพื่อแก้ปัญหานี้ วิธีการประกาศก็คือ
<%
Statement 1;
Statement 2;
Statement 3;
Statement n;
%>
การประกาศจะเริ่มด้วย <% และ จบด้วย %> สำหรับแท็ก Scriptlet นี้
สามารถแสดงผล output ออกมาได้เหมือนกัน วิธีการก็ใช้คำสั่ง out.print ของ
เราเหมือนเดิม ทีนี้อาจสงสัยว่า แล้วจะเลือกใช้อะไรดีระหว่าง Expression และ Scriptlet คำตอบก็คือ หากส่วนของโค้ดยาวมากๆ ก็เขียนลงใน Scriptlet จะเหมาะ
สมกว่า
ลองดูตัวอย่างของการผสมการใช้งานของ Scriptlet , Expression , Directive
และ Declaration เพื่อความเข้าใจเพิ่มขึ้นให้เปิดโปรแกรมเอดิเตอร์ขึ้นมาพิมพ์
โค้ดตาม Source Code ชื่อ fileCounter.jsp แล้วบันทึกไฟล์ชื่อ fileCountter.jsp ลงในไดเรกทอรี C:\Tomcat\WebApps\Tutorial\Example\
อธิบาย Source Code ชื่อ fileCounter.jsp
จาก Source Code ชื่อ fileCounter.jsp เป็นตัวอย่างของตัวนับเพื่อนับจำนวน
ครั้งที่เอกสารนี้ถูกเปิด โดยค่าของจำนวนครั้งจะเก็บอยู่ในไฟล์ counter.txt
สมมุติว่ามีไฟล์นี้อยู่ในไดเรกทอรีC:\Tomcat\webapps\tutorial\Example\
เพราะไม่ต้องการให้โค้ดยาว ดังนั้นต้องสร้างไฟล์นี้ก่อนที่จะเรียกเอกสาร JSP
สำหรับค่าในไฟล์ก็พิมพ์ตัวเลขอะไรก็ได้ตั้งแต่ 0 ขึ้นไป สำหรับการทำงาน
ตัวอย่างมีส่วนประกอบหลัก 3 ส่วนคือ Directive , Declaration และ Scriptlet
อธิบายแต่ละส่วนได้ดังนี้
- Directive
ในตัวอย่างนี้มีการเรียกใช้คลาส FileInputStream , DataInputStream ,
FileOutputStream และ DataOutputStream เพื่อจัดเก็บไฟล์ Counter.txt ซึ่ง
คลาสเหล่านี้จะอยู่ในคลาสไลบรารี ” java.io.*” ดังนั้นจึงต้อง import คลาสเหล่านี้
ก่อน รูปแบบการประกาศมีดังนี้
<%@ page import = ” java.io.*”%>
- Declaration
ประกาศตัวแปรเพื่อนำไปใช้ต่อไปในส่วนของ Scriptlet มีตัวแปรที่ประกาศ
คือ counter เพื่อเก็บค่าที่อ่านได้จากไฟล์ counter.txt และ path เพื่อเก็บที่อยู่
ของไฟล์ counter.txt
- Scriptlet
เริ่มทำงานโดยการสร้างออบเจ็กต์ countFile จากคลาส FileInputStream
โดยออบเจ็กต์นี้จะแทนไฟล์ counter.txt หลังจากนั้นก็จะเริ่มอ่านไฟล์โดยสร้าง
ออบเจ็กต์ countData จากคลาส DataOutputStream โดยเรียกเมธอด
CountData.readInt ()
ผลลัพธ์ที่ผ่านกลับมาจากเมธอดนี้จะเป็นค่าจำนวนเต็ม เมื่ออ่านค่ามาได้
แล้วก็เพิ่มค่าขึ้นครั้งละหนึ่งและแสดงผล พร้อมกับนำค่าที่เพิ่มขึ้นเขียนลงไฟล์
counter.txt อีกครั้ง โดยสร้างออบเจ็กต์ countFile จากคลาส FileOutputStream
และเขียนไฟล์โดยสร้างออบเจ็กต์ countData จากคลาส DataOutputStream
โดยเรียกเมธอด
countData.writeInt ( counter ) ;
อากิวเมนต์ที่ผ่านให้กับเมธอดนี้ต้องมีชนิดเป็นจำนวนเต็ม และสิ่งสำคัญ
เวลาดำเนินการกับไฟล์จำเป็นต้องดักจับข้อผิดพลาด มิฉะนั้นเวลาเรียกเอกสาร
จะเกิด Exception ขึ้น







