วันจันทร์ที่ 13 กันยายน พ.ศ. 2553

บีน

บีน คือโปรแกรมขนาดเล็กบนเวบเซิร์ฟเวอร์ ซึ่งคอยช่วยเหลือไฟล์ .jsp ด้วยการทำงานบาง
อย่างแทนให้ โดยที่ไฟล์ .jsp เพียงแต่ร้องขอความช่วยเหลือจากบีนโดยการส่งพารามิเตอร์
ที่จำเป็นไปให้ บีนก็จะส่งผลลัพธ์ที่ต้องการกลับไปให้ทันที
ประโยชน์สำคัญของบีนคือการลดความยุ่งเหยิงของไฟล์ .jsp งานที่เคยต้องใช้คำสั่งเจเอสพี
เป็นสิบๆ บรรทัด จะลดลงเหลือเพียงคำสั่งร้องขอความช่วยเหลือจากบีนเพียงหนึ่งหรือสอง
บรรทัดเท่านั้น ทำให้ไฟล์ .jsp มีขนาดเล็กลงและดูง่ายขึ้น การทำเช่นนี้มีประโยชน์มาก
เพราะปกติแล้วโปรแกรมเมอร์ภาษาจาวาที่พัฒนาคำสั่งเจเอสพี กับนักออกแบบเวบไซต์ที่ใช้
คำสั่ง HTML มักเป็นคนละคนกัน การลดคำสั่งเจเอสพีในเวบเพจลงด้วยการย้ายมาเขียน
โปรแกรมบนบีนแทน ทำให้การแบ่งงานระหว่างเวบโปรแกรมเมอร์ กับผู้ออกแบบเวบไซต์มี
ความคล่องตัวมากขึ้น
การสร้างบีนก็เหมือนกับการเขียนโปรแกรมภาษาจาวาปกติ คือ ต้องเขียนเป็นไฟล์นามสกุล
.java แล้วนำไปคอมไพล์ให้ได้ไฟล์นามสกุล .class พอจะใช้งานก็นำไฟล์ .class ที่ได้ไปวาง
ไว้บนโฟลเดอร์ WEB-INF ใต้โฟลเดอร์ย่อยที่ชื่อ classes

การเรียกใช้งานบีนโดยตรง

อันที่จริงแล้วเราสามารถสร้างบีนแล้วเรียกแมธธอสของบีนโดยตรงในสคริปเลตได้โดยไม่
ต้องผ่านแท็ก setProperty และ getProperty ตัวอย่างเช่น

<jsp:useBean id=”counter” class=”mybean.Counter” scope=”application” />
<html>
<title>My First JSP</title>
<body>
You are the visitor number <%=counter.getCount()%>.
</body>
</html>

หลังจากเรียกใช้บีนผ่านแท็ก useBean แล้ว เราสามารถเรียกแมธธอส getCount() ของบีน
ผ่านชื่อ counter ได้โดยตรงราวกับว่าเป็นวัตถุที่เราสร้างขึ้นกับมือ โปรแกรมข้างต้นให้ผล
เหมือนกับโปรแกรมที่ 7-2 ทุกประการ
อย่างไรก็ตาม ขอแนะนำให้พยายามใช้งานบีนผ่านแท็กเจเอสพีจะดีกว่า เพราะโปรแกรมจะ
ดูเป็นระบบมากกว่า ตอนนี้อาจจะยังมองไม่เห็นภาพอย่างชัดเจน เพราะโปรแกรมตัวอย่างที่
ผ่านมายังไม่ค่อยซับซ้อน แต่ต่อไปจะเห็นชัดขึ้นตอนที่นำไปประยุกต์ใช้งานจริง

แท็กเจเอสพี

ยุคนี้กระแสของ XML มาแรง คำว่า XML ย่อมาจาก Extensible Markup Language เป็น
ภาษาที่มีโครงสร้างคล้ายๆ กับภาษา HTML คือประกอบด้วยแท็กต่างๆ ปะปนกับภาษา
มนุษย์ จุดประสงค์หลักของ XML คือใช้เป็นภาษากลางระหว่างเซิร์ฟเวอร์ต่างชนิดต่างยี่ห้อ
กันให้สามารถรับส่งข้อมูลระหว่างกันได้ โดยไม่ต้องสนใจว่าเซิร์ฟเวอร์เหล่านั้นจะใช้
เทคโนโลยีของค่ายไหน
คำสั่งเจเอสพีได้รับอิทธิพลของ XML ด้วยเหมือนกัน กล่าวคือ เจเอสพีมีสิ่งที่เรียกว่า แท็ก
เจเอสพี ซึ่งเป็นคำสั่งเจเอสพีที่อยู่ในรูปของแท็ก XML โดยจะนำหน้าด้วยแท็ก <jsp: และ
ต่อท้ายด้วย /> เพื่อบอกให้ทราบว่าเป็น แท็กเจเอสพี เราสามารถบอกให้เวบเซิร์ฟเวอร์ทำ
อะไรหลายๆ อย่างได้ด้วยแท็กเจเอสพีเหล่านี้ ในบทนี้เราจะมาดูว่าแท็กเจเอสพีมีอะไรบ้าง

include
คงยังจำได้ว่าถ้าเราต้องการสอดแทรกเนื้อหาในไฟล์อื่นเข้าไปในไฟล์ .jsp ของเรา เราใช้ได
เร็กทีฟ include ข้อเสียของการสอดแทรกเนื้อหาของไฟล์อื่นด้วยวิธีนี้คือ ถ้ามีการแก้ไขไฟล์
ต้นทาง เนื้อหาใหม่จะไม่ไปปรากฏอยู่ในไฟล์ปลายทางโดยอัตโนมัติ เพราะการสอดแทรก
เกิดขึ้นเมื่อตอนที่มีผู้เยี่ยมชมไฟล์ปลายทางเพียงครั้งเดียวเท่านั้นเจเอสพีมีแท็กเจเอสพีที่
ทำงานได้เหมือนกับไดเร็กทีฟ include แต่จะอัพเดทไฟล์ปลายทางโดยอัตโนม้ติเวลาที่มีการ
แก้ไขไฟล์ต้นทาง แท็กนี้คือ <jsp:include ลองดูรูปแบบของคำสั่งจากตัวอย่างต่อไปนี้

 <html>
<title> Test Page </title>
<body>
<jsp:include page=”logo.html” flush=”true” />
<br>
This is a test page.
</body>
</html>


 หน้าของไฟล์ includetag.jsp จะเปลี่ยนตามโดยอัตโนมัติ
แท็ก <jsp: include ต้องมีพารามิเตอร์ flush=”true” อยู่ด้วยเสมอ

forward
แท็ก forward มีไว้สำหรับส่งผู้เยี่ยมชมไปยังเวบหน้าอื่น ตัวอย่างเช่น สมมติว่าเราสร้างไฟล์
ชื่อ forward.jsp ขึ้นมา แล้วกำหนดให้เมื่อไรก็ตามที่มีผู้เข้ามาเยี่ยมชมเวบเพจหน้านี้ ให้เวบ
เซิร์ฟเวอร์ส่งผู้เยี่ยมชมยัง includetag.jsp แทน เราทำได้ดังนี้

<html>
<title> Forward Page </title>
<body>
<jsp:forward page=”includetag.jsp” />
<br>
You will be forward to includetag.jsp.
</body>
</html>

ถ้าลองเข้าถึงเพจนี้ดูจะพบว่าเบราเซอร์จะกระโดดไปยังเพจ includetag.jsp ในทันที

ใช้แท็กเจเอสพีแทนไดเร็กทีฟ
เราสามารถใช้แท็กเจเอสพีแทนการใช้ไดเร็กทีฟ page หรือ include ได้ด้วย โดยมีรูปแบบ
ดังตัวอย่างต่อไปนี้
<jsp:directive.page import=”java.util.*” />
ตัวอย่างนี้ให้ผลเหมือนกับคำสั่ง
<%@ page import=”java.util.*” %>
ทุกประการ
ถ้าเป็นไดเร็กทีฟ include ก็เพียงแต่ใช้คำว่า include แทน page เช่น
<jsp:directive.include file=”hello.html” />
ให้ผลเหมือนกับคำสั่ง
<%@ include file”hello.html” %>
ทุกประการ