www.itsci.mju.ac.th/sayan JAVA SERVER PAGES (JSP) SAYAN UNANKARD 1/2562 1
w w w . i t s c i . m j u . a c . t h / s a y a n
JAVA SERVER PAGES (JSP) SAYAN UNANKARD1/2562
1
SAYAN – it MJU
WHAT IS A JSP PAGE ?
ตามคํานิยามของ Java Server Pages™ Specification:
A JSP page is a text-based document that describes how to process a request to
create a response. The description intermixes template data with some dynamic
actions [. . .].
• เปนเทคโนโลยีจาวาที่ใชในการพัฒนาเว็บไซดแบบไดนามิค
• JSP pages เปน HTML pages ที่ถูกฝงไวดวยโคดที่ยอมใหมีการเขาถึงขอมูลจากจาวาโคดที่รัน
อยูบนฝงเซิรฟเวอร
• การทํางานของ JSP จะมีการแบงแยกขั้นตอนการนําเสนอดวย HTML ออกจากขั้นตอนการ
ทํางานทางลอจิก
2
SAYAN – it MJU
SEPARATING GUI AND DYNAMIC CONTENT
การแยกสวนของการนําเสนอออกจากสวนของการทํางานจะชวยใหการทํางานสะดวกขึ้นในแงของ
การแกไขตาง ๆ เชน
• สามารถใชภาษาที่แตกตางกันรวมกันได (HTML Vs. Java)
• มีเปาหมายในการทํางานที่แตกตางกัน
• มีความชํานาญที่แตกตางกัน
ดังนั้นการพัฒนาจะตองใชวิธีการจัดการที่แตกตางกันตามไปดวย
JSP ทําไดโดยการอาศัย Java tags พิเศษฝงไวใน HTML
3
SAYAN – it MJU
DEVELOPMENT OF JSP
Java Server Pages ถูกพัฒนาขึ้นเพ่ือโตตอบกับ Microsoft’s Active Server Pages (ASP) โดย
ความแตกตางหลัก ๆ จะอยูท่ี ASP จะรันไดเฉพาะกับ Microsoft IIS และ Personal Web
Servers, และ JSP จะยอมใหผูใชสามารถสราง tags ใชเองได
ชวงเวลาของการพัฒนา: (หมายเหตุ JSP ถูกสรางขึ้นบน Servlets)
• Servlet 2.1 มกราคม 2542
• JSP 1.0 มิถุนายน 2542
• ซอรสโคดถูกสงใหกับ Apache เพ่ือพัฒนา Tomcat server ในเดือนพฤศจิกายน 2542
• Servlet 2.2 และ JSP 1.1 (J2EE1.2) ออกเผยแพรในเดือนธันวาคม 2542
4
SAYAN – it MJU
JSP SPECIFICATION
ถูกพัฒนาขึ้นเพื่อรองรับอุตสาหกรรมซอฟตแวรที่นําโดย Sun Microsystems โดยการกําหนด
มาตรฐานการใชงานระหวาง server และ JSP page ในรูปของ format และ syntax ของ page
Sun ไดสราง JSP specification และยอมใหบริษัทสามารถนําไปใชไดฟรี โดยมีจุดมุงหมายวาทุกๆ
web server และ application server จะสนับสนุนการทํางานของ JSP
JSP specs ถูกสรางขึ้นในรูปของ Java Servlet API
JSP สนับสนุนการทํางานของไดนามิคเว็บสองแบบ คือ
• JSP pages สามารถฝงโคดจาวาลงใน HTML
• JSP สนับสนุนการทํางานโดยใช HTML-like tags ที่ใชติดตอกับจาวาออปเจคบนเซิรฟเวอร
(โดยไมจําเปนตองมีโคดจาวาภายใน page)
5
SAYAN – IT MJU
JSP SPECIFICATION
6
SAYAN – it MJU
JSP SPECIFICATION
Java Server Pages ยอมใหมี tags พิเศษรวมไปถึงจาวาโคดสามารถฝงตัวไวภายใน HTML ซึ่ง
tags และโคดเหลานี้จะถูกโปรเซสโดย Web server เพ่ือสราง HTML มาตรฐานแบบไดนามิค
สําหรับ browser
• เปนอีกสถาปตยกรรมอีกแบบหนึ่งใน application แบบกระจายใน Web-based
• สรางไดนามิค Web pages บนฝง server เชนเดียวกับ Servlets แตจะแยกสวนของการ
ทํางานออกจากสวนของการนําเสนอ
• ดวยลักษณะของ tags จะยอมใหสามารถใชโคดจาวาที่คอมไพลไวแลวมาใชไดในรูปของ
JavaBeans
• สามารถสรางเอกสาร XML ไดแทนที่จะเปน HTML
7
SAYAN – it MJU
HTTP request
HTTP response
Web server
JSP page
JSP container compiles to
a servlet
URL
request
JavaBeanLibrary
DB
properties,call methods
HTTP page
response
Browser
ARCHITECTURE
8
SAYAN – it MJU
STEPS REQUIRED FOR A JSP REQUEST
• เมื่อผูใชเลือก JSP page เบราเซอรจะทําการ request ผานอินเตอรเน็ต
• JSP request จะถูกสงไปยัง Web server
• จากนั้น Web server จะทําการตรวจสอบ JSP ไฟล และสงตอไปยัง JSP Servlet Engine
• หาก JSP file ถูกเรียกใชเปนคร้ังแรก JSP file จะถูก parsed กอน
• ขั้นตอนตอไปจะเปนการสราง Servlet จาก JSP file และสวนที่เปน HTML จะถูกแปลงให
เปนคําส่ัง println statements.
• ซอรสโคดที่เปน Servlet จะถูกคอมไพลใหอยูในรูปของ class.
• Servlet จะทําการสรางออปเจคเพ่ือเรียกใชเมธอดที่เก่ียวของตอไป
• Servlet output จะถูกสงผานอินเตอรเน็ตกลับไปยังเบราเซอร
9
SAYAN – IT MJU
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;
public class HelloWorld extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {res.setContentType("text/html");PrintWriter out = res.getWriter();out.println("<HTML>");out.println("<HEAD>");out.println("<TITLE>Hello World</TITLE>");out.println("</HEAD>");out.println("<BODY>");out.println("<BIG>Hello World</BIG>");out.println("</BODY></HTML>");
}}
SERVLET EXAMPLE
10
SAYAN – it MJU
TRANSLATING AND EXECUTING JSP PAGES
• JSP จะถูกประมวลผลภายใน JSP container ซึ่งโดยปกติจะติดต้ังอยูภายใน Web server
นั่นคือ “JSP container” จะเปรียบเสมือนตัว JVM ที่ประกอบไปดวยซอฟตแวรที่เหมาะสม
ติดต้ังไว
• โดยทํางานภายใตกฏเกณฑแบบเดียวกันกับ servlet
• โดยปกติแลว JSP container จะทําหนาที่ในการแปล JSP page ใหอยูในรูปของ servlet
• โดย default การแปลคอมไพลและแปลรหัสของ JSP page จะเกิดขึ้นเฉพาะคร้ังแรกที่มีการ
เขาถึง page นั้น ๆ
11
1. Browser sends request to Web Server
7. Web Server sends HTML to Browser
2. Web Server sends request to Servlet Engine
Servlet
Servlet
Servlet6. JSP(Servlet) returns HTML
browser
Web Server
Servlet Container
DB
TopLink
5. JSP interacts with Java Bean(s) and/or Servlets
jdbc
4. Servlet Container runs the JSP (Servlet)
jsp
JSP Engine
Servlet source code
Java Compiler
JSP (Servlet)
Java Bean
3. JSP Engine generates servlet
JAVA SERVER PAGE DIAGRAM
SAYAN – IT MJU 12
SAYAN – it MJU
ADVANTAGE & DISADVANTAGE
Advantages
• สามารถใชรวมกับเคร่ืองมืออ่ืน ๆ เชน J2EE
• สามารถพัฒนาระบบไดอยางรวดเร็ว
• สามารถรองรับงานที่มีขนาดตาง ๆ ไดดี
• ทํางานไดทุก platform
• เปนเทคโนโลยีแบบ Open Source
Disadvantages
• คอนขางชาเนื่องจากมีความตองการความสามารถสูง และ ความละเอียดสูง
• ใชเวลาในการเรียนรูนานกวาเทคโนโลยีอ่ืน ๆ
13
SAYAN – it MJU
JSP VERSUS HTML
JSP สามารถทํางานไดดังตอไปนี้
• สามารถเขาถึงระบบฐานขอมูล
• สราง pages ที่สามารถแสดงส่ิงที่นาสนใจสําหรับผูใช
• เก็บขอมูลจากผูใชและคืนขอมูลกลับไปในรูปกลุมขอมูลที่ผูใชตองการ
• แกไข content ของ Web page โดยการ update ไฟลขอความหรือ contents ของระบบ
ฐานขอมูลมากกวาที่จะเปนตัวของ HTML code
• การเขาถึงระบบไฟลผาน Internet สามารถทําใหผูใชสามารถ read, write, และ update
ไฟล
14
SAYAN – it MJU
ADVANTAGES OF JSP OVER COMPETING TECHNOLOGIES
เมื่อเทียบกับ ASP หรือ ColdFusion
• เปนภาษาที่ดีกวาในสวนของ dynamic part
• นําไปใชไดกับ servers และระบบปฏิบัติการไดอยางหลากหลาย
เมื่อเทียบกับ PHP
• เปนภาษาที่ดีกวาในสวนของ dynamic part
• มีเคร่ืองมือสนับสนุนที่ดีกวา
เมื่อเทียบกับ servlets
• เพ่ิมความสะดวกในการสราง HTML
• สามารถใชกับเคร่ืองมือมาตรฐานตาง ๆ
• มีลักษณะการทํางานแบบ Divide and conquer
• แตอยางไรก็ตามนักพัฒนา JSP จะตองมีความรูเก่ียวกับ servlet programming 15
JSP EXAMPLE
SAYAN – IT MJU
<HTML>
<HEAD>
<TITLE>Hello World Example</TITLE>
</HEAD>
<BODY>
<H2>Hello World Example</H2>
<B><% out.println("Hello World"); %></B>
</BODY>
</HTML>
16
SAYAN – IT MJU
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;
public class Hello extends HttpServlet {public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {res.setContentType("text/html");PrintWriter out = res.getWriter();out.println("<HTML>");out.println("<HEAD>");out.println("<TITLE>Hello World</TITLE>");out.println("</HEAD>");out.println("<BODY>");out.println("<BIG>Hello World</BIG>");out.println("</BODY></HTML>");
}}
SERVLET EXAMPLE
17
SAYAN – it MJU
SERVLETS
• servlet จะถูกโหลดขึ้นเฉพาะคร้ังแรกที่มีการรองขอจาก client และหลังจากนั้นทุก ๆ คร้ัง
ที่ client มีการรองขอไปยัง servlet server จะรันเมธอดอยูภายใน servlet ซึ่งการทํางาน
แบบนี้จะชวยลด response time ลง
• Servlets ถูกเขียนขึ้นโดยใชภาษาจาวาทั้งหมด.
• Servlets จะถูกคอมไพลและนําเสนอในรูปของไฟล .class
• เมื่อ servlet ถูก requested จาก client เมธอดจะถูกเรียกใชเพ่ือ response ไปยังการ
รองขอที่เกิดขึ้น
• เมื่อ servlet ถูกโหลดขึ้นแลวจะคงอยูในเมมโมร่ี จนกวาจะมีการปด server หรือกรณีอ่ืน ๆ
ที่ตองการ
18
SAYAN – it MJU
SERVLETS
ปจจุบันไดมีบริษัทตาง ๆ ไดทําการพัฒนาเครื่องมือตาง ๆ เพื่อสนับสนุนการทํางานของ servlets
และ JSP รวมดวยภายในผลิตภัณฑตาง ๆ ที่ออกจําหนาย เชน IBM WebSphere server, BEA
WebLogic Application Server, Netscape Enterprise Server
สวน Servlet และ JSP engines จะไดแก
• JRUN จาก Live Software
• ServletExec จาก New Atlanta Communications
• Apache Tomcat จาก Apache Software Foundation
19
1. Browser sends request to Web Server
6. Web Server sends HTML to Browser
2. Web Server sends request to Servlet Engine
Servlet
Servlet
Servlet5. Servlet generates and returns HTML
browser
Web Server
Servlet Container
DB
TopLink
4. Servlet can access database
jdbc
3. Servlet Engine runs the servlet
Extends Web Server
JAVA SERVLET DIAGRAM
SAYAN – IT MJU 20
SAYAN – it MJU
INTRODUCTION TO JSP TAGS
JSP tags สามารถแบงออกไดเปน 4 ชนิด ไดแก
• Directives
ใชในการ import packages กําหนดกลไกในการจัดการ error หรือขอมูลเก่ียวกับ session
ใน JSP page
• Declarations
ใชในการกําหนด functions และ variables ที่ถูกใชใน JSP
• Scriplets
ใชสําหรับการแทรกโคดจาวาลงภายใน page
• Expressions
ใชแสดงผลลัพธของขอมูลบน page ที่ถูกสรางขึ้น
21
DIRECTIVES
JSP ประกอบไปดวย directives 3 แบบ ไดแก : page directives, include directives และ
taglib directives.
ใน directive ทั้งสามแบบ page directive จะถือวามีความซับซอนมากที่สุด เนื่องจากมีการ
สนับสนุนการทํางานของ attributes จํานวนมาก
Page directive attributes จะประยุกตใชไดกับ JSP page ทั้งหมด เชน
• ใชในการกําหนดคาของภาษาสคริปต
• ใชสําหรับการ import จาวาคลาส
• ใชสําหรับกําหนดดการติดต้ังของ output buffer
• ควบคุมการทํางานของ session
SAYAN – IT MJU 22
DIRECTIVES
รูปแบบของ JSP directives มีดังตอไปนี้
<%@directive attribute="value" %>
page: ที่ถูกใชในการใหขอมูลที่เกี่ยวกับเพจนั้น ๆ <%@page language="java" %>
include: ใชกรณีที่ตองการรวมไฟลอื่นเขาไปใน JSP page<%@ include file="/header.jsp" %>
taglib: ใชกรณีที่ตองการกําหนด tags ภายใน JSP pages เอง
<%@ taglib uri="tlds/taglib.tld" prefix="mytag" %>
SAYAN – IT MJU 23
JSP PAGE DIRECTIVE
page directive อาจรับคาดังตอไปนี้ :
<%@ page language = "java" %>
<%@page contentType="text/html;charset=utf-8"%>
ตัวแปรนี้จะบอก JSP engine วาภาษาใดที่ถูกนํามาใชในไฟล "java" ซึ่งจะเปนเพียงภาษาเดียวที่
สนับสนุนโดย JSP ปจจุบัน
<%@ page import = "java.util.*, ItemValue" %>
• Comma จะแยกรายการของคลาสและ packages ที่ใชใน JSP page
• จะตองปรากฏที่ดานบนของไฟล
SAYAN – IT MJU 24
SAYAN – it MJU
JSP PAGE DIRECTIVE (CONT.)
<%@ page session = "true | false" %>
• true จะเปนการระบุวาขอมูล session พรอมใชงานบน page
• โดย default จะถูกเซทคาเปน true
<%@ page buffer = "none | 16kb | sizekb" %>
• กําหนดขนาดของ output stream buffer
• คา Defaults จะเปน 8kb
• ใชรวมกับ autoFlush
<%@ page autoFlush = "true | false" %>
• เมื่อเซทคาเปน true จะทําการ flushes คาใน output buffer เมื่อเกิดเต็มมากกวาที่จะ
เรียกใช exception25
SAYAN – it MJU
JSP PAGE DIRECTIVE (CONT.)
<%@ page errorPage="mypage/error_handler.jsp" %>
• ระบุ path ที่มีความสัมพันธกับ page เมื่อ control มีการ transferred หากเกิด
exceptions จาก page นี้
• กลไกการจัดการความผิดพลาดของ JSP page จะไดแกคา isErrorPage จะถูกเซทคาเปน
true
<%@ page isErrorPage = "true | false" %>
• กําหนด page ดวยกลไกการจัดการความผิดพลาด
26
SAYAN – it MJU
JSP DECLARATIVES
ใชสําหรับการประกาศตัวแปรและเมธอดท่ีใชโดย JSP page
รูปแบบของ JSP Declaratives จะมีดังนี้
<%!
//java codes
%>
JSP Declaratives จะเร่ิมตนดวยเคร่ืองหมาย <%! และส้ินสุดดวยเคร่ืองหมาย %> ผูใชสามารถ
เขียนโคดไวภายใน JSP Declaratives
ตัวแปรและเมธอดที่ถูกประกาศไวในสวนของ declaratives จะเปนระดับของคลาส ดังนั้นจึง
สามารถนําไปใชไดทุกที่ภายใน JSP page
27
SAYAN – it MJU
JSP DECLARATIONS
คลาสและตัวแปร instance (ที่ถูก generated จากคลาส servlet ) อาจนํามากําหนดไดโดยใช
JSP Declaration tag:
<%! String name = “Web Applications”;
int index = 10;
int count = 0;
%>
เมธอดอาจถูกระบุไดโดย:
<%! private int getNextIndex() {
return index ++;
}
%>28
USING DECLARATIONS - IMPORT
กรณีที่ไมใชการ Declaration
<% java.util.Calendar rightNow = java.util.Calendar.getInstance();
int hour = rightNow.get(java.util.Calendar.HOUR_OF_DAY);
%>
เมื่อเปรียบเทียบกับกรณีที่ใชการ Declaration ดวย import :
<%@ page import="java.util.*" %>
<% Calendar rightNow = Calendar.getInstance();
int hour = rightNow.get(Calendar.HOUR_OF_DAY);
%>
SAYAN – IT MJU 29
SAYAN – it MJU
DECLARATIVE EXAMPLE
<%@page contentType="text/html;charset=MS874"%>
<%!
public java.util.Date showdate() {
return (new java.util.Date());
}
%>
<html>
<body><%= "Date Time now is : <BR>"%><%= showdate() %>
</body>
</html>
30
SAYAN – it MJU
JSP SCRIPTLETS
เปนสวนของจาวาโคดที่ฝงอยูใน HTML page
สามารถเขาถึงตัวแปรที่กําหนดไว
ใชสําหรับกําหนดกลไกสําหรับโคดที่มีความซับซอนมากกวา expressions
• สามารถเซต properties สําหรับ response object
• สามารถทดสอบพารามิเตอรสําหรับคาที่เปน null
รูปแบบของ JSP Scriptles จะไดแก
<%
//java codes
%>
31
STATEMENT SCRIPTLET
เปนประโยคคําสั่งที่ถูกเขียนขึ้นเพื่อการทํางานอยางใดอยางหนึ่ง เชน การคํานวณ หรือการทํางาน
ตามเงื่อนไข ประโยคเหลานี้จะส้ินสุดดวยเคร่ืองหมาย ; เสมอ
<html>
<body>
<%
out.println("Date & Time now : <BR>");
out.println(new java.util.Date());
%>
</body>
</html>
SAYAN – IT MJU 32
SAYAN – it MJU
JSP EXPRESSIONS
เหมาะสมสําหรับผลลัพธจากการทํางานของ expression ที่ฝงใน HTML page
• คาของ expression จะถูกแปลงใหอยูในรูปของ string และนําไปแสดงผล
• การแปลงคาเปน string จะเกิดขึ้นโดยอัตโนมัติ
• ถูกประมวลผลในชวง run time
รูปแบบของ JSP Expressions มีดังตอไปนี้
<%= "Any thing" %>
33
JSP EXPRESSIONS
SAYAN – IT MJU
<HTML>
<HEAD><TITLE>JSP</TITLE></HEAD>
<BODY>
Date Time : <%= new java.util.Date() %>
</BODY>
</HTML>
34
JSP EXPRESSIONS
ใชสําหรับแสดงคาตัวแปรที่มีการคํานวณรวมอยูภายในนิพจนนั้น ๆ
โดยมีรูปแบบดังนี้
<%= //expression %>
<html>
<body>
<%= "Date Time now is : <BR>"%>
<%= new java.util.Date() %>
</body>
</html>
SAYAN – IT MJU 35
SAYAN – it MJU
EXAMPLE
<%@page contentType="text/html" %>
<html>
<body>
<%!int cnt = 0;private int getCount(){
//increment cnt and return the valuecnt++;return cnt;
}
%>
<p>Values of Cnt are:</p>
<p><%=getCount()%></p>
<p><%=getCount()%></p>
</body>
</html>
36
JSP EXPRESSIONS
เมธอด Date() จะคืนคา current date และ time หากทําการกําหนด package ไวภายใน JSP
Declaratives
<%@page contentType="text/html" import="java.util.*"%>
<html><head><title>showdate</title></head><body>
<%= "Date Time now is : <BR>"%><%=new Date() %>
</body></html>
SAYAN – IT MJU 37
COMMENTS
• จุดประสงคเพ่ือใหการทําความเขาใจตอโปรแกรมงายขึ้น
• จะถูก Ignored เม่ือเขาสูกระบวนการแปลงโคด และ จะถูกสงกลับไปยัง client โดยผานกลไก
response ในรูปของ output stream
• จะไมปรากฏอยูในสวนแสดงผลของ browser
• มีรูปแบบและวิธีการเขียนเชนเดียวกับ HTML
<!-- content comments -->
• นอกจากนั้นยังสามารถรวมเขากับขอมูลแบบไดนามิคได เชน
<!--
JSP Page <%=new Date() %>
-->
SAYAN – IT MJU 38
HIDDEN COMMENTS
SAYAN – IT MJU
<HTML>
<HEAD>
<TITLE>Test Page</TITLE>
</HEAD>
<BODY>
<!--this is an example of regular HTML comments-->
<H1>This is a test page</H1>
</BODY>
</HTML>
39
ตัวอยาง
• ตองการสรางคลาสจัดเก็บขอมูลวิชา ประกอบดวย รหัสวิชา ช่ือวิชา หนวยกิต บรรยาย และ
ปฏิบัติ
• สรางเมธอดสําหรับคํานวณคาลงทะเบียน กําหนดให หนวยกิตบรรยาย 200 บาท ปฏิบัติ 400
บาท
• สรางหนาจอ JSP สําหรับแสดงขอมูลรายวิชา พรอมทั้ งแสดงจํานวนเงินที่ตองจาย
คาลงทะเบียนหนวยกิตวิชานั้น ๆ
SAYAN – IT MJU 40