หลักการทำงานของ JSP
JSP
เป็น technology ที่สร้างบน Servlet อีกทีหนึ่ง มีจุดประสงค์เพื่อแยกเอาส่วนที่เป็น presentation (user
interface) ซึ่งก็คือพวก HTML code ออกมาจาก servlet
code ซึ่งเป็น code ภาษาจาวา
เพื่อในการสร้าง/แก้ไข user interface (web pages) จะได้ทำได้ง่าย
ทั้งนี้เพราะว่าคนที่ทำหน้าที่สร้าง/แก้ไข web page ไม่ใช่ programmer
แต่เป็น web designer ซึ่งไม่มีความรู้เรื่องภาษาจาวาเท่าไหร่นัก
JSP มักใช้คู่กับ Servlet ในการสร้าง web
application โดย JSP จะใช้สร้างส่วนที่เป็น user
interface ในขณะที่ Servlet จะใช้ในการควบคุม flow
ของโปรแกรม
JSP
ย่อมาจาก Java Server Page เป็นการพัฒนาเวปเพจลักษณะ
web-scripting คล้ายกับ Microsoft Active
Server Pages (ASP) ซึ่งทำงานร่วมกันระหว่างภาษาจาวากับ HTML ลักษณะของโปรแกรมจะคล้ายกับการนำจาวาไปแทรกในหน้า HTML อย่างไรก็ตาม Web server จะแปลงไฟล์ jsp มาคอมไพล์ให้อยู่ในรูปของ servlet จากนั้นนำผลลัพธ์กลับมาแสดงในรูปของ
HTML ดังรูป
โครงสร้างการทำงานของ
JSP
จะเห็นว่าการที่
jsp
ทำงานได้ต้องอาศัย JSP Container ที่อยู่ใน web
server ในที่นี้เราจะ Apache Tomcat เป็น Web
server และ JSP Container ในตัว
เมื่อต้องการนำทดสอบหรือนำไปใช้งานจริงบน web server ทำได้โดย
1. นำไฟล์ jsp ที่สร้างขึ้นไปวางที่ %TOMCAT_HOME%/webapps/yourapps/ หรือ %TOMCAT_HOME%/webapps/ROOT ก็ได้
2. บีบอัดโฟล์เดอร์ที่เก็บโปรแกรมโดยใช้ฟอร์แมท
zip
แล้วเปลี่ยนนามสกุลเป็น .war นำไปวางที่ %TOMCAT_HOME%/webapps/
3. กรณีที่ไม่ต้องการย้ายโฟล์เดอร์ไปไว้ใน
TOMCAT_HOME
เราสามารถแก้ไขไฟล์ %TOMCAT_HOME%/conf/server.xml ส่วน Context เช่น <Context
path="/TestApp" docBase="D:\TestApplication\"
debug="0" reloadable="true"/> ให้ชี้ไปยังที่ที่เราพัฒนาโปรแกรมได้
4. ใช้ Apache ANT ช่วยในการติดตั้ง วิธีการจะค่อนข้างซับซ้อน
ตัวอย่าง
แทกของ JSP แบ่งเป็น
-
Directives <%@ page attribute=value %>
มักอยู่บนสุดของ JSP page ซึ่งใช้ในการกำหนดค่าต่าง ๆ ที่เกี่ยวข้องกับ JSP
หรือเกี่ยวข้องกับการสื่อสารกับ JSP Container เช่น
import คลาสโดยใช้ <%@ page
import="java.util.Date" %>
เมื่อที่เกิดข้อผิดพลาดใน
JSP
แล้วต้องการให้แสดงหน้า error page ที่ชื่อ errorPage.jsp
โดยใช้<%@ page
errorPage="errorPage.jsp" %>
เมื่อต้องการเก็บ states ในรูปของ
session โดยใช้ <%@ page
session="true" %>
เมื่อต้องการนำไฟล์อื่น
ๆ เช่น html,
jsp มาประกอบในไฟล์ JSP โดยใช้ <%@ include
file="filename.jsp" %>
- Expressions ใช้แปลงค่าตัวแปรของจาวาให้อยู่ในรูปของ
string แล้วแทรกลงใน HTML ไม่ต้องใส่เครื่องหมาย
; ท้ายตัวแปร <%= expression %>
- Scriptlets ใช้ใส่โค้ดของจาวา
ส่วนของโลจิกและการประมวลผมลงใน HTML <% statements %>
- Declaration ใช้ประกาศคลาส
เมธอดและตัวแปรภาษาจาวาภายใน HTML เมื่อโหลด jsp ครั้งแรกจะทำการ initialize โดยอัตโนมัติ <%!
statements %>
- Comments มีสองแบบคือ
comment
ปกติที่ใช้ในภาษา html
ซึ่ง JSP Container จะนำมาประมวลผลและแสดงในหน้า
html ด้วย <!-- comment -->
comments ของ JSP
ซึ่งจะถูก JSP Container
ข้ามไปไม่นำมาประมวลผล <%-- comment --%>
JSP
Implicit Object
ใน JSP บางคลาสที่เราใช้เป็นประจำ เราสามารถเรียก object ของคลาสออกมาใช้ได้โดยไม่ต้องมีการประกาศตัวแปรก่อน
เราเรียกว่า Implicit Object หรือ Predefined
variable ได้แก่
· out ใช้ในการส่งผลกลับไปยังผู้ใช้
· page คือหน้าของ jsp เอง
คล้ายกับ this ในจาวา
· pageContext ใช้เก็บข้อมูลคุณสมบัติของ jsp
ทั้งหน้านี้
· request ใช้รับ request คล้ายกับ
HttpServletRequest ของ servlet
· response ใช้ส่ง response คล้ายกับ
HttpServletResponse ของ servlet
· session ใช้เก็บ session ที่มากับ
request
· config ใช้เก็บ setting ที่มากับ
jsp
· application ใช้เก็บข้อมูลที่ใช้ร่วมกันของทั้ง
JSP และ servlets ใน application นั้น
· exception ใช้กำหนดหน้าของ jsp ที่ใช้แสดงกรณีเกิด Exceptions ขึ้น
JSP
Actions
· jsp:include ใช้สำหรับดึงไฟล์ต่าง ๆ เข้ามาในไฟล์ JSP <jsp:include
page="relativeURL" flush="true"/> ซึ่งไฟล์นั้นจะต้องอยู่ใน uri เดียวกันกับไฟล์ jsp
นั่น และ flush จะใช้ในการล้าง buffer ก่อนจะรวมไฟล์เข้ามา
· jsp:plugin ใช้ในกรณีที่ต้องทำงานร่วมกับเบราว์เซอร์ Netscape Navigator และ
Internet Explorer จำเป็นต้องใช้แทกนี้ในการเรียกใช้งาน
applet หรือ flash
· jsp:param ใช้ในการกำหนดพารามิเตอร์ของ jsp:include jsp:forward jsp:params และ jsp:plugin
· jsp:fallback ใช้แสดงข้อความที่กำหนดเมื่อเบราว์เซอร์ไม่สนับสนุน
applets
ตัวอย่าง
· jsp:forward ใช้ในการส่งต่อ request และ response ไปยัง JSP หรือ servlet อื่นโดยไม่กลับมาที่หน้านี้อีก
<jsp:forward page="urlSpec"
/>
· jsp:useBean ใช้สำหรับเรียกใช้บีน
· jsp:setProperty ใช้เซตคุณสมบัติหรือค่าตัวแปรให้กับบีน ไม่จำเป็นต้องใช้ใน useBean
สามารถใช้
* เพื่อแมปค่าของ element เข้ากับ ค่า property
ต่างๆของ Bean โดยอัตโนมัติ
<jsp:setProperty name="myBeanInstance"
property="*"/>
· jsp:getProperty ใช้ดึงคุณสมบัติจากบีน
การใช้งานบีนบน JSP
การพัฒนาแอปพลิเคชั่นบน jsp สามารถทำได้สะดวก รวดเร็วคล้ายกับแอปพลิเคชั่นภาษาจาวาอื่นทั่วไป
เนื่องจากใช้จาวาบีนได้
การใช้บีนจะช่วยลดความซ้ำซ้อนในการสร้างเมธอดที่มีการใช้งานบ่อยๆ
และลดความผิดพลาดในกรณีที่ต้องแก้ไขเมธอดเหล่านั้นซึ่งสามารถกระทำได้ในไฟล์เดียว
การเรียกใช้งานบีน บน jsp ทำได้โดยใช้ jsp:useBean ดังนี้
<jsp:useBean
id="myBean" class="package.MyBeanClass"
scope="request">
id คือชื่ออ้างอิงของบีน เวลาเรียกใช้พารามิเตอร์ หรือ เซตคุณสมบัติ
class คือ
คลาสของบีน
scope คือ
ขอบเขตการทำงานของบีน ประกอบด้วย
page บีนจะถูกสร้างทุกๆครั้งเมื่อมีการเรียกหน้านั้นและถูกทำลายเมื่อออกจากหน้านั้นไป
request
บีนจะถูกสร้างทุกๆครั้งเมื่อมีการเรียกหน้านั้นและเมื่อไปหน้าอื่นที่เรียกบีนตัวเดียวกันก็ยังสามารถใช้งานบีนตัวนั้นได้อยู่
session บีนจะถูกสร้างขึ้นและเก็บข้อมูลจนกว่าจะหมด
session ของผู้ใช้
application
บีนที่มีเพียงชุดเดียว
ผู้ใช้งานทุกคนจะใช้บีนนี้ร่วมกันตั้งแต่เริ่มต้นกระทั่งแอปพลิเคชั่นสิ้นสุดการทำงาน
การสร้างบีนควรกำหนดชื่อ
package
เพื่องานในการอ้างอิงและการติดตั้งบีน โดยปกติแล้ว แต่ละแอปพลิเคชั่นบีนจะถูกคอมไพล์แล้วเก็บไว้ที่
Application_folder\WEB-INF\classes\package\
เว้นแต่บีนที่ถูกใช้งานบ่อยๆอาจเก็บไว้ที่
%TOMCAT_HOME% \shared\classes\package เพื่อให้ทุกแอปพลิเคชั่นนำไปใช้ได้
การใช้งาน JSP
ร่วมกับฐานข้อมูล
เมื่อใช้
JSP
เชื่อมโยงกับฐานข้อมูลคล้ายกับแอปพลิเคชั่นภาษาจาวาโดยทั่วไป คือ
·
import java.sql.* เสมอ
·
ประกาศใช้งาน Driver
ของฐานข้อมูล
·
กำหนด URL
username/password ของฐานข้อมูล
·
สร้าง Connection
·
สร้าง Statement
·
นำ Statement
มาใช้ในเชื่อมโยงกับฐานข้อมูล
·
หลังจากใช้งานเสร็จแล้วต้องปิด
Statement
และ Connection ตามลำดับทุกครั้ง
กระบวนการสร้าง Connection
จนกระทั่งปิด Connection ต้องทำภายใน Exception
Handling หรือ try{……..}catch(Exception e){}
ตัวอย่าง