วันอาทิตย์ที่ 29 พฤศจิกายน พ.ศ. 2558

หลักการทำงานของ 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){}

ตัวอย่าง



ไม่มีความคิดเห็น:

แสดงความคิดเห็น