1. IMC Institute
Java Web
Programming
Using Cloud Platform
By Associate Professor Dr. Thanachart Numnonda
& Associate Professor Dr. Thanisa Kruawaisayawan
Date 18 – 22 Feb 2013
2. 1
Hand-on
Exercises
การเขียนโปรแกรมเว็บ
Java Servlet / JSP
โดยใช้
Eclipse and TomCat
Assoc.Prof.Dr.Thanachart Numnonda
Software Park Thailand
and
Asst.Prof.Dr.Thanisa Kruawaisayawan
King Mongkut's Institute of Technology Ladkrabang
February 2013
การเขียนโปรแกรม Java Servlet / JSP
5. 4
14.4 พัฒนาไฟล์ mvc-dispatcher-servlet.xml...................................................................................... 115
14.5 พัฒนาไฟล์ web.xml.................................................................................................................... 115
14.6 การทดสอบโปรแกรม.......................................................................................................................116
14.7 พัฒนาโปรแกรมเพื่อเชื่อมต่อกับฐานข้อมูล................................................................................................. 116
Exercise 15 การ Authentication โดยใช้ Tomcat .....................................................................................121
15.1 สร้าง Web Application Project................................................................................................ 121
15.2 เพิ่ม User ของ Tomcat Web Server........................................................................................... 121
15.3 การ Config ไฟล์ web.xml ของ Web Application ที่ต้องการใช้ Tomcat user .....................................122
15.4 การทดสอบโปรแกรมแบบ Basic Authenticate...................................................................................124
15.5 การปรับปรุงโปรแกรมเพื่อให้ใช้ Login Form........................................................................................ 125
15.6 การทดสอบโปรแกรม แบบ Form Authenticate.................................................................................. 126
15.7 การปรับปรุงโปรแกรม เพื่อใช้ Authenticate โดยอ่านจาก Database MySQL.............................................. 126
15.8 การทดสอบโปรแกรม แบบ Database Authenticate............................................................................ 127
Exercise 16 การพัฒนาโปรแกรมเว็บโดยใช้ Google App Engine...................................................................... 128
16.1 การติดตั้งและเริ่มต้นการใช้งาน Google App Engine............................................................................ 128
16.2 การสร้าง Web Application Project............................................................................................ 129
16.3 การพัฒนาโปรแกรม Servlet เพื่อรันบน Google App Engine................................................................ 133
16.4 การพัฒนาโปรแกรมเพื่อติดต่อกับ Google Account................................................................................135
Exercise 17 การพัฒนาโปรแกรม Google App Engine เพื่อติดต่อกับฐานข้อมูล โดยใช้ JPA........................................ 138
17.1 การสร้างโปรเจ็ค Google App Engine............................................................................................138
17.2 การพัฒนาโปรแกรม Book Entity Class..........................................................................................138
17.3 การพัฒนาโปรแกรม EMF.java........................................................................................................ 139
17.4 การพัฒนาโปรแกรม addBook.html................................................................................................. 140
17.5 การพัฒนาโปรแกรม OnlineBookServlet เพื่อรันบน Google App Engine............................................140
17.6 การพัฒนาโปรแกรมเพื่อแสดงข้อมูลใน Books ......................................................................................... 142
Thanachart Numnonda and Thanisa Kruawaisayawan
6. 5
Exercise 1 การสร้างโปรเจ็ค Web Application และไฟล์ HTML
แบบฝึกหัดนี้จะเป็นการสร้างโปรเจ็ค Web Application และพัฒนาหน้าเว็บเพจเพื่อให้ผู้ใช้ป้อนข้อมูลของ
ลูกค้า โดยพัฒนาด้วยภาษา HTML ซึ่งจะทำหน้าเป็นส่วนอินพุตของโปรแกรมเพื่อให้ผู้ใช้ป้อนข้อมูลผ่าน Web
Browser ทั้งนี้ในแบบฝึกหัดนี้จะใช้ Eclipse เป็นเครื่องมือในการพัฒนาโปรแกรมและจะใช้ Apache Tomcat v 6.0
เป็น Web Server
ขั้นตอนในการพัฒนาโปรแกรม
1. การติดตั้ง Web Server
2. สร้างโปรเจ็ค Web Application
3. พัฒนาโปรแกรม addCustomer.html
1.1 การติดตั้ง Web Server
ขั้นตอนแรกจะต้องปรับกำหนด Perspective ของ Eclipse ให้เป็น Java EE โดยการเลือกคำสั่ง Windows >
Open Perspective > Other ..จากนั้นเลือก Java EE ใน Dialog Box จะได้ Perspective ดังรูปที่ 1.1
รูปที่ 1.1 Perspective สำหรับ Java EE
ขั้นตอนถัดไปจะเป็นการเพิ่ม Tomcat Web Server เพื่อให้ Eclipse สามารถควบคุมและ Deploy โปรแกรมลง
ได้ โดยมีขั้นตอนต่างๆ ดังรูปที่ 1.2 ดังนี้
ให้เลือกแทป Servers คลิ๊กขวาภายใน Window แล้วเลือก New → Server
เลือกชื่อ Apache → Tomcat 6.0 Server (หรือ Version อื่น) และ Browse ไปยัง folder Tomcat ที่ติดตั้งไว้
จากนั้นกด OK และ Finish
การเขียนโปรแกรม Java Servlet / JSP
7. 6
รูปที่ 1.2 การ Config Eclipse เพื่อให้รู้จัก TOMCAT Web Server
เราจะเห็นหน้าต่าง Server มีชื่อ Web Server ที่เป็น Tomcat เพิ่มขึ้นมาซึ่งเราสามารถควบคุมการ Start/Stop
Server ได้โดยการคลิ๊กขวาที่ชื่อ Server โปรแกรมจะแสดงคำสั่งต่างๆ ขึ้นมาดังรูปที่ 1.3
รูปที่ 1.3 เมนูในการจัดการ Web Server
Thanachart Numnonda and Thanisa Kruawaisayawan
8. 7
เราจำเป็นที่จะต้องกำหนดค่า Server Configuration ของ Tomcat โดยการเลือกแทป Server แล้วคลิ๊กที่
Tomcat Server โปรแกรมจะแสดงข้อมูลต่างๆของ Server ให้เลือก Server Locations เป็น Use Tomcat Installation
ดังรูปที่ 1.4
รูปที่ 1.4 การกำหนดค่า Server Locations
1.2 การสร้าง Web Application Project
ขั้นตอนนี้จะเป็นสร้างโปรแกรม Web-Base Application โดยการสร้าง Project ใหม่ มีขั้นตอนดังนี้
1. เลือกเมนู File → New → Project
ในไดอะล็อก New Project ขยาย Folder ชื่อ Web และเลือก Dynamic Web Project ดังรูปที่ 1.5
รูปที่ 1.5 การสร้างโปรเจ็ค Web Application
การเขียนโปรแกรม Java Servlet / JSP
13. 12
- คลิกเลือกพื้นที่ว่างส่วนบนของหน้าจอ เลือก Show และ Palette
รูปที่ 1.13 การเรียกใช้ HTML Forms Icon ใน Palette Tools
- จะได้ Tab ชื่อ Palette อยู่ที่หน้าจอด้านล่าง คลิกที่ HTML 4.0 จะมี Icons ให้
สามารถที่จะ Drag & Drop ขึ้นไปวางด้านบนสุด (ลำดับที่3 ดังรูปที่ 1.14)
และปรับค่า Attribute ของ Object นั้นๆ ได้ โดยเลือกที่ Tab Properties (Tab อยู่ถัดไปทางขวา)
รูปที่ 1.14 การ Drag and Drop Forms Icon ไปที่หน้า Design
Thanachart Numnonda and Thanisa Kruawaisayawan
14. 13
1.4 การทดสอบโปรแกรม
1. ทำการติดตั้ง (Deploy) Web Project บน Tomcat WebServer
โดยให้เลือกแทป Server แล้วคลิ๊กขวาที่ชื่อ Tomcat Server แล้วเลือกคำสั่ง Add and Remove ดังรูปที่ 1.15
รูปที่ 1.15 การ Drag and Drop Forms Icon ไปที่หน้า Design
จากนั้นเลือก WebApp แล้ว กดปุ่ม Add เพื่อเพิ่มเข้าไปที่ Web Server และกด Finish ดังรูปที่ 1.16
รูปที่ 1.16 การ Deploy Project สู่ Web Application Server
2. Run โปรแกรม WebApp โดยคลิ๊กขวาที่ addCustomer.html → Run As → Run on Server ดังรูปที่ 1.17
รูปที่ 1.17 การรัน File ที่ต้องการ Test
การเขียนโปรแกรม Java Servlet / JSP
15. 14
3. จะมีให้เลือกว่าจะให้รัน file นี้ที่ Server ไหน (กรณีเรานี้มี Server เดียว) กด Finish ดังรูปที่ 1.18
รูปที่ 1.18 การเลือก Web Application Server ที่จะใช้รัน
4. จะได้ผลลัพธ์ดังรูปที่ 1.19
รูปที่ 1.19 ผลลัพธ์ที่ได้จากการรัน File addCustomer.html
หมายเหตุ สังเกตที่ท้าย hostname จะหมายเลขพอร์ต ซึ่งก็คือ port ที่ Tomcat Server ให้บริการอยู่
โดย Default จะเป็น 8080 ยกเว้นว่าจะกำหนดเป็นหมายเลขอื่น
Thanachart Numnonda and Thanisa Kruawaisayawan
138. 137
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(text/html;charset=UTF-8);
PrintWriter out = response.getWriter();
SimpleDateFormat fmt = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss.SSSSSS);
fmt.setTimeZone(new SimpleTimeZone(0, ));
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String url = request.getRequestURI();
String msg;
if (user != null) {
msg = pWelcome, + user.getNickname() + ! You can a href= +
userService.createLogoutURL(url) +
sign out/a./p;
} else {
msg = pWelcome! a href= + userService.createLoginURL(url) +
Sign in or register/a to customize./p;
}
out.println(html);
out.println(head);
out.println(titleServlet TimerServlet/title);
out.println(/head);
out.println(body);
out.println(msg);
out.println(h1Servlet TimerServlet at + request.getContextPath() + /h1);
out.println(pThe time is: + fmt.format(new Date()) + /p);
out.println(/body);
out.println(/html);
out.close();
}
}
การเขียนโปรแกรม Java Servlet / JSP
139. 138
Exercise 17 การพัฒนาโปรแกรม Google App Engine
เพื่อติดต่อกับฐานข้อมูล โดยใช้ JPA
เนื้อหาที่ต้องศึกษาก่อน
• การพัฒนาโปรแกรมเว็บโดยใช้ Google App Engine
• Java Persistence API
การเก็บข้อมูลลงในโปรแกรม Web Application ที่จะต้องการรองรับผู้ใช้จำนวนมากเป็นเรื่องค่อนข้างยาก
เนื่องจากผู้ใช้จะต้องเรียกใช้โปรแกรมจาก Web Server จำนวนหลายเครื่องจึงอาจทำให้การเรียกใช้โปรแกรมแต่ละ
ครั้งใช้ Web Server ที่ไม่ซ้ำกัน และ Web Server ทุกเครื่องจะต้องสามารถติดต่อกับข้อมูลที่อาจกระจายอยู่ใน
เครื่องแม่ข่ายหลายๆเครื่องได้ Google App Engine มีกลไกในการจัดการ Infrastructure เพื่อทำให้นักพัฒนา
โปรแกรมไม่ต้องกังวลกับการจัดการปัญหาเหล่านั้น โดยสามารถที่จะจัดการข้อมูลได้โดบผ่าน API ที่ทาง Google
กำหนดไว้ให้
Google App Engine สนับสนุนการเขียนโปรแกรมการจัดการฐานข้อมูลโดยการกำหนดมาตรฐานไว้สอง
แบบคือ Java Data Objects (JDO) และ Java Persistence API (JPA) ซึ่งทั้งสองแบบนี้จะใช้แพลตฟอร์มของ
DataNucleus Access การเก็บข้อมูลวิธีนี้จะใช้วิธีแบบ Object Database ซึ่งแตกต่างจาก RDBMS ทั่วๆไป ดัง
นั้นผู้พัฒนาโปรแกรมที่ใช้ RDBMS อาจจะต้องปรับแนวคิดการเก็บข้อมูลใหม่เพื่อให้พัฒนา Google Web
Application เป็นไปได้ง่ายขึ้น
แบบฝึกหัดนี้จะเป็นตัวอย่างการติดต่อกับฐานข้อมูล Books โดยใช้ JPA โดยโปรแกรมจะทำการสร้าง
Entity ที่ชื่อ Book แล้วเขียนโปรแกรมเพื่อเพิ่มข้อมูลและแสดงข้อมูลทั้งหมดของ Book
17.1 การสร้างโปรเจ็ค Google App Engine
แบบฝึกหัดจะสร้าง Web Application ของ GAE โดยมีขั้นตอนดังนี้
1. เลือกคำสั่ง File New Other..
2. ในไดอะล็อก New เลือก Folder Google และเลือก Web Application Project แล้วกด Next
3. กำหนดชื่อ Package name เป็น com.imcinstitute และ Project name เป็น OnlineBook
4. ไม่เลือกช่อง Use Google Web Toolkit แล้วกด Finish
โปรแกรมจะสร้างไฟล์ OnlineBookServlet.java และ persistence.xml (ภายใต้โฟลเดอร์ META-
INF) .ให้อัตโนมัติ
17.2 การพัฒนาโปรแกรม Book Entity Class
โปรแกรม Book.java จะเป็น Entity Class ที่ประกอบไปด้วยฟิลด์ต่างๆที่สอดคล้องกับ column ของ
Thanachart Numnonda and Thanisa Kruawaisayawan
140. 139
Table ที่ชื่อ Books โดยจะกำหนดให้ไฟล์อยู่ package ที่ชื่อ Entity และมี sourcecode ดัง Listing ที่ 17.1
Listing ที่ 17.1 sourcecode สำหรับโปรแกรม Book.java
package entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Book implements Serializable {
@Id
private String isbn;
private String title;
private String author;
private float price;
public String getIsbn() {
return isbn;
}
public void setIsbn(String isbn) {
this.isbn = isbn;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
17.3 การพัฒนาโปรแกรม EMF.java
โปรแกรม Web Application จะติดต่อกับ datastore โดยใช้ออปเจ็คชนิด EntityManager โดยสร้างมา
จาก EntityManagerFactory โปรแกรม EMF.java เป็นโปรแกรมที่พัฒนาขึ้นมาเพื่อสร้างออปเจ็คดังกล่าว โดยมี
ขั้นตอนการพัฒนาโปรแกรมดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด OnlineBook จากนั้นเลือกคำสั่ง New Java Class...
2. ในไดอะล็อก New Java Class กำหนดค่า Class Name เป็น EMF และ Package เป็น entity แล้วกด
Finish
3. ปรับปรุงโปรแกรม EMF.java ให้เป็นไปดัง Listing ที่ 17.2
การเขียนโปรแกรม Java Servlet / JSP
141. 140
Listing ที่ 17.2 sourcecode สำหรับโปรแกรม EMF.java
package entity;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EMF {
private static final EntityManagerFactory emfInstance =
Persistence.createEntityManagerFactory(transactions-optional);
private EMF() {
}
public static EntityManagerFactory get() {
return emfInstance;
}
}
17.4 การพัฒนาโปรแกรม addBook.html
โปรแกรม addBook.html จะเป็นฟอร์มสำหรับกรอกข้อมูลหนังสือ แล้วทำการเรียก
OnlineBookServlet ที่มี url เป็น addBook.do เมื่อมีการกดปุ่ม Add โดยมี source code ดัง Listing ที่ 17.3
Listing ที่ 17.3 sourcecode สำหรับโปรแกรม addBook.html
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN
http://www.w3.org/TR/html4/loose.dtd
html
head
meta http-equiv=Content-Type content=text/html; charset=UTF-8
titleAdd a new book/title
/head
bodyh1Add a new book/h1P
form action=addBook.do method=GET
ISBN : input type=text name=isbn value= size=15/ BR
Title : input type=text name=title value= size=50/ BR
Author : input type=text name=author value= size=50/ BR
Price : input type=text name=price value= size=10/ BR
input type=submit value=Add /
/form
/body
/html
17.5 การพัฒนาโปรแกรม OnlineBookServlet เพื่อรันบน Google App Engine
ขั้นตอนนี้จะเป็นการปรับปรุงโปรแกรม OnlineBookServlet.java เพื่อให้เก็บข้อมูลหนังสือลงใน
datastore ที่ชื่อ Book โดยมีขั้นตอนการพัฒนาโปรแกรมดังนี้
1. โปรแกรม OnlineBookServlet.java ให้เป็นไปดัง Listing ที่ 17.4
2. ปรับปรุงโปรแกรม web.xml โดยแก้ไข servlet-mapping ให้เป็น addBook.do ดังนี้
Thanachart Numnonda and Thanisa Kruawaisayawan
142. 141
servlet-mapping
servlet-nameOnlineBook/servlet-name
url-pattern/addBook.do/url-pattern
/servlet-mapping
3. ทำการ deploy บน Google App Engine แล้วทดลองรันโปรแกรมโดยใช้ url
http://thaijavaapp.appspot.com/addBook.html
Listing ที่ 17.4 โปรแกรม OnlineBookServlet.java
package com.imcinstitute;
import java.io.IOException;
import java.io.PrintWriter;
import javax.persistence.EntityManager;
import javax.servlet.http.*;
import entity.Book;
import entity.EMF;
@SuppressWarnings(serial)
public class OnlineBookServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType(text/html;charset=UTF-8);
PrintWriter out = resp.getWriter();
out.println(html);
out.println(head);
out.println(titleAdd a new book/title);
out.println(/head);
out.println(body);
out.println(h1 Add a new book /h1);
String isbn = req.getParameter(isbn);
String author = req.getParameter(author);
String title = req.getParameter(title);
String priceStr = req.getParameter(price);
float price = Float.parseFloat(priceStr);
Book bk = new Book();
bk.setIsbn(isbn);
bk.setAuthor(author);
bk.setTitle(title);
bk.setPrice(price);
EntityManager em = EMF.get().createEntityManager();
try {
em.persist(bk);
out.println(Book added);
} finally {
em.close();
}
out.println(/body);
out.println(/html);
out.close();
}
}
การเขียนโปรแกรม Java Servlet / JSP