SlideShare a Scribd company logo
1
Hand-on
Exercises
Java Web Services
Using Eclipse, Tomcat,
NetBeans IDE and GlassFish Server
Assoc.Prof.Dr. Thanachart Numnonda
and
Assist.Prof.Dr. Thanisa Kruawaisayawan
April 2014
Web Services Exercises www.imcinstitute.com IMC Institute
Java Web Services Exercises Thanachart and Thanisa Numnonda
3
Exercise 1: Calling Existing Web Services
แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรมเพื่อเรียกใช้ Web Services ที่มีอยู่แล้ว ซึ่งจะเลือกมา 3
บริการดังนี้
การทดลองที่ 1 อัตราแลกเปลี่ยนเงินตราระหว่างประเทศ
การทดลองที่ 2 ราคาน้ำมันล่าสุดของ ปตท.
โดยจะใช้ soapUI และ Eclipse
การทดลองที่ 1
การทดสอบ Web Services โดยใช้ soapUI
โปรแกรม soapUI เป็นโปรแกรม Open Source ที่สามารถใช้เป็นเครื่องมือในการทดสอบเว็บเซอร์วิส
ซึ่งเป็นที่นิยมใช้กันอย่างกว้างขวาง เราสามารถที่จะไปดาวน์โหลดโปรแกรมนี้ได้ที่ www.soapui.org โดย
เมื่อติดตั้งแล้ว ให้ทำการทดสอบเรียกใช้เว็บเซอร์วิส ตามขั้นตอนดังนี้
1. ในโปรแกรม soapUI เลือกเมนู File > New soapUI Project
2. ในช่อง Initial WSDL ให้ใส่ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl ดังแสดง
ในรูปที่ 1
รูปที่ 1 แสดงการสร้าง soapUI Project ใน soapUI
Web Services Exercises www.imcinstitute.com IMC Institute
3. จากนั้นกดปุ่ม OK โปรแกรมจะทำการสร้างโปรเจ็คนี้ขึ้นมา
4. ขยายโหนด ConversionRate ของ CurrencyConvertorSoap แล้วดับเบิ้ลคลิ๊กที่ Request1
5. ในหน้าต่าง Editor จะแสดงค่าของ SOAP Request ที่จะส่งไป ให้ใส่ค่าดังนี้
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:web="http://www.webserviceX.NET/">
<soapenv:Header/>
<soapenv:Body>
<web:ConversionRate>
<web:FromCurrency>USD</web:FromCurrency>
<web:ToCurrency>THB</web:ToCurrency>
</web:ConversionRate>
</soapenv:Body>
</soapenv:Envelope>
6. กดปุ่ม Submit request (เครื่องหมายสีเขียว) ที่อยู่ทางซ้ายบน โปรแกรมจะได้ SOAP Response
กลับมาดังแสดงตัวอย่างได้ดังนี้
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<ConversionRateResponse xmlns="http://www.webserviceX.NET/">
<ConversionRateResult>31.403/ConversionRateResult>
</ConversionRateResponse>
</soap:Body>
</soap:Envelope>
การทดลองที่ 2
การพัฒนา Java Client เพื่อเรียกดูราคาน้ำมัน
แบบฝึกหัดนี้จะสร้าง Client ขึ้นเพื่อใช้ในการเรียก Web Services โดยมีขั้นตอนดังนี้
1. สร้าง Dynamic Web Project ชื่อ ExternalWSDemo โดยเลือกเมนู File > New > Other.. แล้ว
เลือก Web > Dynamic Web Project
Java Web Services Exercises Thanachart and Thanisa Numnonda
5
2. คลิ๊กขวาที่ ExternalWSDemo เลือก New → Other → Web Services → Web Service Client
3. ใส่ค่า Service definition เป็น http://www.pttplc.com/webservice/pttinfo.asmx?WSDL
4. เลือกช่อง Monitor the Web service แล้วกดปุ่ม Finish
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 1 ขอบริการจาก Web Service ที่ระบุ
โปรแกรมจะสร้างไฟล์ที่เกี่ยวข้องกับ Web Services ดังรูป
5. ทำการสร้าง Servlet เพื่อแสดงผล สิ่งที่ได้รับมาจาก Web Services โดยคลิ๊กขวาที่โหนด
ExternalWSDemo แล้วเลือกคำสั่ง New > Servlet โดยกำหนดค่า
Package = controller
Class Name = OilPriceInfoServlet
Java Web Services Exercises Thanachart and Thanisa Numnonda
7
6. พัฒนา source code ดัง Listing ที่ 1
7. ทำการรันโปรแกรม จะได้ตัวอย่างผลลัพธ์แสดงราคาน้ำมันล่าสุด ดังแสดงในรูปที่ 2
Listing ที่ 1 โปรแกรม OilPriceInfoServlet.java
@WebServlet("/OilPriceInfoServlet")
public class OilPriceInfoServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
PTTInfoSoapProxy obj = new PTTInfoSoapProxy();
out.print(obj.currentOilPrice("TH"));
}
}
รูปที่ 2 แสดงผลลัพธ์ที่ได้จากการเรียกใช้ Web Service Operation: CurrentOilPrice ของปตท.
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 2: Web Services Provider
แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE โดยใช้ชุดคำสั่ง JAX-WS ซึ่งจะ
เป็นการพัฒนา Web Services Provider บน Java EE Server ทั้งนี้ชุดคำสั่ง JAX-WS จะช่วยทำให้การสร้าง
และเรียกใช้ Web Services ด้วยภาษา Java เป็นไปได้ง่ายขึ้น
การพัฒนา Web Services จะแบ่งได้เป็นสองส่วนคือ Web Service Requester (Client) และ Web
Service Provider (Server) ซึ่งการพัฒนา Web Service Provider สามารถทำได้ 2 วิธีคือ
1. Web Services ที่รันบน Web Server โดยใช้ Java Servlet
2. Web Services ที่รันบน Application Server โดยใช้ Session Bean
แบบฝึกหัดนี้จะแสดงขั้นตอนการใช้ Eclipse สร้าง Web Service ที่ชื่อ calculateTax โดยใช้ Servlet
ซึ่งจะรันอยู่บน Apache Tomcat เพื่อแสดง Web Services การส่ง SOAP message และ WSDL ของ
Services
การติดตั้ง Apache Tomcat ให้สนับสนุน JAX-WS
เราต้องติดตั้งไฟล์ประเภท jar ของ JAX-WS เพื่อทำให้ Tomcat สนับสนุน JAX-WS โดยเราต้อง
download ไฟล์ Library ที่ http://jax-ws.java.net/ แล้วทำการ unzip และ copy ไฟล์ประเภท jar ไว้ที่ โฟร์เด
อร์ TOMCAT_HOME/lib แล้วทำการ Restart Tomcat อีกครั้ง ในกรณีที่เราไม่ต้องการ copy ทุกไฟล์ เรา
สามารถเลือกที่จะ copy ไฟล์ที่จำเป็นเหล่านี้
•gmbal-api-only.jar
•jaxb-impl.jar
•jaxws-api.jar
•jaxws-rt.jar
•management-api.jar
•policy.jar
•stax-ex.jar
•streambuffer.jar
การพัฒนา calculateTax Web Service
แบบฝึกหัดนี้จะสร้าง Dynamic Web Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน
การพัฒนาดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
9
1. เลือกเมนู File > New > Project > Web > Dynamic Web Project
2. กำหนด Project Name เป็น TaxWSDemo แล้วเลือก Target Runtime เป็น Apache Tomcat 7
กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Finish
การพัฒนาโปรแกรม Service Endpoint
ในการพัฒนาโปรแกรม Web Service เราต้องเขียนโปรแกรทขึ้นมาสองโปรแกรมคือ Interface และ
Class ที่มีเว็บเซอร์วิสเมธอดอยู่
1. การพัฒนา Interface ทำได้โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Interface
2. กำหนดค่า package เป็น com.taxws และ name เป็น TaxServiceInterface
3. ปรับปรุงโปรแกรม TaxServiceInterface ดังนี้
package com.taxws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface TaxServiceInterface {
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) ;
}
4. ทำการพัฒนาโปรแกรม TaxService โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Class
5. กำหนดค่า package เป็น com.taxws และ name เป็น TaxService
6. ปรับปรุงโปรแกรม TaxService ดังนี้
package com.taxws;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService(endpointInterface = "com.ws.TaxWS")
public class TaxService {
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) {
if (income < 70000) {
return 0;
} else if (income < 100000) {
return (income - 70000) * 0.05;
} else if (income < 500000) {
return (income - 100000) * 0.1 + 3500;
} else {
Web Services Exercises www.imcinstitute.com IMC Institute
return (income - 500000) * 0.2 + 43500;
}
}
}
7. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Clean and Build จากนั้นคลิ๊กขวาที่โหนด
TaxWSDemo อีกครั้ง แล้วเลือก Deploy
การพัฒนาไฟล์ configuration
เราต้องสร้างไฟล์ configuration ขึ้นมาสองไฟล์เพื่อระบุตำแหน่งของ Servlet และ Web Services Endpoint
คือ web.xml และ sun-jaxws.xml โดยมีขั้นตอนดังนี้
1. โดยคลิ๊กขวาที่โหนด content/WEB-INF เลือกคำสั่ง New > Other > XML > XML File แล้วกด Next
2. กำหนด File Name เป็น web.xml แล้วกด Finish
3. ปรับปรุงโปรแกรม web.xml ดังนี้
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
<listener>
<listener-class>
com.sun.xml.ws.transport.http.servlet.WSServletContextListener
</listener-class>
</listener>
<servlet>
<servlet-name>taxws</servlet-name>
<servlet-class>
com.sun.xml.ws.transport.http.servlet.WSServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>taxws</servlet-name>
<url-pattern>/taxws</url-pattern>
</servlet-mapping>
<session-config>
Java Web Services Exercises Thanachart and Thanisa Numnonda
11
<session-timeout>30</session-timeout>
</session-config>
</web-app>
4. สร้างไฟล์ sun-jaxws.xml ไว้ที่ content/WEB-INF โดยมีโปรแกรมดังนี้
<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime"
version="2.0">
<endpoint name="WebServiceImpl"
implementation="com.taxws.TaxService"
url-pattern="/taxws" />
</endpoints>
การทดสอบ Web Service
1. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Run As > Run on Server
2. กำหนด url นี้บน Web Browser >> http://localhost:8080/TaxWSDemo/taxws จะแสดงผลลัพธ์ดังนี้
3. ทดสอบการเรียก TaxService จาก soap UI โดย เลือกเมนู File > New soapUI Project
4. กำหนดค่า Project Name เป็น TaxWSClient และ Initial WSDL
เป็น http://localhost:8080/TaxWSDemo/taxws?wsdl แล้วกดปุ่ม OK
5. ในหน้าต่าง Projects ขยายโหนด TaxWSClient >> TaxServicePortBinding >> calculateTax
6. ดับเปิ๊ลคลิ๊ก Request1 โปรแกรมจะแสดง SOAP Request ออกมา ให้กำหนดค่าใน tax <income>
เป็น 73000
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:tax="http://taxws.com/">
<soapenv:Header/>
<soapenv:Body>
<tax:calculateTax>
<income>73000</income>
</tax:calculateTax>
Web Services Exercises www.imcinstitute.com IMC Institute
</soapenv:Body>
</soapenv:Envelope>
7. กดปุ่ม Submit request (เครื่องหมายสีเขียว) ที่อยู่ทางซ้ายบน โปรแกรมจะได้ SOAP Response
กลับมาดังนี้
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:calculateTaxResponse xmlns:ns2="http://taxws.com/">
<return>150.0</return>
</ns2:calculateTaxResponse>
</S:Body>
</S:Envelope>
การพัฒนาโปรแกรม Web Service Client
ขั้นตอนนี้จะเป็นการพัฒนาโปรแกรม Web Service Client เพื่อเรียกใช้ TaxServices โดยใช้
wsimport ซึ่งมีขั้นตอนดังนี้
1. สร้าง Java Project ที่ชื่อ TaxWSClient
2. ใช้โปรแกรม wsimport ในการสร้างโปรแกรม Java อัตโนมัติจากไฟล์ wsdl โดยการเปิด terminal
แล้วเปลี่ยนไดเร็กทอรี่ไปที่ source code ของโปรเจ็ค TaxWsClient และเรียกใช้ wsimport จากคำสั่ง
ดังนี้
cd %project_home%/src
wsimport -s . -target 2.0 http://localhost:8080//TaxWSDemo/taxws?wsdl
3. โปรแกรมจะสร้่างไฟล์ต่างๆดังรูป
Java Web Services Exercises Thanachart and Thanisa Numnonda
13
4. สร้าง Class โดยกำหนด package เป็น com.taxws.client และ Name เป็น TaxWSClient โดยมี
source code ดัง Listing ที่ 2
5. ทำการรันโปรแกรมจะได้ผลลัพธ์เป็น Tax amount = 150.0
Listing ที่ 2 โปรแกรม TaxWSClientManual
package com.taxws.client;
import com.taxws.TaxService;
import com.taxws.TaxServiceService;
public class TaxWSClient {
public static void main(String[] args) {
TaxServiceService obj = new TaxServiceService();
TaxService taxService = obj.getTaxServicePort();
double tax = taxService.calculateTax(73000);
System.out.println("Tax amount = "+ tax);
}
}
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 3: Web Service Authentication
แบบฝึกหัดนี้จะเป็นการปรับปรุงโปรแกรม Tax Service เพื่อเรียกให้มีการทำ authentication ก่อนที่จะ
มีการคำนวณภาษี ทั้งนี้ได้กำหนดให้ผู้ใช้ต้องใส่ username เป็น root และ password เป็น password จึงจะ
คำนวณค่าภาษีมาให้ หาก username หรือ password ไม่ถูกต้องจะให้ค่ากลับมาเป็น -999
การปรับปรุงโปรแกรม TaxService.java
ขั้นตอนนี้ให้ปรับปรุงโปรแกรม TaxService.java ดัง Listing ที่ 3
Listing ที่ 3 โปรแกรม TaxService
package com.taxws;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.handler.MessageContext;
@WebService(endpointInterface = "com.ws.TaxWS")
public class TaxService {
@Resource
WebServiceContext wsctx;
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) {
MessageContext mctx = wsctx.getMessageContext();
// get detail from request headers
Map http_headers = (Map)
mctx.get(MessageContext.HTTP_REQUEST_HEADERS);
List userList = (List) http_headers.get("Username");
List passList = (List) http_headers.get("Password");
String username = "";
String password = "";
if (userList != null) {
// get username
username = userList.get(0).toString();
}
if (passList != null) {
// get password
password = passList.get(0).toString();
Java Web Services Exercises Thanachart and Thanisa Numnonda
15
}
// Should validate username and password with database
if (username.equals("root") && password.equals("password")) {
if (income < 70000) {
return 0;
} else if (income < 100000) {
return (income - 70000) * 0.05;
} else if (income < 500000) {
return (income - 100000) * 0.1 + 3500;
} else {
return (income - 500000) * 0.2 + 43500;
}
} else {
return -999;
}
}
}
การปรับปรุงโปรแกรม TaxWSClient.java
ขั้นตอนนี้ให้ปรับปรุงโปรแกรม TaxWSClient.java ดัง Listing ที่ 4
Listing ที่ 4 โปรแกรม TaxWSClient
package com.taxws.client;
import java.util.Map;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import com.taxws.TaxService;
import com.taxws.TaxServiceService;
public class TaxWSClient {
public static void main(String[] args) {
TaxServiceService obj = new TaxServiceService();
TaxService taxService = obj.getTaxServicePort();
Map<String, Object> req_ctx = ((BindingProvider) taxService)
.getRequestContext();
Map<String, List<String>> headers = new HashMap<String,
List<String>>();
headers.put("Username", Collections.singletonList("root"));
headers.put("Password", Collections.singletonList("password"));
req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
double tax = taxService.calculateTax(73000);
System.out.println("Tax amount = " + tax);
}
}
Web Services Exercises www.imcinstitute.com IMC Institute
การทดสอบโปรแกรม
ทำการทดสอบโปรแกรม ตามขั้นตอนดังนี้
1. ทำการรันโปรเจ็ค TaxWSDemo ใหม่โดยใช้คำสั่ง Run As > Run On Server
2. ทำการรันโปรแกรม TaxWSClient.java จะเห็นว่าได้ผลลัพธ์อย่างถูกต้อง
3. ทดลองเปลี่ยนค่า username หรือ password ในโปรแกรม TaxWSClient.java แล้วทดลองรัน
โปรแกรมใหม่ จะเห็นว่าผลลัพธ์เปลี่ยนไป
Java Web Services Exercises Thanachart and Thanisa Numnonda
17
Exercise 4: Axis2 Web Services
แบบฝึกหัดนี้เป็นการติดตั้ง Axis2 Web Services บน Tomcat Web Server แลัวทดลองพัฒนา Web
Service โดยใช้โปรแกรม Eclipse
การติดตั้ง Axis2 เพื่อให้่ใช้กับโปรแกรม
ขั้นตอนนี้เป็นการติดตั้ง Axis2 เพื่อให้ทำงานบน Tomcat ได้ โดยต้องทำการ config โปรแกรม Ec-
lipse ดังนี้
1. ทำการดาวน์โฟล์ axis2-1.x.x.zip จาก http://axis.apache.org/axis2/java/core/download.cgi และ
ทำการ unzip
2. เลือกคำสั่ง Preferences.. ของโปรแกรม Eclipse
3. ในไดอะล็อก Prefernces เลือก Web Services > Axis2 Preferences และกำหนดตำแหน่งของ Axis2
runtime location ให้ตรงกับไดเร็กทอรี่ที่ทำการ unzip ไฟล์ axis2-1.x.x.zip ดังรูป
Web Services Exercises www.imcinstitute.com IMC Institute
การพัฒนาโปรแกรม Axis2 Web Services
ขั้นตอนนี้จะเป็นการพัฒนา Dynamic Web Project ให้เป็น Axis2 Web Services สำหรับการคำนวณ
ภาษีโดยมีขั้นตอนดังนี้
1. เลือกเมนู File > New > Project > Web > Dynamic Web Project
2. กำหนด Project Name เป็น TaxAxisWS แล้วเลือก Target Runtime เป็น Apache Tomcat 7
กำหนด Dynamic Web Module Version เป็น 2.5 แล้วกด Finish (หมายเหตุ กรณีของ Axis เรา
จะต้องเลือก Web Module เวอร์ชั่น 2.x เท่านั้น)
3. คลิ๊กขวาที่โหนด TaxAxisWS แล้วเลือกคำสั่ง Properties
4. ในไดอะล็อก Properties for TaxAxisWS ให้เลือก Project Facets แล้วเลือกช่อง Axis2 Web
Services แล้วกด Apply ดังรูป
5. ทำการพัฒนาโปรแกรม TaxService โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Class
6. กำหนดค่า package เป็น com.taxws และ name เป็น TaxService
7. ปรับปรุงโปรแกรม TaxService ดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
19
package com.taxws;
public class TaxService {
public double calculateTax(double income) {
return 0.1 * income;
}
}
8. กำหนดคลาส TaxService ให้เป็น Web Services โดยการคลิ๊กขวาที่โหนด TaxService แล้วเลือกคำ
สั่ง New > Other > Web Services > Web Service แล้วกด Next
9. คลิ๊กที่ Web Service runtime: Apache Axis เมื่อปรากฎไดอะล็อก Service Deployment
Configuration ให้เลือก Apache Axis2 แล้วกด OK
Web Services Exercises www.imcinstitute.com IMC Institute
10. กด Next แล้วเลือกค่าตามที่ตั้งไว้
11. กด Next โปรแกรมจะทำการติดตั้ง Web Service ลงบน Tomcat แล้วกด Finish
12. เราสามารถเรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser ดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
21
http://localhost:8080/TaxAxisWS/ เราจะเห็นข้อความด้งรูป
13. คลิ๊กที่ Services เราจะเห็น TaxService ที่มี Opearation ดังนี้
14. เราสามารถที่จะเรียกดู WSDL ได้ที่ http://localhost:8080/TaxAxisWS/services/TaxService?wsdl
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 5: RESTful Web Services
แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม RESTful Web Services โดยใช้ JAX-RS ที่เป็น Jersey
การพัฒนา Hello Web Service
แบบฝึกหัดนี้จะสร้าง Dynamic Web Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน
การพัฒนาดังนี้
1. เลือกเมนู File > New > Project > Web > Dynamic Web Project
2. กำหนด Project Name เป็น RESTfulDemo แล้วเลือก Target Runtime เป็น Apache Tomcat 7
กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Next
3. ในหน้า web module ให้เลือกช่อง Generate web.xml deployment descriptor แล้วกด Finish
4. download ไฟล์ Jersey Library ที่ http://jersey.java.net/ แล้วทำการ unzip และ copy ไฟล์ประเภท
jar ไว้ที่ โฟร์เดอร์ WebContent->WEB-INF->lib โดยมีไฟล์ที่จำเป็นดังนี้
• asm-3.1
• jersey-client-1.17
• jersey-core-1.17
• jersey-server-1.17
• jersey-servlet-1.17
• jsr311-api-1.1.1
เราจะเห็นไฟล์ต่างๆดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
23
5. เพิ่ม jar file เหล่านี้ลงใน Build Path โดยการคลิ๊กขวาที่ฌหนด RestfulDemo แล้วเลือก Properties
แล้วเลือก Java Build Path กด Add JARs.. แล้วเลือกไฟล์ต่างๆดังรูป แล้วกด OK
6. ทำการพัฒนาโปรแกรม Hello โดยคลิ๊กขวาที่แทป RESTfulDemo แล้วเลือกคำสั่ง New > Class
7. กำหนดค่า package เป็น com.rs และ name เป็น Hello
8. ปรับปรุงโปรแกรม Hello ดังนี้
package com.rs;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/hello")
public class Hello {
// This method is called if TEXT_PLAIN is request
@GET
@Produces(MediaType.TEXT_PLAIN)
public String sayPlainTextHello() {
return "Hello Jersey";
}
// This method is called if XML is request
@GET
@Produces(MediaType.TEXT_XML)
public String sayXMLHello() {
Web Services Exercises www.imcinstitute.com IMC Institute
return "<?xml version="1.0"?>" + "<hello> Hello Jersey" +
"</hello>";
}
// This method is called if HTML is request
@GET
@Produces(MediaType.TEXT_HTML)
public String sayHtmlHello() {
return "<html> " + "<title>" + "Hello Jersey" + "</title>"
+ "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> ";
}
}
9. ปรับปรุงโปรแกรม web.xml ดังนี้
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
<display-name>RESTfulDemo</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-
class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-
class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.rs</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
10. ทำการรันโปรเจ็คโดยใช้คำสั่ง Run As > Run On Server
11. เรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser เป็น
http://localhost:8080/RESTfulDemo/rest/hello
การพัฒนาโปรแกรม RESTful Web Service Client
ขั้นตอนนี้จะเป็นการพัฒนาโปรแกรม RESTful Web Service Client เพื่อเรียกใช้ Hello Service โดย
มีขั้นตอนดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
25
1. สร้าง Java Project ที่ชื่อ RESTfulClient
2. ทำการกำหนดค่า Project Build Path ตามขั้นตอนแบบเดีัยวกับการพัฒนาโปรเจ็ค RESTfulDemo
3. สร้าง Java Class ที่ชื่อ ClientDemo และพัฒนาโปรแกรมดังนี้
package com.client;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class ClientDemo {
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
// Fluent interfaces
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_PLAIN).get(ClientResponse.c
lass)
.toString());
// Get plain text
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_PLAIN).get(String.class));
// Get XML
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_XML).get(String.class));
// The HTML
System.out.println(service.path("rest").path("hello")
.accept(MediaType.TEXT_HTML).get(String.class));
}
private static URI getBaseURI() {
return UriBuilder.fromUri(
"http://localhost:8080/RESTfulDemo/").build();
}
}
4. ทำการรันโปรแกรม ClientDemo จะได้ผลลัพธ์ดังนี้
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 6: RESTful Web Services and JAXB
JAX-RS สนับสนุนการสร้าง XML และ JSON ผ่าน JAXB แบบฝึกหัดนี้จะสาธิตการพัฒนา RESTful
Web Services ในการสร้างข้อมูลเก็บลงใน Web Services
การพัฒนา DataWSPrj
ทำการสร้าง Dynamic Web Project ขึ้นใหม่ โดยมีขั้นตอนการพัฒนาดังนี้
1. เลือกเมนู File > New > Project > Web > Dynamic Web Project
2. กำหนด Project Name เป็น DataWSPrj แล้วเลือก Target Runtime เป็น Apache Tomcat 7
กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Next
3. ทำการ copy ไฟล์ Jersey JARs และกำหนดค่า Project Build Path
4. ทำการพัฒนาโปรแกรมต่างดัง source code ตาม Listing ที่ 5 - 7
5. ทำการรันโปรเจ็คโดยใช้คำสั่ง Run As > Run On Server
6. เรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser เป็น
http://localhost:8080/DataWSPrj/rest/todo
Listing ที่ 5 โปรแกรม Todo.java
package com.rest.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Todo {
private String summary;
private String description;
public String getSummary() {
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Java Web Services Exercises Thanachart and Thanisa Numnonda
27
Listing ที่ 6 โปรแกรม ToDoResource.java
package com.rest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import com.rest.model.Todo;
@Path("/todo")
public class ToDoResource {
// This method is called if XMLis request
@GET
@Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public Todo getXML() {
Todo todo = new Todo();
todo.setSummary("This is my first todo");
todo.setDescription("This is my first todo");
return todo;
}
// This can be used to test the integration with the browser
@GET
@Produces({ MediaType.TEXT_XML })
public Todo getHTML() {
Todo todo = new Todo();
todo.setSummary("This is my first todo");
todo.setDescription("This is my first todo");
return todo;
}
}
Listing ที่ 7 โปรแกรม web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>DataWS</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-
class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
Web Services Exercises www.imcinstitute.com IMC Institute
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
การพัฒนา Web Service Client
ทำการสร้าง Java Project ขึ้นใหม่ชื่อ DataWSClient กำหนด Java Bulid Path ให้มีwa]N Jersey
JARS และพัฒนา Source code ดัง Listing ที่ 8
Listing ที่ 8 โปรแกรม web.xml
package com.rest.client;
import java.net.URI;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.config.ClientConfig;
import com.sun.jersey.api.client.config.DefaultClientConfig;
public class Test {
public static void main(String[] args) {
ClientConfig config = new DefaultClientConfig();
Client client = Client.create(config);
WebResource service = client.resource(getBaseURI());
// Get XML
System.out.println(service.path("rest").path("todo").accept(MediaType.TEXT_XML).
get(String.class));
// Get XML for application
System.out.println(service.path("rest").path("todo").accept(MediaType.APPLICATIO
N_XML).get(String.class));
}
private static URI getBaseURI() {
return UriBuilder.fromUri("http://localhost:8080/DataWSPrj").build();
}
}
ทดลองรันโปรแกรมจะได้ผลลัพธ์ดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
29
Exercise 7: CRUD RESTful webservice
แบบฝึกหัดนี้เป็นการพัฒนา RESTful Web Services ที่สามารถจัดการข้อมูลโดยใช้โอเปอร์เรชั่น
CRUD (Create, Read, Update, Delete) โดยให้สร้าง Dynamic Web Project และพัฒนาโปรแกรมที่มี source
code ต่างๆตาม Listing ที่ 9 - 14 และเราสามารถรันโปรแกรมได้โดยการเรียก url ต่างๆดังนี้
• http://localhost:8080/CRUDRestWS/rest/todos
• http://localhost:8080/CRUDRestWS/rest/todos/count
• http://localhost:8080/CRUDRestWS/rest/todos/1
Listing ที่ 9 โปรแกรม Todo.java
package com.rest.model;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Todo {
private String id;
private String summary;
private String description;
public Todo(){
}
public Todo (String id, String summary){
this.id = id;
this.summary = summary;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getSummary() {
Web Services Exercises www.imcinstitute.com IMC Institute
return summary;
}
public void setSummary(String summary) {
this.summary = summary;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
Listing ที่ 10 โปรแกรม TodoDao.java
package com.rest.dao;
import java.util.HashMap;
import java.util.Map;
import com.rest.model.Todo;
public enum TodoDao {
instance;
private Map<String, Todo> contentProvider = new HashMap<String, Todo>();
private TodoDao() {
Todo todo = new Todo("1", "Learn REST");
todo.setDescription("Read
http://www.imcinstitute.com/tutorials/REST/article.html");
contentProvider.put("1", todo);
todo = new Todo("2", "Do something");
todo.setDescription("Read complete http://www.imcinstitute.com");
contentProvider.put("2", todo);
}
public Map<String, Todo> getModel(){
return contentProvider;
}
Java Web Services Exercises Thanachart and Thanisa Numnonda
31
}
Listing ที่ 11 โปรแกรม TodoResource.java
package com.rest.resources;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import javax.xml.bind.JAXBElement;
import com.rest.dao.TodoDao;
import com.rest.model.Todo;
public class TodoResource {
@Context
UriInfo uriInfo;
@Context
Request request;
String id;
public TodoResource(UriInfo uriInfo, Request request, String id) {
this.uriInfo = uriInfo;
this.request = request;
this.id = id;
}
//Application integration
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Todo getTodo() {
Todo todo = TodoDao.instance.getModel().get(id);
Web Services Exercises www.imcinstitute.com IMC Institute
if(todo==null)
throw new RuntimeException("Get: Todo with " + id + " not found");
return todo;
}
// for the browser
@GET
@Produces(MediaType.TEXT_XML)
public Todo getTodoHTML() {
Todo todo = TodoDao.instance.getModel().get(id);
if(todo==null)
throw new RuntimeException("Get: Todo with " + id + " not found");
return todo;
}
@PUT
@Consumes(MediaType.APPLICATION_XML)
public Response putTodo(JAXBElement<Todo> todo) {
Todo c = todo.getValue();
return putAndGetResponse(c);
}
@DELETE
public void deleteTodo() {
Todo c = TodoDao.instance.getModel().remove(id);
if(c==null)
throw new RuntimeException("Delete: Todo with " + id + " not found");
}
private Response putAndGetResponse(Todo todo) {
Response res;
if(TodoDao.instance.getModel().containsKey(todo.getId())) {
res = Response.noContent().build();
} else {
res = Response.created(uriInfo.getAbsolutePath()).build();
}
TodoDao.instance.getModel().put(todo.getId(), todo);
return res;
}
}
Java Web Services Exercises Thanachart and Thanisa Numnonda
33
Listing ที่ 12 โปรแกรม Todo2Resource.java
package com.rest.resources;
import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.Consumes;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.UriInfo;
import com.rest.dao.TodoDao;
import com.rest.model.Todo;
// Will map the resource to the URL todos
@Path("/todos")
public class TodosResource {
// Allows to insert contextual objects into the class,
// e.g. ServletContext, Request, Response, UriInfo
@Context
UriInfo uriInfo;
@Context
Request request;
Web Services Exercises www.imcinstitute.com IMC Institute
// Return the list of todos to the user in the browser
@GET
@Produces(MediaType.TEXT_XML)
public List<Todo> getTodosBrowser() {
List<Todo> todos = new ArrayList<Todo>();
todos.addAll(TodoDao.instance.getModel().values());
return todos;
}
// Return the list of todos for applications
@GET
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public List<Todo> getTodos() {
List<Todo> todos = new ArrayList<Todo>();
todos.addAll(TodoDao.instance.getModel().values());
return todos;
}
// retuns the number of todos
// use http://localhost:8080/de.vogella.jersey.todo/rest/todos/count
// to get the total number of records
@GET
@Path("count")
@Produces(MediaType.TEXT_PLAIN)
public String getCount() {
int count = TodoDao.instance.getModel().size();
return String.valueOf(count);
}
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void newTodo(@FormParam("id") String id,
@FormParam("summary") String summary,
@FormParam("description") String description,
@Context HttpServletResponse servletResponse) throws IOException {
Todo todo = new Todo(id,summary);
if (description!=null){
todo.setDescription(description);
Java Web Services Exercises Thanachart and Thanisa Numnonda
35
}
TodoDao.instance.getModel().put(id, todo);
servletResponse.sendRedirect("../create_todo.html");
}
// Defines that the next path parameter after todos is
// treated as a parameter and passed to the TodoResources
// Allows to type http://localhost:8080/de.vogella.jersey.todo/rest/todos/1
// 1 will be treaded as parameter todo and passed to TodoResource
@Path("{todo}")
public TodoResource getTodo(@PathParam("todo") String id) {
return new TodoResource(uriInfo, request, id);
}
}
Listing ที่ 13 โปรแกรม create_todo.html
<!DOCTYPE html>
<html>
<head>
<title>Form to create a new resource</title>
</head>
<body>
<form action="../CRUDRestWS/rest/todos" method="POST">
<label for="id">ID</label>
<input name="id" />
<br/>
<label for="summary">Summary</label>
<input name="summary" />
<br/>
Description:
<TEXTAREA NAME="description" COLS=40 ROWS=6></TEXTAREA>
<br/>
<input type="submit" value="Submit" />
</form>
</body>
</html>
Web Services Exercises www.imcinstitute.com IMC Institute
Listing ที่ 14 โปรแกรม web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<display-name>CRUDRestWS</display-name>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-
class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.rest.resources</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
Java Web Services Exercises Thanachart and Thanisa Numnonda
37
Exercise 8: Java Web Services Using NetBeans
แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE โดยใช้ชุดคำสั่ง JAX-WS ซึ่งจะ
เป็นการพัฒนา Web Services Provider บน Java EE Server ทั้งนี้ชุดคำสั่ง JAX-WS จะช่วยทำให้การสร้าง
และเรียกใช้ Web Services ด้วยภาษา Java เป็นไปได้ง่ายขึ้น
การพัฒนา Web Services จะแบ่งได้เป็นสองส่วนคือ Web Service Requester (Client) และ Web
Service Provider (Server) ซึ่งการพัฒนา Web Service Provider สามารถทำได้ 2 วิธีคือ
3. Web Services ที่รันบน Web Server โดยใช้ Java Servlet
4. Web Services ที่รันบน Application Server โดยใช้ Session Bean
แบบฝึกหัดนี้จะแสดงขั้นตอนการใช้ NetBeans สร้าง Web Service ที่ชื่อ calculateTax โดยใช้ Servlet
ซึ่งจะรันอยู่บน GlassFish V2.1 Server เพื่อแสดง Web Services การส่ง SOAP message และ WSDL ของ
Services
การพัฒนา calculateTax Web Service
แบบฝึกหัดนี้จะสร้าง Web Application Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน
การพัฒนาดังนี้
1. เลือกเมนู File > New Project
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และ Projects เป็น Web
Application แล้วกด Next
3. กำหนด Project Name เป็น TaxWSDemo แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ
เก็บ Project ไว้
4. จากนั้นเลือก Server เป็น GlassFish V3.1.2 กำหนด Jave EE Version: เป็น Java EE 6 แล้วกด
Finish
5. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง New > Other… ให้เลือก Categories เป็น Web
Services และเลือก File Types เป็น Web Service แล้วกด Next
6. ในไดอะล็อก New Web Service กำหนด Web Service Name: เป็น TaxService และ Package:
เป็น ws แล้วกด Finish
7. โปรแกรมจะประกาศ Web Services ที่ชื่อ TaxService ในโหนด Web Services ของหน้าต่าง Project
และหน้าต่าง Editor จะแสดงไฟล์ที่ชื่อ TaxService.java
8. ในหน้าต่าง Projects ขยายโหนด TaxWSDemo > Web Services แล้วคลิ๊กขวาที่โหนด TaxService
เลือกคำสั่ง Add Operation…
Web Services Exercises www.imcinstitute.com IMC Institute
9. ในไดอะล็อก Add Operation กำหนด Method เป็น calculateTax ชนิดของ Return Type เป็น
double และกดปุ่ม Add เพื่อเพิ่ม Input parameter โดยกำหนด Name เป็น income และ Type เป็น
ชนิด double แล้วกด OK
10. คลิ๊กที่แทป Source ของ TaxService.java และปรับปรุงเมธอด calculateTax ดังนี้
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService()
public class TaxService {
@WebMethod
public double calculateTax(@WebParam(name = "income") double income) {
if (income < 70000) {
return 0;
} else if (income < 100000) {
return (income - 70000) * 0.05;
} else if (income < 500000) {
return (income - 100000) * 0.1 + 3500;
} else {
return (income - 500000) * 0.2 + 43500;
}
}
}
11. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Clean and Build จากนั้นคลิ๊กขวาที่โหนด
TaxWSDemo อีกครั้ง แล้วเลือก Deploy
การทดสอบ Web Service
1. คลิ๊กขวาที่ TaxService ใน Web Services แล้วเลือก Test Web Service ดังแสดงในรูปที่ 1
รูปที่ 1 แสดงวิธีการทดสอบ Web Service ใน Netbeans
Java Web Services Exercises Thanachart and Thanisa Numnonda
39
2. โปรแกรมจะแสด
3. หน้าจอเพื่อให้เราป้อนข้อมูลอินพุต ซึ่งคือจำนวนเงินที่ต้องการคำนวณภาษี ในที่นี้จะใส่ตัวเลขเป็น
730000 และกดปุ่ม calculateTax ดังแสดงในรูปที่ 2
รูปที่ 2 แสดงหน้าต่างสำหรับให้ทดสอบเรียก Web Service
4. โปรแกรมจะเรียกใช้ Web Services และจะแสดงผลลัพธ์ที่ได้ พร้อมทั้งแสดงค่า SOAP Request และ
SOAP Response ดังแสดงตัวอย่างในรูปที่ 3
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 3 แสดงผลลัพธ์ที่ได้จากการเรียกใช้ Web Service พร้อมทั้ง SOAP Request และ SOAP Response
5. หลังจากกด Back กลับมาที่หน้าเดิมแล้ว เราสามารถที่จะดูรายละเอียดของไฟล์ WSDL ของ Web
Service นี้ได้ โดยการคลิ๊กเลือกที่ WSDL File ดังแสดงในรูปที่ 4
รูปที่ 4 แสดงการคลิ๊กเพื่อเรียกดูรายละเอียดของไฟล์ WSDL
Java Web Services Exercises Thanachart and Thanisa Numnonda
41
6. โปรแกรมจะทำการเรียก url ชื่อ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL
และจะได้ผลลัพธ์ดังแสดงในรูปที่ 5
รูปที่ 5 แสดงรายละเอียดของ WSDL
7. โปรแกรม Web Service จะถูกติดตั้งบน GlassFish V3.1.2 สามารถดูได้จากการคลิ๊กขวาที่ GlassFish
Server 3.1 ในแทป Services และเลือก View Admin Console ดังแสดงในรูปที่ 6 หรือโดยการเปิด
Web Browser และเรียก url ที่ http://localhost:4848 โดยมี user เป็น admin และ password
เป็น adminadmin
รูปที่ 6 แสดงการเรียกดู Admin Console
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 9: การเชื่อมต่อกับ MySQL Database
แบบฝึกหัดนี้เป็นการเริ่มต้นใช้งาน Database Tool เพื่อเชื่อมต่อกับ Table test ในฐานข้อมูล MySQL
สำหรับเป็นตัวช่วยให้ทำงานได้เร็วขึ้น เช่นปกติถ้าจะ create table ก็ต้องเขียน SQL แต่ Tool นี้มี GUI มาช่วย
ทำให้ลดข้อผิดพลาด และ สะดวกในการทำงานมากขึ้น ทั้งนี้การทำแบบฝึกหัดนี้จะต้องมีการ download และ
ติดตั้งโปรแกรม MySQL และ MySQL Workbench โดยสามารถทำการ download ได้จากเว็บ
http://dev.mysql.com/
การเชื่อมต่อ MySQL โดยโปรแกรม MySQL Workbench
1. ให้เปิดโปรแกรม MySQL Workbench ดังรูปที่ 1 จากนั้นทำตามขั้นตอนดังนี้
รูปที่ 1 การเรียกใช้งาน Program MySQL Workbench
2. ดับเบิ้ลคลิ๊กที่ Connection Name ใส่ Password ที่กำหนดไว้ในตอนติดตั้งโปรแกรม MySQL ซึ่งจะมี
ค่าเป็น root ดังรูปที่ 2
รูปที่ 2 การแสดงการเชื่อมต่อ Connection เพื่อเข้าไปจัดการ Database
Java Web Services Exercises Thanachart and Thanisa Numnonda
43
การสร้างตาราง books
ขั้นตอนนี้จะเป็นการสร้าง Table ที่ชื่อ books โดยให้อยู่ภายใต้ Schema ที่ชื่อ test โดย Table นี้กำหนดให้มี
Column ต่างๆ ดังตารางที่ 1
ตารางที่ 1 Table books
ชื่อ Column ชนิด ขนาด Primary Key Index
isbn varchar 20 Y Y
title varchar 70 - -
author varchar 50 - -
price float - - -
เราจะใช้โปรแกรม MySQL WorkBench ในการที่จะสร้าง Table นี้โดยมีขั้นตอนต่างๆ ดังนี้
1. คลิ๊กที่ icon ชื่อ Add Table... แล้วใส่ชื่อ table และ ชื่อ field ตามตารางที่ 1 ดังรูปที่ 3 แล้วกดปุ่ม Ap-
ply
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 3 การเลือกคำสั่งสร้างตาราง
2. หรือใช้คำสั่ง SQL Statement ก็ได้ โดยนำไปใส่ที่หน้าต่าง Query1 แล้ว กด icon สายฟ้าสี
เหลืองเพื่อรัน
CREATE TABLE BOOKS (
ISBN VARCHAR(20) NOT NULL ,
TITLE VARCHAR(70) NULL ,
AUTHOR VARCHAR(50) NULL ,
PRICE FLOAT NULL ,
PRIMARY KEY (ISBN) );
3. เปิด Tables books จะเห็น Column ต่างๆ ดังรูปที่ 4
Java Web Services Exercises Thanachart and Thanisa Numnonda
45
รูปที่ 4 ผลลัพธ์จากการสร้างตาราง
การใช้คำสั่ง SQL ใน MySQL WorkBench
ภายหลังจากที่มีการสร้าง Table ที่ชื่อ books เราสามารถใช้คำสั่ง SQL เพื่อที่จะติดต่อกับฐานข้อมูล
ในที่นี้จะแสดงการเพิ่มข้อมูลลงใน Table โดยมีขั้นตอนต่างๆดังนี้
1. ดับเบิ้ลคลิ๊กที่ Table books ด้านขวา จะได้ SQL Editor ให้ป้อนคำสั่ง SQL เป็น
INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00);
INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ;
Web Services Exercises www.imcinstitute.com IMC Institute
แล้ว คลิ๊กที่ icon สายฟ้าสีเหลือง ดังรูปที่ 5 หรือกด Ctrl+Shift+Enter เพื่อรันคำสั่ง SQL ทั้งหมด
รูปที่ 5 การ Execute คำสั่งเพิ่มข้อมูลในตาราง
2. เราสามารถที่จะดูข้อมูลที่ป้อนเข้าไปได้
โดยการคลิ๊กขวาที่ Table ที่ชื่อ books เแล้วลือก Select Rows – Limit 1000 ดังรูปที่ 6
รูปที่ 6 การเรียกดูข้อมูลใน Table ชื่อ books
3. เมื่อติดตั้ง Database แล้วเราสามารถที่จะใช้ NetBeans เพื่อเชื่อมต่อกับ Database ได้โดยสำหรับ
Netbeans 7.3 ให้เลือกที่แทป Services จะเห็น MySQL Driver ที่มีมาให้แล้ว ซึ่งถ้าขยายแทบ Data-
bases > Drivers จะเห็น Driver ที่ชื่อ MySQL ให้ทำการคลิ๊กขวา แล้วเลือก Connect Using
4. ให้ทำการระบุค่าของ Host: และ Port: เป็น localhost และ 3306 (กรณีที่ไม่ได้เปลี่ยนแปลง port ตอน
ติดตั้ง) ตามลำดับ
5. จากนั้นให้ระบุฐานข้อมูลที่ต้องการติดต่อ (ในที่นี้ระบุ test)
6. สำหรับ User Name: และ Password: ให้ใส่ค่าตามที่กำหนดไว้ในตอนติดตั้งโปรแกรม MySQL ซึ่งในที่
นี้จะมีค่าเป็น root และ root โดยไดอะล็อกจะแสดงผลได้ดังแสดงในรูปที่ 7
Java Web Services Exercises Thanachart and Thanisa Numnonda
47
รูปที่ 7 แสดงการกำหนดค่าให้กับ Database Connection
7. กด OK จากนั้นในหน้าต่าง Runtime ถ้าขยายแทบ Database จะเห็น Connection ใหม่ดังแสดงในรูป
ที่ 8
รูปที่ 8 แสดง Connection ไปยัง test Database
Web Services Exercises www.imcinstitute.com IMC Institute
5. ถ้าขยายแทบ jdbc:mysql://localhost:3306/test จะเห็นรายการ test > Tables > books คลิ๊กขวาแล้ว
เลือก View Data... ดังแสดงในรูปที่ 9
รูปที่ 9 แสดงการเลือกเพื่อแสดงข้อมูลในตาราง books
6. จะเห็นข้อมูลที่อยู่ในตาราง books ดังแสดงในรูปที่ 10
รูปที่ 10 แสดงข้อมูลในตาราง Books
Java Web Services Exercises Thanachart and Thanisa Numnonda
49
Exercise 10: Java Web Services from Session Bean(1)
แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรม Enterprise Java Bean (EJB) โดยจะเป็นการพัฒนา
โปรแกรมบน GlassFish V3.1.2 เพื่อติดต่อกับฐานข้อมูล MySQL โปรแกรม EJB บน Application Server จะ
ประกอบด้วย Entity Class ที่เชื่อมโยงกับตารางที่ชื่อ books และ Session Bean เพื่อเป็นโปรแกรมที่สามารถ
เรียกใช้ Entity Class ในการจัดการเพิ่ม แก้ไข และ ลบข้อมูลของตาราง books ได้
ขั้นตอนในการพัฒนาโปรแกรม
1. สร้าง Enterprise Application Project
2. พัฒนา Entity Class
3. พัฒนา Session Bean
4. พัฒนา Web Application
โดยขั้นตอนแรกเราจะต้องนำ MySQL Driver ไปใส่ไว้ใน GlassFish Server ก่อน เพื่อทำให้ GlassFish Server
สามารถที่จะรันโปรแกรมที่มีการติดต่อกับ MySQL Database ได้ ให้ทำการดูตำแหน่งของ GlassFish จากใน
NetBeans ดังนี้
1. คลิ๊กที่ tab Services ใน NetBeans
2. คลิ๊กขวาที่ GlassFish Server 3.1.2 ที่อยู่ใน Servers แล้วเลือก Properties ดังแสดงในรูปที่ 1
รูปที่ 1 แสดงการหาตำแหน่งของ GlassFish
3. จากนั้นให้ดูตำแหน่งของ domain ใน GlassFish Server จาก Domains Folder: ดังแสดงในรูปที่ 2
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 2 แสดงตำแหน่งของ Domain ใน GlassFish
4. ไปยังตำแหน่งของ Domain ใน GlassFish จากนั้นให้นำไฟล์ mysql-connector-java-5.1.19-bin.jar
(MySQL Driver) ไปใส่ไว้ใน folder lib ดังแสดงในรูปที่ 3
รูปที่ 3 แสดงการใส่ MySQL Driver ภายใน Domain ของ GlassFish
5. Restart GlassFish โดยคลิ๊กขวาตรง GlassFish ที่อยู่ใน NetBeans แล้วเลือก Restart ดังแสดงในรูป
ที่ 4
Java Web Services Exercises Thanachart and Thanisa Numnonda
51
รูปที่ 4 แสดงการ Restart GlassFish Server
การสร้าง Enterprise Application Project
เราจะกำหนดให้โปรแกรมนี้เป็นโปรแกม Enterprise Application ซึ่งมีทั้ง EJB Module และ Web
Module ขั้นตอนแรกจะเป็นการสร้าง Project ใหม่ขึ้นมาใน NetBeans ซึ่งมีขั้นตอนดังนี้
1. เลือกเมนู File => New Project
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java EE และเลือก Enterprise เป็น Enterprise
Application แล้วกด Next
3. กำหนด Project Name เป็น BookApp แล้วเลือก Project Location เป็น folder ที่เราต้องการจะเก็บ
project ไว้ กด Next
4. จากนั้นเลือก Server เป็น GlassFish V3.1.2 โดยกำหนด Jave EE Version: เป็น Java EE 6 และให้
เลือกช่อง Create EJB Module: และ Create Web Application Module: ดังแสดงในรูปที่ 5
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 5 แสดงการสร้างโปรเจ็ค Enterprise Application
5. กด Finish
การพัฒนาโปรแกรม Entity Class
โปรแกรม EJB 3.0 จะใช้คลาสประเภท Entity เพื่อเป็นออปเจ็คที่สอดคล้องกับตารางในฐานข้อมูล ในที่
นี้เราจะสร้าง Entity Class ที่ชื่อ Books.java จากตารางที่ชื่อ books ซึ่งมีการสร้างมาก่อนแล้ว โดยมีขั้นตอน
การพัฒนาโปรแกรมนี้มีดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-ejb จากนั้นเลือกคำสั่ง New > Other...
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity
Classes from Database แล้วกด Next
3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น New Data Source…
โดยใส่ชื่อ JNDI Name: jdbc/test และเลือกเชื่อมต่อไปยังฐานข้อมูล test ดังแสดงในรูปที่ 6
Java Web Services Exercises Thanachart and Thanisa Numnonda
53
รูปที่ 6 แสดงการสร้าง Data Source
4. กด OK จากนั้นกด Add All >> เพื่อเลือกตารางที่ต้องการนำมาสร้าง Entity Class ซึ่งจะได้ Selected
Tables: เป็น books กด Next ดังแสดงในรูปที่ 7
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 7 แสดงการสร้าง Entity Class จาก Data Source
5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity และให้ตรวจสอบว่า Crate Persistence Unit ได้ถูก
เลือกไว้ ซึ่ง Persistence Unit จะเป็นตัวกำหนดให้ EJB Container ของ Application Server รู้ได้ว่า
Entity Class จะถูกควบคุมด้วย Entity Manager ตัวใด และเป็นตัวกำหนด Data Source ที่จะใช้กับ
Entity Manager นี้
6. ไม่จำเป็นต้องเปลี่ยนค่าใดๆ จากนั้นกด Next ดังแสดงในรูปที่ 8
Java Web Services Exercises Thanachart and Thanisa Numnonda
55
รูปที่ 8 แสดงการสร้าง Entity Class
7. เมื่อกด Finish โปรแกรมจะสร้างไฟล์ที่ชื่อ persistence.xml ใน package: Configuration Files และ
สร้างไฟล์ที่ชื่อ Books.java ใน package: entity
การพัฒนาโปรแกรม Session Bean
โปรแกรม EJB จะใช้ Session Bean ในการติดต่อกับโปรแกรมอื่นๆ ภายนอก EJB Container โดย
โปรแกรมเหล่านั้นจะติดต่อกับ Entity Class โดยผ่าน Session Bean แบบฝึกหัดนี้จะสร้าง Session Bean ที่
ชื่อ BooksFacade.java ที่มี Business method ในการสร้าง แก้ไข ลบ และเรียกดูข้อมูลของตารางที่ชื่อ books
โดยใช้ Entity Class ที่ชื่อ Books.java และ EntityManager โดยจะมีขั้นตอนการพัฒนาดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-ejb จากนั้นเลือกคำสั่ง New > Other…
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Session
Beans for Entity Classes แล้วกด Next
3. จากนั้นกด Add All >> แล้วกด Next
4. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น sb และเลือก local ดังแสดงในรูปที่ 9 แล้วกด Finish
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 9 แสดงการสร้าง Session Bean
5. โปรแกรมจะสร้างไฟล์ที่ชื่อ BooksFacade.java และ BooksFacadeLocal.java ใน package ที่ชื่อ sb
การพัฒนาโปรแกรม Web Application
โปรแกรม EJB จะเป็นส่วนของ Business Logic เท่านั้น การพัฒนาส่วนของ Presentation จะต้องใช้
โปรแกรม Web Application หรือ Java SE แบบฝึกหัดนี้จะพัฒนาโปรแกรม Web Application เพื่อให้ผู้ใช้ป้อน
isbn ของหนังสือในหน้าเว็บ findBook.html แล้วโปรแกรมจะเรียกโปรแกรม Servlet ที่ชื่อ ShowBook.java เพื่อ
แสดงรายละเอียดของหนังสือดังกล่าวออกมา โดยมีขั้นตอนการพัฒนาดังนี้
1. การพัฒนาโปรแกรม findBook.html
โปรแกรม findBook.html เป็นเว็บเพจที่ใช้แสดงฟอร์มสำหรับให้ผู้ใช้ป้อน isbn ของหนังสือ โดยมีขั้น
ตอนการพัฒนาดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-war จากนั้นเลือกคำสั่ง New > Other…
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web เลือก File Types: เป็น HTML แล้วกด Next
3. กำหนด HTML File Name: เป็น findBook แล้วกด Finish
4. เขียน source code ของไฟล์ findBook.html ตาม Listing ที่ 1 โดยเราสามารถที่จะลาก icon ประเภท
HTML Forms ที่อยู่ในหน้าต่าง Palette เพื่อสามารถให้เขียนโปรแกรมได้ง่ายขึ้น
Java Web Services Exercises Thanachart and Thanisa Numnonda
57
Listing 1 โปรแกรม findBook.html
<html>
<head>
<title></title>
</head>
<body>
<form action="ShowBook" method="POST">
<h2>Search Book from ISBN </h2>
Enter ISBN <input type="text" name="isbn" value="" />
<input type="submit" value="Find" />
</form>
</body>
</html>
2. การพัฒนาโปรแกรม ShowBook.java
โปรแกรม ShowBook.java เป็นโปรแกรม Java Servlet ที่จะอ่านหมายเลข ISBN ที่ผู้ใช้ป้อนมาจาก
หน้า findBook.html และจะเรียกเมธอด find() ของ session bean ที่ชื่อ BooksFacade เพื่อแสดงรายละเอียด
ของหนังสือ โดยมีขั้นตอนการพัฒนาโปรแกรมดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-war จากนั้นเลือกคำสั่ง New > Other...
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web เลือก File Types: เป็น Servlet แล้วกด Next
3. กำหนด File Name: เป็น ShowBook และ Package: เป็น servlets กด Next แล้วกด Finish
4. ในหน้าต่าง Editor ให้คลิ๊กขวาภายในเมธอด processRequest แล้วเลือก Insert Code… > Call En-
terprise Bean…
5. ในไดอะล็อก Call Enterprise Bean เลือก BooksFacade ที่อยู่ใน BookApp-ejb แล้วกด OK
6. โปรแกรมจะเพิ่ม Source code ในการเรียก EJB ดังนี้
@EJB
private BooksFacadeLocal booksFacade;
7. ให้ปรับปรุง Source code ในเมธอด processRequest ดังนี้
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ShowBook</title>");
Web Services Exercises www.imcinstitute.com IMC Institute
out.println("</head>");
out.println("<body>");
String isbn = request.getParameter("isbn");
Books book = booksFacade.find(isbn);
out.println("Title: " + book.getTitle()+ "<BR>");
out.println("Author: " + book.getAuthor() + "<BR>");
out.println("Price: " + book.getPrice() + "<BR>");
out.println("</body>");
out.println("</html>");
out.close();
}
9. คลิ๊กขวาแล้วเลือก Fix Imports เพื่อทำการ import คลาสต่างๆ แล้ว Save โปรแกรม
การทดสอบโปรแกรม
1. ทำการคลิ๊กขวาตรง BookApp เพื่อทำการ Clean and Build
2. Run โปรแกรม BookApp (ไม่ใช่ BookApp-ejb หรือ BookApp-war)
3. เลือก URL ของ Web Browser เป็น http://localhost:8080/BookApp-war/findBook.html ให้เราทดลอง
ใส่ข้อมูล
4. เมื่อกดปุ่ม Find โปรแกรมก็จะแสดงรายละเอียดของหนังสือดังแสดงในรูปที่ 10
รูปที่ 10 แสดงตัวอย่างผลลัพธ์ที่ได้จากการรันโปรแกรม
Java Web Services Exercises Thanachart and Thanisa Numnonda
59
Exercise 11: Java Web Services from Session Bean (2)
แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE ซึ่งจะเป็นการพัฒนาบน
Server ที่รันบน Java EE โดยชุดคำสั่ง JAX-WS ซึ่งในกรณีนี้จะแสดงขั้นตอนการใช้ NetBeans สร้าง Web
Services Method ที่ชื่อ findEmployeeDetails จาก Session Bean โดย Service นี้จะเป็นการค้นหาข้อมูลของ
employee จาก table ที่ชื่อ employees และ departments ในฐานข้อมูล MySQL ซึ่งมีขั้นตอนในการพัฒนา
โปรแกรมดังนี้
1. สร้าง Table ที่ชื่อ employees และ departments
2. สร้าง EJB Module
3. พัฒนาโปรแกรม Entity Class
4. พัฒนาโปรแกรม Session Bean
5. สร้าง Web Application
1. การสร้าง Table ที่ชื่อ employees และ departments
ขั้นตอนแรกจะเป็นการสร้าง table โดยใช้โปรแกรม NetBeans ให้ทำการคัดลอก script ต่อไปนี้ แล้วใส่
ใน SQL Command Editor ของ NetBeans จากนั้นให้ทำการ Run SQL ดังแสดงในรูปที่ 1
create table `test`.DEPARTMENTS
(
DEPARTMENT_ID DECIMAL(4) not null primary key,
DEPARTMENT_NAME VARCHAR(30) not null
) ENGINE=INNODB;
insert into departments values(90,'Executive');
create table `test`.EMPLOYEES
(
EMPLOYEE_ID DECIMAL(6) not null primary key,
FIRST_NAME VARCHAR(20),
LAST_NAME VARCHAR(25) not null,
DEPARTMENT_ID DECIMAL(4),
FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE
CASCADE
) ENGINE=INNODB;
insert into employees values(100,'Steven','King',90);
Web Services Exercises www.imcinstitute.com IMC Institute
insert into employees values(101,'Neena','Kochhar',90);
รูปที่ 1 แสดงการสร้าง Run SQL เพื่อสร้างตาราง
โดยเมื่อตรวจสอบดูใน tables ของ test จะพบ table ที่ชื่อ employees และ departments ดังแสดงในรูปที่ 2
รูปที่ 2 แสดงตารางที่ถูกสร้างขึ้นมา
การสร้าง EJB Module
1. เลือกเมนู File > New Project
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java EE และเลือก Enterprise เป็น EJB Mod-
ule ดังแสดงในรูปที่ 3 แล้วกด Next
Java Web Services Exercises Thanachart and Thanisa Numnonda
61
รูปที่ 3 แสดงการสร้าง EJB Module
3. กำหนด Project Name เป็น EmployeeWS แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ
เก็บไฟล์ไว้ แล้วกด Next
4. เลือก Server เป็น GlassFish V3.1.2 กำหนด Jave EE 6 แล้วกด Finish
การพัฒนา Employees and Departments Entity Classes
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWS จากนั้นเลือกคำสั่ง New > Other
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity Classes
from Database แล้วกด Next
3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น jdbc/test เพื่อเลือก
การเชื่อมต่อไปยังตาราง test ในฐานข้อมูล MySQL
4. จากนั้นให้เลือกไปที่ตาราง EMPLOYEES แล้วกด Add > และคงการเลือก Include Related Tables
ไว้ตาราง EMPLOYEES และ DEPARTMENTS จะถูกย้ายมาอยู่ใน Selected Tables: ดังแสดงในรูปที่
4 แล้วกด Next
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 4 แสดงการสร้าง Entity Class สำหรับ EMPLOYEES และ DEPARTMENTS
5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity ดังแสดงในรูปที่ 5 จากนั้นกด Next และ Finish
รูปที่ 5 แสดงการระบุ Package สำหรับ Entity Classs ที่สร้างขึ้นมา
Java Web Services Exercises Thanachart and Thanisa Numnonda
63
การพัฒนาโปรแกรม Session Bean
โปรแกรม NetBeans จะมี Wizard เพื่อสร้าง Session Bean จาก Entity Class เพื่อสร้าง Business method
ในการสร้าง แก้ไข ลบ และเรียกดูข้อมูลของ table ที่สอดคล้องกับ Entity Class โดยจะมีขั้นตอนการพัฒนาดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWS จากนั้นเลือกคำสั่ง New > Other...
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Session
Beans for Entity Classes แล้วกด Next
3. ในไดอะล็อก New Session Beans for Entity Classes กด Add All >> แล้วคงการเลือก Include Ref-
erenced Class ไว้ ดังแสดงในรูปที่ 6 จากนั้นกด Next
รูปที่ 6 แสดงการสร้าง Session Beans For Entity Classes
4. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น sb และเลือก local ดังแสดงในรูปที่ 7 แล้วกด Finish
Web Services Exercises www.imcinstitute.com IMC Institute
รูปที่ 7 แสดงการสร้าง Session Bean
ซึ่งเราจะได้ Entity Class ที่ชื่อ Employees, Departments และ Session Bean ที่ชื่อ AbstractFacade, Em-
ployeesFacade, EmployeesFacadeLocal โดยเมื่อทำการ Clean and Build โปรเจ็คแล้ว จะมีโครงสร้างของ
โปรเจ็ค ดังแสดงในรูปที่ 8
รูปที่ 8 แสดงโครงสร้างของโปรเจ็ค EmployeeWS ที่ถูกสร้างขึ้น
การพัฒนา Web Service Methods: findEmployeeDetails
ขั้นตอนนี้จะสร้าง Web Services Method ที่ชื่อ findEmployeeDetails ใน Session Bean ที่ชื่อ Em-
ployeesFacade.java ที่พัฒนาจากแบบฝึกหัด Enterprise Java Bean โดย Services นี้จะคืนค่า first_name,
last_name และ department_name ของ employee โดยการค้นหาจาก employee_id ที่ป้อนเข้ามา ซึ่งมีขั้น
ตอนการพัฒนาดังนี้
Java Web Services Exercises Thanachart and Thanisa Numnonda
65
1. เลือกไฟล์ EmployeesFacade.java แล้วคลิ๊กขวาเลือก Insert Code… > Add Business Method…
จากนั้นให้ทำการใส่ข้อมูลดังแสดงในรูปที่ 3
รูปที่ 3 แสดงการเพิ่มเมธอดใน Session Bean
2. เพิ่ม source code โดยเพิ่มคำสั่ง annotation เพื่อประกาศให้ session bean นี้เป็น Web Service และ
เมธอด findEmployeeDetails เป็น Web Services Method โดยมีคำสั่งดังนี้
@WebService
@Stateless
public class EmployeesFacade extends AbstractFacade<Employees> implements
EmployeesFacadeLocal {
@PersistenceContext(unitName = "EmployeeWSPU")
private EntityManager em;
protected EntityManager getEntityManager() {
return em;
}
public EmployeesFacade() {
Web Services Exercises www.imcinstitute.com IMC Institute
super(Employees.class);
}
@WebMethod
public List<String> findEmployeeDetails(int employee_id) {
ArrayList<String> result = new ArrayList<String>();
Employees employee = em.find(Employees.class, employee_id);
result.add("First name: " + employee.getFirstName());
result.add("Last name: " + employee.getLastName());
Departments department = employee.getDepartmentId();
result.add("Department name: " + department.getDepartmentName());
return result;
}
}
2. คลิ๊กขวาเลือก Fix Imports กด OK แล้วกดปุ่ม Save
3. ทำการ Clean and Build และ Deploy Project
4. จากนั้นให้คลิ๊กขวาที่ EmployeeFacade ใน Web Services แล้วเลือก Test Web Service
5. กด WSDL File ในหน้า Web Browser จากนั้นให้ทำการ copy URL ของ WSDL File ไว้ เช่น
http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL
การพัฒนาโปรแกรม Web Application เพื่อเรียกใช้ Web Service
ขั้นตอนนี้จะเป็นการพัฒนา Web Application บน Apache Tomcat เพื่อเรียกใช้ Web Service ที่ชื่อ
findEmployeeDetails โดยมีขั้นตอนการพัฒนาดังนี้
1. เลือกเมนู File > New Project..
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Web และ Projects เป็น Web Application แล้ว
กด Next
3. กำหนด Project Name เป็น EmployeeWSClient จากนั้นเลือก Server เป็น Apache Tomcat
7.0.14.0 กำหนด Jave EE Version: เป็น Java EE 6 แล้วกด Finish
4. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWSClient จากนั้นเลือกคำสั่ง New > Other..
Java Web Services Exercises Thanachart and Thanisa Numnonda
67
5. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web Services เลือก File Types: เป็น Web Ser-
vice Client แล้วกด Next
6. ในไดอะล็อก New Web Service Client เลือก WSDL URL: และใส่ค่า http://localhost:8080/Employ-
eesFacadeService/EmployeesFacade?WSDL
7. กด Finish โปรแกรมจะแสดง Web Service Reference โดยมี Service ชื่อ EmployeesFacade
8. คลิ๊กขวาที่โหนด EmployeeWSClient แล้วเลือก New > Servlet..
9. กำหนด Servlet Name: เป็น EmployeeServlet ใส่ใน Package: servlets กด Next
10. กำหนด URL Pattern(s): เป็น /findEmployee แล้วกด Finish
11. ในหน้าต่าง Projects ลากโหนด findEmployeeDetails ลงในไฟล์ EmployeeServlet.java ของหน้าต่าง
Editor โปรแกรมจะเพิ่ม source code ให้อัตโนมัติ ให้ปรับปรุง source code ในส่วนที่เรียกใช้ Web
Service ดังนี้
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String id = request.getParameter("id");
int employee_id = Integer.parseInt(id);
List<String> result = findEmployeeDetails(employee_id);
for (String s : result) {
out.print(s + "<BR>");
}
} finally {
out.close();
}
}
private static java.util.List<java.lang.String>
findEmployeeDetails(int arg0) {
sb.EmployeesFacadeService service = new
sb.EmployeesFacadeService();
sb.EmployeesFacade port = service.getEmployeesFacadePort();
return port.findEmployeeDetails(arg0);
}
Web Services Exercises www.imcinstitute.com IMC Institute
12. กดปุ่ม Save
การทดสอบโปรแกรม
1. ทำการ Build และ Deploy โปรเจ็ค EmployeeWSClient
2. Run โปรแกรม EmployeeServlet โดยให้ใส่ค่าของ URI เป็น /findEmployee?id=100 ดังแสดงในรูปที่
4 จะได้ผลลัพธ์ดังแสดงในรูปที่ 5
รูปที่ 4 แสดงการกำหนดค่า id
รูปที่ 5 แสดงผลลัพธ์ของ employee id=100
3. ทดลองเปลี่ยน URL ของ Web Browser เป็น
http://localhost:8084/EmployeeWSClient/findEmployee?id=101 จะได้ผลลัพธ์ดังแสดงในรูปที่ 6
Java Web Services Exercises Thanachart and Thanisa Numnonda
69
รูปที่ 6 แสดงแสดงผลลัพธ์ของ employee id=101
4. อาจทำการสร้างไฟล์ findEmployee.html เพื่อรับค่า employee id จากผู้ใช้ โดยกำหนดให้ findEmploy-
ee.html เรียกใช้ EmployeeServlet ซึ่งจะเรียกใช้ Web Service เพื่อแสดงผลลัพธ์อีกที
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 12: RESTful Web Services
แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม RESTful Web Services โดยใช้ชุดคำสั่ง JAX-RS และ
NetBeans เพื่อสร้าง Web Services ที่จะเรียกดูข้อมูลจากฐานข้อมูล MySQL ผ่านชุดคำสั่ง Java Persistence
API (JPA)
ขั้นตอนในการพัฒนาโปรแกรม
1. สร้าง Web Application Project
2. พัฒนา Entity Class
3. พัฒนา RESTful Web Service จาก Entity Class
4. ทดสอบ RESTful Web Service จาก Entity Class
1. การสร้าง Web Application Project
เราจะกำหนดให้โปรแกรมนี้เป็นโปรแกม Web Application ขั้นตอนแรกจะเป็นการสร้าง Project ใหม่
ขึ้นมาใน NetBeans ซึ่งมีขั้นตอนดังนี้
1. เลือกเมนู File > New Project
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และเลือก Project เป็น Web Applic-
ation แล้วกด Next
3. กำหนด Project Name เป็น RestfulWS แล้วเลือก Project Location เป็น Directory ที่เราต้องการจะ
เก็บ Project ไว้ กด Next
4. จากนั้นเลือก Server เป็น GlassFishV3.1 และ Java EE 6 แล้วกด Finish
2. การพัฒนา Entity Class
ขั้นตอนนี้จะเป็นการสร้าง Entity Class ที่ชื่อ Employees.java ซึ่งจะเป็นออปเจ็คที่สอดคล้องกับตาราง
ที่ชื่อ employees ใน Oracle โดยมีขั้นตอนการพัฒนาโปรแกรมดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง New > Other
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity
Classes from Database แล้วกด Next
Java Web Services Exercises Thanachart and Thanisa Numnonda
71
3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น jdbc/test
4. กด OK จากนั้นเลือกเฉพาะ books แล้วกด Add >
5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity และกด Finish
3. การพัฒนา Restful Web Service จาก Entity Class
ขั้นตอนนี้จะเป็นการพัฒนา Restful Web Services เพื่อให้สามารถติดต่อกับฐานข้อมูลโดยผ่าน Entity Class ที่
พัฒนาขึ้นได้ โดยจะมีขั้นตอนการพัฒนาดังนี้
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง New > Other
2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web Services เลือก File Types: เป็น RESTful
Web Services from Entity Classes แล้วกด Next
4. ในไดอะล็อก New RESTful Web Services from Entity Class กด Add All >> จะได้ผลลัพธ์ดังแสดง
ในรูปที่ 1 แล้วกด Next จากนั้นกด Finish
รูปที่ 1 การเลือก Entity Class สำหรับ RESTful Web Service
4. การทดสอบ RESTful Web Service จาก Entity Class
ขั้นตอนนี้จะเป็นการทดสอบ RESTful Web Services ที่พัฒนาขึ้นโดยจะมีขั้นตอนดังนี้
Web Services Exercises www.imcinstitute.com IMC Institute
1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง Test Restful Web
Services
2. โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ให้คลิ๊กที่โหนด entity.books และคลิ๊ก
ปุ่ม Test จะได้ผลลัพธ์ดังรูปที่ 2
รูปที่ 2 แสดงผลลัพธ์ของหนังสือทั้งหมดที่มีอยู่
3. ให้คลิ๊กที่ {id} และทดลองป้อนข้อมูล id เป็น 111 แล้วกดปุ่ม Test จะได้ผลลัพธ์ตัวอย่างดังรูปที่ 3
Java Web Services Exercises Thanachart and Thanisa Numnonda
73
รูปที่ 3 แสดงผลลัพธ์ของหนังสือที่มี id (isbn) เท่ากับ 111
4. ทดลองเปลี่ยน method เป็น DELETE เพื่อทดลองทำการลบข้อมูลออกจากตาราง books
Web Services Exercises www.imcinstitute.com IMC Institute
Exercise 13: การพัฒนาโปรแกรมเว็บเพื่อติดต่อฐาน
ข้อมูล MongoDB
แบบฝึกหัดนี้จะเป็นการพัฒนาโปรแกรม Web Application โดยใช้ Java Servlet เพื่อเชื่อมต่อกับ ฐาน
ข้อมูลที่เป็น NoSQL อย่าง MongoDB ซึ่งเป็นฐานข้อมูลที่เก็บข้อมูลแบบ Document ในรูปแบบของ JSON
และมีความสามารถในการเก็บข้อมูลขนาดใหญ่ได้
ขั้นตอนในการพัฒนาโปรแกรม
1. ติดตั้ง MongoDB
2. ทดลองใช้ MongoDB
3. เขียนโปรแกรม Java Servlet เพื่อเชื่อมต่อกับ MongoDB
1. การติดตั้ง MongoDB
โปรแกรมฐานข้อมูล MongoDB สามารถทำงานในระบบปฎิบัติการที่หลากหลายทั้ง Windows, Mac
OS หรือ Linux สำหรับบนระบบปฎิบัติการ Windows สามารถติดตั้งได้โดยการดาวน์โหลดไฟล์ Binary จาก
เว็บไซต์ http://www.mongodb.org/downloads ซึ่งเมื่อทำการดาวน์โหลดไฟล์ดังกล่าวแล้ว ให้ทำการ unzip
เก็บไฟล์ไว้ในไดเร็กทอรี่ที่ต้องการ โดยเราจะมีไฟล์ต่างๆ ดังรูปที่ 1
Java Web Services Exercises Thanachart and Thanisa Numnonda
75
รูปที่ 1 ไฟล์ไบนารี่ต่างๆ ของ MongoDB
ซึ่งไฟล์ที่สำคัญก็คือ
 mongod.exe ที่เป็น Database Server
 mongo.exe ที่เป็นหน้าจอของ admin
โดย Default MongoDB จะเก็บข้อมูลไว้ที่ไดเร็กทอรี่ datadb ซึ่งเราจะต้องไปสร้างไดเร็กทอรี่ดังกล่าว
ภายใต้ Drive C
2. การทดลองใช้ MongoDB
เราสามารถที่จะทดลองการใช้งาน MongoDB โดยการเปิดโปรแกรม Mongo.exe ซึ่งก็จะเป็นโปรแกรม
command shell ของ administrator และโดย Default ก็จะกำหนดใช้ฐานข้อมูลที่ชื่อ test ซึ่งเราสามารถที่จะ
แสดงฐานข้อมูลที่ใช้อยู่ได้ โดยการพิมพ์คำสั่ง
> db
Web Services Exercises www.imcinstitute.com IMC Institute
คำสั่งที่จะแสดงรายชื่อฐานข้อมูล (database) ทั้งหมดคือ
>show dbs
เราสามารถที่จะสร้างฐานข้อมูลใหม่ที่ชื่อว่า mydatabase โดยใช้คำสั่ง
>use mydatabase
คำสั่งที่จะแสดง Tables ทั้งหมดในฐานข้อมูลคือ
>show collections
และเราสามารถที่จะเรียกดูคำสั่งในการช่วยเหลือโดย
>help
สำหรับในตัวอย่างนี้เราจะทำการทดลองสร้างข้อมูลของหนังสือ สองเล่มดังนี้
> db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB",
price:1200})
และสามารถทำการเพิ่มข้อมูลได้โดยคำสั่งต่อไปนี้
> new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400}
> db.books.insert(new_book)
เราสามารถที่จะดูข้อมูลของหนังสือทั้งหมดได้จากคำสั่ง
> db.books.find()
ซึ่งก็จะได้ผลลัพธ์ดังนี้
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart",
"title" : "Introduction to MongoDB", "price" : 1200 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling",
"title" : "Java SE", "price" : 1400 }
Java Web Services Exercises Thanachart and Thanisa Numnonda
77
ทั้งนี้ id จะเป็น index ในการระบุหมายเลขของข้อมูล นอกจากนี้เราสามารถที่จะค้นหาข้อมูลสำหรับ
รายการใดๆ ได้เช่น การค้นหาตามชื่อผู้แต่ง
> db.books.find({author:"thanachart"})
หรืออาจต้องการค้นชื่อหนังสือที่มีคำว่า Mongo
> db.books.find({title:/Mongo/})
เราสามารถที่จะ update ข้อมูล เช่นต้องการเปลี่ยนราคาของหนังสือที่แต่งโดย thanachart เป็น 1300 โดยใช้คำ
สั่ง
> db.books.update({author:"thanachart"},{$set: {price:1300}})
เราจะลองทำการเพิ่ม comment ของหนังสือเช่นมีผู้อ่านที่ชื่อ Somchai อาจมาให้ความเห็นว่าหนังสือของ
James Gosling เป็น “good reading book” โดยเราอาจใช้คำสั่งดังนี้
> new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"}
> db.books.update({author:/James/},{$push: {comment:new_comment}})
ซึ่งเราจะได้ข้อมูลนี้ใหม่เป็น
{ "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart",
"title" : "Introduction to MongoDB", "price" : 1300 }
{ "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" :
[ { "reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading
book" } ], "isbn" : "555124", "price" : 1400, "title" : "Java SE" }
3. การเขียนโปรแกรม Java Servlet เพื่อเชื่อมต่อกับ MongoDB
เราสามารถที่จะเขียนโปรแกรมเชื่อมต่อกับฐานข้อมูล MongoDB ได้หลายแบบ แต่ในที่นี้จะใช้ Mon-
goDB Driver ที่สามารถจะดาวน์โหลดมาได้จาก https://github.com/mongodb/mongo-java-driver/downloads
ในที่นี้จะสาธิตการเพิ่มข้อมูลลงใน MongoDB โดยเราจะให้มี โปรแกรม addBook.html และ thanky-
ou.html ดัง Listing ที่ 1 และ 2 และทำการเขียนโปรแกรม Servlet โดยมีขั้นตอนดังนี้
Web Services Exercises www.imcinstitute.com IMC Institute
1. เลือกเมนู File > New Project
2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และ Projects เป็น Web
Application แล้วกด Next
3. กำหนด Project Name เป็น WebBaseDB แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ
เก็บ Project ไว้ แล้วกด Next
4. เลือก Server เป็น Apache Tomcat กำหนด Jave EE Version: เป็น Java EE 6 Web แล้วกด
Finish
5. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New > HTML กำหนด HTML File Name: เป็น
addBook แล้วกด Finish
6. เขียน source code ของไฟล์ addBook.html ตาม Listing ที่ 1
Listing ที่ 1 โปรแกรม addBook.html
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Add a new book</title>
</head>
<body><h1>Add a new book</h1><P>
<form action="MongoDBServlet" method="POST">
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>
7. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New > HTML กำหนด HTML File Name: เป็น
thankyou แล้วกด Finish
8. เขียน source code ของไฟล์ thankyou.html ตาม Listing ที่ 2
Listing ที่ 2 โปรแกรม thankyou.html
<html>
<head>
<title>Thank you</title>
</head>
<body>
<H1>Thank you for inserting data </H1>
</body>
</html>
Java Web Services Exercises Thanachart and Thanisa Numnonda
79
9. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New → Servlet
กำหนด Java Package เป็น controller, Class Name เป็น MongoDBServlet แล้วกด Finish
10. copy ไฟล์ mongo-2.10.1.jar ไปไว้ที่ไดเร็กทอรี่ โดยให้ Copy ไปวางที่ directory /lib ของ Apache
Tomcat (ซึ่ง Default อยู่ที่ C:Program FilesApache Software FoundationTomcat 6.0lib)
11. ในหน้าต่าง editor ให้แก้ไข source code ของไฟล์ MongoDBServlet.java ให้เป็นไปตาม Listing ที่ 3
Listing ที่ 3 โปรแกรม MongoDBServlet.java
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.UnknownHostException;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
/**
* Servlet implementation class MongoDBServlet
*/
@WebServlet("/MongoDBServlet")
public class MongoDBServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
Mongo m = null;
public void init() {
try {
m = new Mongo( "localhost" );
Web Services Exercises www.imcinstitute.com IMC Institute
System.out.println("Connected");
} catch (Exception ex) {
System.out.println(ex);
}
}
protected void processRequest(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Add a new book</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1> Add a new book </h1>");
try {
String isbn = request.getParameter("isbn");
String author = request.getParameter("author");
String title = request.getParameter("title");
String priceStr = request.getParameter("price");
float price = Float.parseFloat(priceStr);
DB db = m.getDB( "test" );
BasicDBObject book = new BasicDBObject();
book.put("isbn", isbn);
book.put("author", author);
book.put("title", title);
book.put("price", price);
DBCollection coll = db.getCollection("books");
coll.insert(book);
RequestDispatcher obj = request.getRequestDispatcher("thanky-
ou.html");
obj.forward(request, response);
} catch (UnknownHostException ex) {
out.println("Error " + ex);
return;
}
out.println("</body>");
out.println("</html>");
Java Web Services Exercises Thanachart and Thanisa Numnonda
81
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse re-
sponse) throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse re-
sponse) throws ServletException, IOException {
processRequest(request, response);
}
}
4 การทดสอบโปรแกรม
1. ทำการ Deploy โปรแกรม WebBaseDB
2. เรียกใช้งานหน้า addBook.html แล้วทดสอบกรอกข้อมูล
3. ไปที่โปรแกรม admin ของ MongoDB แล้วเรียกคำสั่ง db.books.find() จะเห็นข้อมูลใหม่ที่ป้อนเข้ามา
Web Services Exercises www.imcinstitute.com IMC Institute

More Related Content

PPTX
CMSC 56 | Lecture 13: Relations and their Properties
allyn joy calcaben
 
PPTX
Discrete math Truth Table
University of Potsdam
 
PPT
Number Base Part1
primeteacher32
 
PDF
สร้าง Soap web services ง่ายๆ
Utain Wongpreaw
 
PDF
Java Web Services and SOA Using GlassFish openESB and NetBeans
Software Park Thailand
 
PDF
Java Web Services and SOA Exercises [in Thai]
IMC Institute
 
PDF
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
IMC Institute
 
PPTX
Restful web services with java
Vinay Gopinath
 
CMSC 56 | Lecture 13: Relations and their Properties
allyn joy calcaben
 
Discrete math Truth Table
University of Potsdam
 
Number Base Part1
primeteacher32
 
สร้าง Soap web services ง่ายๆ
Utain Wongpreaw
 
Java Web Services and SOA Using GlassFish openESB and NetBeans
Software Park Thailand
 
Java Web Services and SOA Exercises [in Thai]
IMC Institute
 
Java Web Programming (JSP/Servlet) Using Eclipse and Tomcat
IMC Institute
 
Restful web services with java
Vinay Gopinath
 

Viewers also liked (19)

PPT
Developing RESTful WebServices using Jersey
b_kathir
 
PDF
โครงงานคอมพิวเตอร์
Bo'Boss Boss
 
PDF
Java Web Programming Using NetBeans 6.5
Thanachart Numnonda
 
PPTX
การเขียนโปรแกรมโดยใช้ NetBeans
Nomjeab Nook
 
PPTX
การเขียนโปรแกรมด้วย Net beans
Apisit Song
 
PDF
การเขียนโปรแกรมโดยใช้ Net beans และการสร้าง App Android
Aod Parinthorn
 
PDF
lesson1 JSP
Kukik Kanoknuan
 
ODP
RESTful Web Services with JAX-RS
Carol McDonald
 
PDF
lesson4 JSP
Kukik Kanoknuan
 
PDF
2D Graphics and Animations in Java World
kunemata
 
PDF
RESTful Web services using JAX-RS
Arun Gupta
 
PPTX
JUnit 5 - from Lambda to Alpha and beyond
Sam Brannen
 
PDF
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
IMC Institute
 
PDF
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
PDF
Java Web programming Using NetBeans
Software Park Thailand
 
PPTX
Fastest Growing Web API Categories: Last 6 Months
ProgrammableWeb
 
PDF
ProgrammableWeb's eSignature API Research Report
ProgrammableWeb
 
PDF
บทความ Big Data School ใน IMC e-Magazine
IMC Institute
 
PPTX
Consuming Restful APIs using Swagger v2.0
Pece Nikolovski
 
Developing RESTful WebServices using Jersey
b_kathir
 
โครงงานคอมพิวเตอร์
Bo'Boss Boss
 
Java Web Programming Using NetBeans 6.5
Thanachart Numnonda
 
การเขียนโปรแกรมโดยใช้ NetBeans
Nomjeab Nook
 
การเขียนโปรแกรมด้วย Net beans
Apisit Song
 
การเขียนโปรแกรมโดยใช้ Net beans และการสร้าง App Android
Aod Parinthorn
 
lesson1 JSP
Kukik Kanoknuan
 
RESTful Web Services with JAX-RS
Carol McDonald
 
lesson4 JSP
Kukik Kanoknuan
 
2D Graphics and Animations in Java World
kunemata
 
RESTful Web services using JAX-RS
Arun Gupta
 
JUnit 5 - from Lambda to Alpha and beyond
Sam Brannen
 
Java Web Programming [Servlet/JSP] Using GlassFish and NetBeans
IMC Institute
 
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Thanachart Numnonda
 
Java Web programming Using NetBeans
Software Park Thailand
 
Fastest Growing Web API Categories: Last 6 Months
ProgrammableWeb
 
ProgrammableWeb's eSignature API Research Report
ProgrammableWeb
 
บทความ Big Data School ใน IMC e-Magazine
IMC Institute
 
Consuming Restful APIs using Swagger v2.0
Pece Nikolovski
 
Ad

Similar to ็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + GlassFish (20)

PDF
SOA Using GlassFishESB and NetBeans [in Thai]
Thanachart Numnonda
 
PDF
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
IMC Institute
 
PDF
Hand-on Exercise Java Web Programming
IMC Institute
 
DOC
J2 ee คืออะไร
pasinee lungprasert
 
PDF
Web service overview
Saran Yuwanna
 
PPTX
Introduction to Web Service
Tanya Sattaya-aphitan
 
PPS
Tc on new2
Diode Ravana
 
PDF
ดร.พรกมล
Chicharito Iamjang
 
PPT
นายศ ภช ย ดอนชาม_วง ว.5606 รห_ส 5640248230
Chicharito Iamjang
 
PDF
Iis7on microsoftwindows2008
วิชระ หอมประไพย์
 
PPTX
Assignmet1:Start by finding web services using SOAP and WSDL on the Internet/...
Aey Unthika
 
PDF
EJB Programming Using Eclipse & JBoss
Software Park Thailand
 
PPT
การพัฒนาเอกสารออนไลน์ขั้นสูง Lect 05
Jenchoke Tachagomain
 
PDF
Web Server Stack with WPИ-XM
Asst.Prof.Dr.Arnut Ruttanatirakul
 
PDF
Hotspotubuntu8
Kwanchai Charoennet
 
PDF
joomla-2-5-install-appserv
Boonlert Aroonpiboon
 
PDF
Rise of Container (RoC)
Somkiat Puisungnoen
 
PDF
Assignmet1 selectedtopic Topic in Computer Engineer
Aey Unthika
 
PPT
KMUTNB - Internet Programming 7/7
phuphax
 
SOA Using GlassFishESB and NetBeans [in Thai]
Thanachart Numnonda
 
Hand on Exercises Java Web Services and SOA using GlassFish ESB and NetBeans
IMC Institute
 
Hand-on Exercise Java Web Programming
IMC Institute
 
J2 ee คืออะไร
pasinee lungprasert
 
Web service overview
Saran Yuwanna
 
Introduction to Web Service
Tanya Sattaya-aphitan
 
Tc on new2
Diode Ravana
 
ดร.พรกมล
Chicharito Iamjang
 
นายศ ภช ย ดอนชาม_วง ว.5606 รห_ส 5640248230
Chicharito Iamjang
 
Assignmet1:Start by finding web services using SOAP and WSDL on the Internet/...
Aey Unthika
 
EJB Programming Using Eclipse & JBoss
Software Park Thailand
 
การพัฒนาเอกสารออนไลน์ขั้นสูง Lect 05
Jenchoke Tachagomain
 
Web Server Stack with WPИ-XM
Asst.Prof.Dr.Arnut Ruttanatirakul
 
Hotspotubuntu8
Kwanchai Charoennet
 
joomla-2-5-install-appserv
Boonlert Aroonpiboon
 
Rise of Container (RoC)
Somkiat Puisungnoen
 
Assignmet1 selectedtopic Topic in Computer Engineer
Aey Unthika
 
KMUTNB - Internet Programming 7/7
phuphax
 
Ad

More from IMC Institute (20)

PDF
นิตยสาร Digital Trends ฉบับที่ 14
IMC Institute
 
PDF
Digital trends Vol 4 No. 13 Sep-Dec 2019
IMC Institute
 
PDF
บทความ The evolution of AI
IMC Institute
 
PDF
IT Trends eMagazine Vol 4. No.12
IMC Institute
 
PDF
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
IMC Institute
 
PDF
IT Trends 2019: Putting Digital Transformation to Work
IMC Institute
 
PDF
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
IMC Institute
 
PDF
IT Trends eMagazine Vol 4. No.11
IMC Institute
 
PDF
แนวทางการทำ Digital transformation
IMC Institute
 
PDF
บทความ The New Silicon Valley
IMC Institute
 
PDF
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
IMC Institute
 
PDF
แนวทางการทำ Digital transformation
IMC Institute
 
PDF
The Power of Big Data for a new economy (Sample)
IMC Institute
 
PDF
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
IMC Institute
 
PDF
IT Trends eMagazine Vol 3. No.9
IMC Institute
 
PDF
Thailand software & software market survey 2016
IMC Institute
 
PPTX
Developing Business Blockchain Applications on Hyperledger
IMC Institute
 
PDF
Digital transformation @thanachart.org
IMC Institute
 
PDF
บทความ Big Data จากบล็อก thanachart.org
IMC Institute
 
PDF
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
IMC Institute
 
นิตยสาร Digital Trends ฉบับที่ 14
IMC Institute
 
Digital trends Vol 4 No. 13 Sep-Dec 2019
IMC Institute
 
บทความ The evolution of AI
IMC Institute
 
IT Trends eMagazine Vol 4. No.12
IMC Institute
 
เพราะเหตุใด Digitization ไม่ตอบโจทย์ Digital Transformation
IMC Institute
 
IT Trends 2019: Putting Digital Transformation to Work
IMC Institute
 
มูลค่าตลาดดิจิทัลไทย 3 อุตสาหกรรม
IMC Institute
 
IT Trends eMagazine Vol 4. No.11
IMC Institute
 
แนวทางการทำ Digital transformation
IMC Institute
 
บทความ The New Silicon Valley
IMC Institute
 
นิตยสาร IT Trends ของ IMC Institute ฉบับที่ 10
IMC Institute
 
แนวทางการทำ Digital transformation
IMC Institute
 
The Power of Big Data for a new economy (Sample)
IMC Institute
 
บทความ Robotics แนวโน้มใหม่สู่บริการเฉพาะทาง
IMC Institute
 
IT Trends eMagazine Vol 3. No.9
IMC Institute
 
Thailand software & software market survey 2016
IMC Institute
 
Developing Business Blockchain Applications on Hyperledger
IMC Institute
 
Digital transformation @thanachart.org
IMC Institute
 
บทความ Big Data จากบล็อก thanachart.org
IMC Institute
 
กลยุทธ์ 5 ด้านกับการทำ Digital Transformation
IMC Institute
 

็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + GlassFish

  • 1. 1 Hand-on Exercises Java Web Services Using Eclipse, Tomcat, NetBeans IDE and GlassFish Server Assoc.Prof.Dr. Thanachart Numnonda and Assist.Prof.Dr. Thanisa Kruawaisayawan April 2014 Web Services Exercises www.imcinstitute.com IMC Institute
  • 2. Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 3. 3 Exercise 1: Calling Existing Web Services แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรมเพื่อเรียกใช้ Web Services ที่มีอยู่แล้ว ซึ่งจะเลือกมา 3 บริการดังนี้ การทดลองที่ 1 อัตราแลกเปลี่ยนเงินตราระหว่างประเทศ การทดลองที่ 2 ราคาน้ำมันล่าสุดของ ปตท. โดยจะใช้ soapUI และ Eclipse การทดลองที่ 1 การทดสอบ Web Services โดยใช้ soapUI โปรแกรม soapUI เป็นโปรแกรม Open Source ที่สามารถใช้เป็นเครื่องมือในการทดสอบเว็บเซอร์วิส ซึ่งเป็นที่นิยมใช้กันอย่างกว้างขวาง เราสามารถที่จะไปดาวน์โหลดโปรแกรมนี้ได้ที่ www.soapui.org โดย เมื่อติดตั้งแล้ว ให้ทำการทดสอบเรียกใช้เว็บเซอร์วิส ตามขั้นตอนดังนี้ 1. ในโปรแกรม soapUI เลือกเมนู File > New soapUI Project 2. ในช่อง Initial WSDL ให้ใส่ http://www.webservicex.com/CurrencyConvertor.asmx?wsdl ดังแสดง ในรูปที่ 1 รูปที่ 1 แสดงการสร้าง soapUI Project ใน soapUI Web Services Exercises www.imcinstitute.com IMC Institute
  • 4. 3. จากนั้นกดปุ่ม OK โปรแกรมจะทำการสร้างโปรเจ็คนี้ขึ้นมา 4. ขยายโหนด ConversionRate ของ CurrencyConvertorSoap แล้วดับเบิ้ลคลิ๊กที่ Request1 5. ในหน้าต่าง Editor จะแสดงค่าของ SOAP Request ที่จะส่งไป ให้ใส่ค่าดังนี้ <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.webserviceX.NET/"> <soapenv:Header/> <soapenv:Body> <web:ConversionRate> <web:FromCurrency>USD</web:FromCurrency> <web:ToCurrency>THB</web:ToCurrency> </web:ConversionRate> </soapenv:Body> </soapenv:Envelope> 6. กดปุ่ม Submit request (เครื่องหมายสีเขียว) ที่อยู่ทางซ้ายบน โปรแกรมจะได้ SOAP Response กลับมาดังแสดงตัวอย่างได้ดังนี้ <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <soap:Body> <ConversionRateResponse xmlns="http://www.webserviceX.NET/"> <ConversionRateResult>31.403/ConversionRateResult> </ConversionRateResponse> </soap:Body> </soap:Envelope> การทดลองที่ 2 การพัฒนา Java Client เพื่อเรียกดูราคาน้ำมัน แบบฝึกหัดนี้จะสร้าง Client ขึ้นเพื่อใช้ในการเรียก Web Services โดยมีขั้นตอนดังนี้ 1. สร้าง Dynamic Web Project ชื่อ ExternalWSDemo โดยเลือกเมนู File > New > Other.. แล้ว เลือก Web > Dynamic Web Project Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 5. 5 2. คลิ๊กขวาที่ ExternalWSDemo เลือก New → Other → Web Services → Web Service Client 3. ใส่ค่า Service definition เป็น http://www.pttplc.com/webservice/pttinfo.asmx?WSDL 4. เลือกช่อง Monitor the Web service แล้วกดปุ่ม Finish Web Services Exercises www.imcinstitute.com IMC Institute
  • 6. รูปที่ 1 ขอบริการจาก Web Service ที่ระบุ โปรแกรมจะสร้างไฟล์ที่เกี่ยวข้องกับ Web Services ดังรูป 5. ทำการสร้าง Servlet เพื่อแสดงผล สิ่งที่ได้รับมาจาก Web Services โดยคลิ๊กขวาที่โหนด ExternalWSDemo แล้วเลือกคำสั่ง New > Servlet โดยกำหนดค่า Package = controller Class Name = OilPriceInfoServlet Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 7. 7 6. พัฒนา source code ดัง Listing ที่ 1 7. ทำการรันโปรแกรม จะได้ตัวอย่างผลลัพธ์แสดงราคาน้ำมันล่าสุด ดังแสดงในรูปที่ 2 Listing ที่ 1 โปรแกรม OilPriceInfoServlet.java @WebServlet("/OilPriceInfoServlet") public class OilPriceInfoServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); PTTInfoSoapProxy obj = new PTTInfoSoapProxy(); out.print(obj.currentOilPrice("TH")); } } รูปที่ 2 แสดงผลลัพธ์ที่ได้จากการเรียกใช้ Web Service Operation: CurrentOilPrice ของปตท. Web Services Exercises www.imcinstitute.com IMC Institute
  • 8. Exercise 2: Web Services Provider แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE โดยใช้ชุดคำสั่ง JAX-WS ซึ่งจะ เป็นการพัฒนา Web Services Provider บน Java EE Server ทั้งนี้ชุดคำสั่ง JAX-WS จะช่วยทำให้การสร้าง และเรียกใช้ Web Services ด้วยภาษา Java เป็นไปได้ง่ายขึ้น การพัฒนา Web Services จะแบ่งได้เป็นสองส่วนคือ Web Service Requester (Client) และ Web Service Provider (Server) ซึ่งการพัฒนา Web Service Provider สามารถทำได้ 2 วิธีคือ 1. Web Services ที่รันบน Web Server โดยใช้ Java Servlet 2. Web Services ที่รันบน Application Server โดยใช้ Session Bean แบบฝึกหัดนี้จะแสดงขั้นตอนการใช้ Eclipse สร้าง Web Service ที่ชื่อ calculateTax โดยใช้ Servlet ซึ่งจะรันอยู่บน Apache Tomcat เพื่อแสดง Web Services การส่ง SOAP message และ WSDL ของ Services การติดตั้ง Apache Tomcat ให้สนับสนุน JAX-WS เราต้องติดตั้งไฟล์ประเภท jar ของ JAX-WS เพื่อทำให้ Tomcat สนับสนุน JAX-WS โดยเราต้อง download ไฟล์ Library ที่ http://jax-ws.java.net/ แล้วทำการ unzip และ copy ไฟล์ประเภท jar ไว้ที่ โฟร์เด อร์ TOMCAT_HOME/lib แล้วทำการ Restart Tomcat อีกครั้ง ในกรณีที่เราไม่ต้องการ copy ทุกไฟล์ เรา สามารถเลือกที่จะ copy ไฟล์ที่จำเป็นเหล่านี้ •gmbal-api-only.jar •jaxb-impl.jar •jaxws-api.jar •jaxws-rt.jar •management-api.jar •policy.jar •stax-ex.jar •streambuffer.jar การพัฒนา calculateTax Web Service แบบฝึกหัดนี้จะสร้าง Dynamic Web Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน การพัฒนาดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 9. 9 1. เลือกเมนู File > New > Project > Web > Dynamic Web Project 2. กำหนด Project Name เป็น TaxWSDemo แล้วเลือก Target Runtime เป็น Apache Tomcat 7 กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Finish การพัฒนาโปรแกรม Service Endpoint ในการพัฒนาโปรแกรม Web Service เราต้องเขียนโปรแกรทขึ้นมาสองโปรแกรมคือ Interface และ Class ที่มีเว็บเซอร์วิสเมธอดอยู่ 1. การพัฒนา Interface ทำได้โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Interface 2. กำหนดค่า package เป็น com.taxws และ name เป็น TaxServiceInterface 3. ปรับปรุงโปรแกรม TaxServiceInterface ดังนี้ package com.taxws; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService public interface TaxServiceInterface { @WebMethod public double calculateTax(@WebParam(name = "income") double income) ; } 4. ทำการพัฒนาโปรแกรม TaxService โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Class 5. กำหนดค่า package เป็น com.taxws และ name เป็น TaxService 6. ปรับปรุงโปรแกรม TaxService ดังนี้ package com.taxws; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService(endpointInterface = "com.ws.TaxWS") public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { Web Services Exercises www.imcinstitute.com IMC Institute
  • 10. return (income - 500000) * 0.2 + 43500; } } } 7. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Clean and Build จากนั้นคลิ๊กขวาที่โหนด TaxWSDemo อีกครั้ง แล้วเลือก Deploy การพัฒนาไฟล์ configuration เราต้องสร้างไฟล์ configuration ขึ้นมาสองไฟล์เพื่อระบุตำแหน่งของ Servlet และ Web Services Endpoint คือ web.xml และ sun-jaxws.xml โดยมีขั้นตอนดังนี้ 1. โดยคลิ๊กขวาที่โหนด content/WEB-INF เลือกคำสั่ง New > Other > XML > XML File แล้วกด Next 2. กำหนด File Name เป็น web.xml แล้วกด Finish 3. ปรับปรุงโปรแกรม web.xml ดังนี้ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>taxws</servlet-name> <servlet-class> com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>taxws</servlet-name> <url-pattern>/taxws</url-pattern> </servlet-mapping> <session-config> Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 11. 11 <session-timeout>30</session-timeout> </session-config> </web-app> 4. สร้างไฟล์ sun-jaxws.xml ไว้ที่ content/WEB-INF โดยมีโปรแกรมดังนี้ <?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0"> <endpoint name="WebServiceImpl" implementation="com.taxws.TaxService" url-pattern="/taxws" /> </endpoints> การทดสอบ Web Service 1. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Run As > Run on Server 2. กำหนด url นี้บน Web Browser >> http://localhost:8080/TaxWSDemo/taxws จะแสดงผลลัพธ์ดังนี้ 3. ทดสอบการเรียก TaxService จาก soap UI โดย เลือกเมนู File > New soapUI Project 4. กำหนดค่า Project Name เป็น TaxWSClient และ Initial WSDL เป็น http://localhost:8080/TaxWSDemo/taxws?wsdl แล้วกดปุ่ม OK 5. ในหน้าต่าง Projects ขยายโหนด TaxWSClient >> TaxServicePortBinding >> calculateTax 6. ดับเปิ๊ลคลิ๊ก Request1 โปรแกรมจะแสดง SOAP Request ออกมา ให้กำหนดค่าใน tax <income> เป็น 73000 <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tax="http://taxws.com/"> <soapenv:Header/> <soapenv:Body> <tax:calculateTax> <income>73000</income> </tax:calculateTax> Web Services Exercises www.imcinstitute.com IMC Institute
  • 12. </soapenv:Body> </soapenv:Envelope> 7. กดปุ่ม Submit request (เครื่องหมายสีเขียว) ที่อยู่ทางซ้ายบน โปรแกรมจะได้ SOAP Response กลับมาดังนี้ <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:calculateTaxResponse xmlns:ns2="http://taxws.com/"> <return>150.0</return> </ns2:calculateTaxResponse> </S:Body> </S:Envelope> การพัฒนาโปรแกรม Web Service Client ขั้นตอนนี้จะเป็นการพัฒนาโปรแกรม Web Service Client เพื่อเรียกใช้ TaxServices โดยใช้ wsimport ซึ่งมีขั้นตอนดังนี้ 1. สร้าง Java Project ที่ชื่อ TaxWSClient 2. ใช้โปรแกรม wsimport ในการสร้างโปรแกรม Java อัตโนมัติจากไฟล์ wsdl โดยการเปิด terminal แล้วเปลี่ยนไดเร็กทอรี่ไปที่ source code ของโปรเจ็ค TaxWsClient และเรียกใช้ wsimport จากคำสั่ง ดังนี้ cd %project_home%/src wsimport -s . -target 2.0 http://localhost:8080//TaxWSDemo/taxws?wsdl 3. โปรแกรมจะสร้่างไฟล์ต่างๆดังรูป Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 13. 13 4. สร้าง Class โดยกำหนด package เป็น com.taxws.client และ Name เป็น TaxWSClient โดยมี source code ดัง Listing ที่ 2 5. ทำการรันโปรแกรมจะได้ผลลัพธ์เป็น Tax amount = 150.0 Listing ที่ 2 โปรแกรม TaxWSClientManual package com.taxws.client; import com.taxws.TaxService; import com.taxws.TaxServiceService; public class TaxWSClient { public static void main(String[] args) { TaxServiceService obj = new TaxServiceService(); TaxService taxService = obj.getTaxServicePort(); double tax = taxService.calculateTax(73000); System.out.println("Tax amount = "+ tax); } } Web Services Exercises www.imcinstitute.com IMC Institute
  • 14. Exercise 3: Web Service Authentication แบบฝึกหัดนี้จะเป็นการปรับปรุงโปรแกรม Tax Service เพื่อเรียกให้มีการทำ authentication ก่อนที่จะ มีการคำนวณภาษี ทั้งนี้ได้กำหนดให้ผู้ใช้ต้องใส่ username เป็น root และ password เป็น password จึงจะ คำนวณค่าภาษีมาให้ หาก username หรือ password ไม่ถูกต้องจะให้ค่ากลับมาเป็น -999 การปรับปรุงโปรแกรม TaxService.java ขั้นตอนนี้ให้ปรับปรุงโปรแกรม TaxService.java ดัง Listing ที่ 3 Listing ที่ 3 โปรแกรม TaxService package com.taxws; import java.util.List; import java.util.Map; import javax.annotation.Resource; import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; import javax.xml.ws.WebServiceContext; import javax.xml.ws.handler.MessageContext; @WebService(endpointInterface = "com.ws.TaxWS") public class TaxService { @Resource WebServiceContext wsctx; @WebMethod public double calculateTax(@WebParam(name = "income") double income) { MessageContext mctx = wsctx.getMessageContext(); // get detail from request headers Map http_headers = (Map) mctx.get(MessageContext.HTTP_REQUEST_HEADERS); List userList = (List) http_headers.get("Username"); List passList = (List) http_headers.get("Password"); String username = ""; String password = ""; if (userList != null) { // get username username = userList.get(0).toString(); } if (passList != null) { // get password password = passList.get(0).toString(); Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 15. 15 } // Should validate username and password with database if (username.equals("root") && password.equals("password")) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } else { return -999; } } } การปรับปรุงโปรแกรม TaxWSClient.java ขั้นตอนนี้ให้ปรับปรุงโปรแกรม TaxWSClient.java ดัง Listing ที่ 4 Listing ที่ 4 โปรแกรม TaxWSClient package com.taxws.client; import java.util.Map; import java.util.Collections; import java.util.HashMap; import java.util.List; import javax.xml.ws.BindingProvider; import javax.xml.ws.handler.MessageContext; import com.taxws.TaxService; import com.taxws.TaxServiceService; public class TaxWSClient { public static void main(String[] args) { TaxServiceService obj = new TaxServiceService(); TaxService taxService = obj.getTaxServicePort(); Map<String, Object> req_ctx = ((BindingProvider) taxService) .getRequestContext(); Map<String, List<String>> headers = new HashMap<String, List<String>>(); headers.put("Username", Collections.singletonList("root")); headers.put("Password", Collections.singletonList("password")); req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers); double tax = taxService.calculateTax(73000); System.out.println("Tax amount = " + tax); } } Web Services Exercises www.imcinstitute.com IMC Institute
  • 16. การทดสอบโปรแกรม ทำการทดสอบโปรแกรม ตามขั้นตอนดังนี้ 1. ทำการรันโปรเจ็ค TaxWSDemo ใหม่โดยใช้คำสั่ง Run As > Run On Server 2. ทำการรันโปรแกรม TaxWSClient.java จะเห็นว่าได้ผลลัพธ์อย่างถูกต้อง 3. ทดลองเปลี่ยนค่า username หรือ password ในโปรแกรม TaxWSClient.java แล้วทดลองรัน โปรแกรมใหม่ จะเห็นว่าผลลัพธ์เปลี่ยนไป Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 17. 17 Exercise 4: Axis2 Web Services แบบฝึกหัดนี้เป็นการติดตั้ง Axis2 Web Services บน Tomcat Web Server แลัวทดลองพัฒนา Web Service โดยใช้โปรแกรม Eclipse การติดตั้ง Axis2 เพื่อให้่ใช้กับโปรแกรม ขั้นตอนนี้เป็นการติดตั้ง Axis2 เพื่อให้ทำงานบน Tomcat ได้ โดยต้องทำการ config โปรแกรม Ec- lipse ดังนี้ 1. ทำการดาวน์โฟล์ axis2-1.x.x.zip จาก http://axis.apache.org/axis2/java/core/download.cgi และ ทำการ unzip 2. เลือกคำสั่ง Preferences.. ของโปรแกรม Eclipse 3. ในไดอะล็อก Prefernces เลือก Web Services > Axis2 Preferences และกำหนดตำแหน่งของ Axis2 runtime location ให้ตรงกับไดเร็กทอรี่ที่ทำการ unzip ไฟล์ axis2-1.x.x.zip ดังรูป Web Services Exercises www.imcinstitute.com IMC Institute
  • 18. การพัฒนาโปรแกรม Axis2 Web Services ขั้นตอนนี้จะเป็นการพัฒนา Dynamic Web Project ให้เป็น Axis2 Web Services สำหรับการคำนวณ ภาษีโดยมีขั้นตอนดังนี้ 1. เลือกเมนู File > New > Project > Web > Dynamic Web Project 2. กำหนด Project Name เป็น TaxAxisWS แล้วเลือก Target Runtime เป็น Apache Tomcat 7 กำหนด Dynamic Web Module Version เป็น 2.5 แล้วกด Finish (หมายเหตุ กรณีของ Axis เรา จะต้องเลือก Web Module เวอร์ชั่น 2.x เท่านั้น) 3. คลิ๊กขวาที่โหนด TaxAxisWS แล้วเลือกคำสั่ง Properties 4. ในไดอะล็อก Properties for TaxAxisWS ให้เลือก Project Facets แล้วเลือกช่อง Axis2 Web Services แล้วกด Apply ดังรูป 5. ทำการพัฒนาโปรแกรม TaxService โดยคลิ๊กขวาที่แทป TaxWSDemo แล้วเลือกคำสั่ง New > Class 6. กำหนดค่า package เป็น com.taxws และ name เป็น TaxService 7. ปรับปรุงโปรแกรม TaxService ดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 19. 19 package com.taxws; public class TaxService { public double calculateTax(double income) { return 0.1 * income; } } 8. กำหนดคลาส TaxService ให้เป็น Web Services โดยการคลิ๊กขวาที่โหนด TaxService แล้วเลือกคำ สั่ง New > Other > Web Services > Web Service แล้วกด Next 9. คลิ๊กที่ Web Service runtime: Apache Axis เมื่อปรากฎไดอะล็อก Service Deployment Configuration ให้เลือก Apache Axis2 แล้วกด OK Web Services Exercises www.imcinstitute.com IMC Institute
  • 20. 10. กด Next แล้วเลือกค่าตามที่ตั้งไว้ 11. กด Next โปรแกรมจะทำการติดตั้ง Web Service ลงบน Tomcat แล้วกด Finish 12. เราสามารถเรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser ดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 21. 21 http://localhost:8080/TaxAxisWS/ เราจะเห็นข้อความด้งรูป 13. คลิ๊กที่ Services เราจะเห็น TaxService ที่มี Opearation ดังนี้ 14. เราสามารถที่จะเรียกดู WSDL ได้ที่ http://localhost:8080/TaxAxisWS/services/TaxService?wsdl Web Services Exercises www.imcinstitute.com IMC Institute
  • 22. Exercise 5: RESTful Web Services แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม RESTful Web Services โดยใช้ JAX-RS ที่เป็น Jersey การพัฒนา Hello Web Service แบบฝึกหัดนี้จะสร้าง Dynamic Web Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน การพัฒนาดังนี้ 1. เลือกเมนู File > New > Project > Web > Dynamic Web Project 2. กำหนด Project Name เป็น RESTfulDemo แล้วเลือก Target Runtime เป็น Apache Tomcat 7 กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Next 3. ในหน้า web module ให้เลือกช่อง Generate web.xml deployment descriptor แล้วกด Finish 4. download ไฟล์ Jersey Library ที่ http://jersey.java.net/ แล้วทำการ unzip และ copy ไฟล์ประเภท jar ไว้ที่ โฟร์เดอร์ WebContent->WEB-INF->lib โดยมีไฟล์ที่จำเป็นดังนี้ • asm-3.1 • jersey-client-1.17 • jersey-core-1.17 • jersey-server-1.17 • jersey-servlet-1.17 • jsr311-api-1.1.1 เราจะเห็นไฟล์ต่างๆดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 23. 23 5. เพิ่ม jar file เหล่านี้ลงใน Build Path โดยการคลิ๊กขวาที่ฌหนด RestfulDemo แล้วเลือก Properties แล้วเลือก Java Build Path กด Add JARs.. แล้วเลือกไฟล์ต่างๆดังรูป แล้วกด OK 6. ทำการพัฒนาโปรแกรม Hello โดยคลิ๊กขวาที่แทป RESTfulDemo แล้วเลือกคำสั่ง New > Class 7. กำหนดค่า package เป็น com.rs และ name เป็น Hello 8. ปรับปรุงโปรแกรม Hello ดังนี้ package com.rs; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; @Path("/hello") public class Hello { // This method is called if TEXT_PLAIN is request @GET @Produces(MediaType.TEXT_PLAIN) public String sayPlainTextHello() { return "Hello Jersey"; } // This method is called if XML is request @GET @Produces(MediaType.TEXT_XML) public String sayXMLHello() { Web Services Exercises www.imcinstitute.com IMC Institute
  • 24. return "<?xml version="1.0"?>" + "<hello> Hello Jersey" + "</hello>"; } // This method is called if HTML is request @GET @Produces(MediaType.TEXT_HTML) public String sayHtmlHello() { return "<html> " + "<title>" + "Hello Jersey" + "</title>" + "<body><h1>" + "Hello Jersey" + "</body></h1>" + "</html> "; } } 9. ปรับปรุงโปรแกรม web.xml ดังนี้ <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>RESTfulDemo</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet- class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet- class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.rs</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> 10. ทำการรันโปรเจ็คโดยใช้คำสั่ง Run As > Run On Server 11. เรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser เป็น http://localhost:8080/RESTfulDemo/rest/hello การพัฒนาโปรแกรม RESTful Web Service Client ขั้นตอนนี้จะเป็นการพัฒนาโปรแกรม RESTful Web Service Client เพื่อเรียกใช้ Hello Service โดย มีขั้นตอนดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 25. 25 1. สร้าง Java Project ที่ชื่อ RESTfulClient 2. ทำการกำหนดค่า Project Build Path ตามขั้นตอนแบบเดีัยวกับการพัฒนาโปรเจ็ค RESTfulDemo 3. สร้าง Java Class ที่ชื่อ ClientDemo และพัฒนาโปรแกรมดังนี้ package com.client; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class ClientDemo { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); // Fluent interfaces System.out.println(service.path("rest").path("hello") .accept(MediaType.TEXT_PLAIN).get(ClientResponse.c lass) .toString()); // Get plain text System.out.println(service.path("rest").path("hello") .accept(MediaType.TEXT_PLAIN).get(String.class)); // Get XML System.out.println(service.path("rest").path("hello") .accept(MediaType.TEXT_XML).get(String.class)); // The HTML System.out.println(service.path("rest").path("hello") .accept(MediaType.TEXT_HTML).get(String.class)); } private static URI getBaseURI() { return UriBuilder.fromUri( "http://localhost:8080/RESTfulDemo/").build(); } } 4. ทำการรันโปรแกรม ClientDemo จะได้ผลลัพธ์ดังนี้ Web Services Exercises www.imcinstitute.com IMC Institute
  • 26. Exercise 6: RESTful Web Services and JAXB JAX-RS สนับสนุนการสร้าง XML และ JSON ผ่าน JAXB แบบฝึกหัดนี้จะสาธิตการพัฒนา RESTful Web Services ในการสร้างข้อมูลเก็บลงใน Web Services การพัฒนา DataWSPrj ทำการสร้าง Dynamic Web Project ขึ้นใหม่ โดยมีขั้นตอนการพัฒนาดังนี้ 1. เลือกเมนู File > New > Project > Web > Dynamic Web Project 2. กำหนด Project Name เป็น DataWSPrj แล้วเลือก Target Runtime เป็น Apache Tomcat 7 กำหนด Dynamic Web Module Version เป็น 3.0 แล้วกด Next 3. ทำการ copy ไฟล์ Jersey JARs และกำหนดค่า Project Build Path 4. ทำการพัฒนาโปรแกรมต่างดัง source code ตาม Listing ที่ 5 - 7 5. ทำการรันโปรเจ็คโดยใช้คำสั่ง Run As > Run On Server 6. เรียกดู Service ที่ติดตั้งได้โดยการป้อน url ที่ web browser เป็น http://localhost:8080/DataWSPrj/rest/todo Listing ที่ 5 โปรแกรม Todo.java package com.rest.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Todo { private String summary; private String description; public String getSummary() { return summary; } public void setSummary(String summary) { this.summary = summary; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 27. 27 Listing ที่ 6 โปรแกรม ToDoResource.java package com.rest; import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import com.rest.model.Todo; @Path("/todo") public class ToDoResource { // This method is called if XMLis request @GET @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public Todo getXML() { Todo todo = new Todo(); todo.setSummary("This is my first todo"); todo.setDescription("This is my first todo"); return todo; } // This can be used to test the integration with the browser @GET @Produces({ MediaType.TEXT_XML }) public Todo getHTML() { Todo todo = new Todo(); todo.setSummary("This is my first todo"); todo.setDescription("This is my first todo"); return todo; } } Listing ที่ 7 โปรแกรม web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>DataWS</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet- class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> Web Services Exercises www.imcinstitute.com IMC Institute
  • 28. <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> การพัฒนา Web Service Client ทำการสร้าง Java Project ขึ้นใหม่ชื่อ DataWSClient กำหนด Java Bulid Path ให้มีwa]N Jersey JARS และพัฒนา Source code ดัง Listing ที่ 8 Listing ที่ 8 โปรแกรม web.xml package com.rest.client; import java.net.URI; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.UriBuilder; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; public class Test { public static void main(String[] args) { ClientConfig config = new DefaultClientConfig(); Client client = Client.create(config); WebResource service = client.resource(getBaseURI()); // Get XML System.out.println(service.path("rest").path("todo").accept(MediaType.TEXT_XML). get(String.class)); // Get XML for application System.out.println(service.path("rest").path("todo").accept(MediaType.APPLICATIO N_XML).get(String.class)); } private static URI getBaseURI() { return UriBuilder.fromUri("http://localhost:8080/DataWSPrj").build(); } } ทดลองรันโปรแกรมจะได้ผลลัพธ์ดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 29. 29 Exercise 7: CRUD RESTful webservice แบบฝึกหัดนี้เป็นการพัฒนา RESTful Web Services ที่สามารถจัดการข้อมูลโดยใช้โอเปอร์เรชั่น CRUD (Create, Read, Update, Delete) โดยให้สร้าง Dynamic Web Project และพัฒนาโปรแกรมที่มี source code ต่างๆตาม Listing ที่ 9 - 14 และเราสามารถรันโปรแกรมได้โดยการเรียก url ต่างๆดังนี้ • http://localhost:8080/CRUDRestWS/rest/todos • http://localhost:8080/CRUDRestWS/rest/todos/count • http://localhost:8080/CRUDRestWS/rest/todos/1 Listing ที่ 9 โปรแกรม Todo.java package com.rest.model; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Todo { private String id; private String summary; private String description; public Todo(){ } public Todo (String id, String summary){ this.id = id; this.summary = summary; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getSummary() { Web Services Exercises www.imcinstitute.com IMC Institute
  • 30. return summary; } public void setSummary(String summary) { this.summary = summary; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } Listing ที่ 10 โปรแกรม TodoDao.java package com.rest.dao; import java.util.HashMap; import java.util.Map; import com.rest.model.Todo; public enum TodoDao { instance; private Map<String, Todo> contentProvider = new HashMap<String, Todo>(); private TodoDao() { Todo todo = new Todo("1", "Learn REST"); todo.setDescription("Read http://www.imcinstitute.com/tutorials/REST/article.html"); contentProvider.put("1", todo); todo = new Todo("2", "Do something"); todo.setDescription("Read complete http://www.imcinstitute.com"); contentProvider.put("2", todo); } public Map<String, Todo> getModel(){ return contentProvider; } Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 31. 31 } Listing ที่ 11 โปรแกรม TodoResource.java package com.rest.resources; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import javax.xml.bind.JAXBElement; import com.rest.dao.TodoDao; import com.rest.model.Todo; public class TodoResource { @Context UriInfo uriInfo; @Context Request request; String id; public TodoResource(UriInfo uriInfo, Request request, String id) { this.uriInfo = uriInfo; this.request = request; this.id = id; } //Application integration @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Todo getTodo() { Todo todo = TodoDao.instance.getModel().get(id); Web Services Exercises www.imcinstitute.com IMC Institute
  • 32. if(todo==null) throw new RuntimeException("Get: Todo with " + id + " not found"); return todo; } // for the browser @GET @Produces(MediaType.TEXT_XML) public Todo getTodoHTML() { Todo todo = TodoDao.instance.getModel().get(id); if(todo==null) throw new RuntimeException("Get: Todo with " + id + " not found"); return todo; } @PUT @Consumes(MediaType.APPLICATION_XML) public Response putTodo(JAXBElement<Todo> todo) { Todo c = todo.getValue(); return putAndGetResponse(c); } @DELETE public void deleteTodo() { Todo c = TodoDao.instance.getModel().remove(id); if(c==null) throw new RuntimeException("Delete: Todo with " + id + " not found"); } private Response putAndGetResponse(Todo todo) { Response res; if(TodoDao.instance.getModel().containsKey(todo.getId())) { res = Response.noContent().build(); } else { res = Response.created(uriInfo.getAbsolutePath()).build(); } TodoDao.instance.getModel().put(todo.getId(), todo); return res; } } Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 33. 33 Listing ที่ 12 โปรแกรม Todo2Resource.java package com.rest.resources; import java.io.IOException; import java.net.URI; import java.util.ArrayList; import java.util.List; import javax.servlet.http.HttpServletResponse; import javax.ws.rs.Consumes; import javax.ws.rs.FormParam; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; import com.rest.dao.TodoDao; import com.rest.model.Todo; // Will map the resource to the URL todos @Path("/todos") public class TodosResource { // Allows to insert contextual objects into the class, // e.g. ServletContext, Request, Response, UriInfo @Context UriInfo uriInfo; @Context Request request; Web Services Exercises www.imcinstitute.com IMC Institute
  • 34. // Return the list of todos to the user in the browser @GET @Produces(MediaType.TEXT_XML) public List<Todo> getTodosBrowser() { List<Todo> todos = new ArrayList<Todo>(); todos.addAll(TodoDao.instance.getModel().values()); return todos; } // Return the list of todos for applications @GET @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public List<Todo> getTodos() { List<Todo> todos = new ArrayList<Todo>(); todos.addAll(TodoDao.instance.getModel().values()); return todos; } // retuns the number of todos // use http://localhost:8080/de.vogella.jersey.todo/rest/todos/count // to get the total number of records @GET @Path("count") @Produces(MediaType.TEXT_PLAIN) public String getCount() { int count = TodoDao.instance.getModel().size(); return String.valueOf(count); } @POST @Produces(MediaType.TEXT_HTML) @Consumes(MediaType.APPLICATION_FORM_URLENCODED) public void newTodo(@FormParam("id") String id, @FormParam("summary") String summary, @FormParam("description") String description, @Context HttpServletResponse servletResponse) throws IOException { Todo todo = new Todo(id,summary); if (description!=null){ todo.setDescription(description); Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 35. 35 } TodoDao.instance.getModel().put(id, todo); servletResponse.sendRedirect("../create_todo.html"); } // Defines that the next path parameter after todos is // treated as a parameter and passed to the TodoResources // Allows to type http://localhost:8080/de.vogella.jersey.todo/rest/todos/1 // 1 will be treaded as parameter todo and passed to TodoResource @Path("{todo}") public TodoResource getTodo(@PathParam("todo") String id) { return new TodoResource(uriInfo, request, id); } } Listing ที่ 13 โปรแกรม create_todo.html <!DOCTYPE html> <html> <head> <title>Form to create a new resource</title> </head> <body> <form action="../CRUDRestWS/rest/todos" method="POST"> <label for="id">ID</label> <input name="id" /> <br/> <label for="summary">Summary</label> <input name="summary" /> <br/> Description: <TEXTAREA NAME="description" COLS=40 ROWS=6></TEXTAREA> <br/> <input type="submit" value="Submit" /> </form> </body> </html> Web Services Exercises www.imcinstitute.com IMC Institute
  • 36. Listing ที่ 14 โปรแกรม web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>CRUDRestWS</display-name> <servlet> <servlet-name>Jersey REST Service</servlet-name> <servlet- class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>com.rest.resources</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Jersey REST Service</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 37. 37 Exercise 8: Java Web Services Using NetBeans แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE โดยใช้ชุดคำสั่ง JAX-WS ซึ่งจะ เป็นการพัฒนา Web Services Provider บน Java EE Server ทั้งนี้ชุดคำสั่ง JAX-WS จะช่วยทำให้การสร้าง และเรียกใช้ Web Services ด้วยภาษา Java เป็นไปได้ง่ายขึ้น การพัฒนา Web Services จะแบ่งได้เป็นสองส่วนคือ Web Service Requester (Client) และ Web Service Provider (Server) ซึ่งการพัฒนา Web Service Provider สามารถทำได้ 2 วิธีคือ 3. Web Services ที่รันบน Web Server โดยใช้ Java Servlet 4. Web Services ที่รันบน Application Server โดยใช้ Session Bean แบบฝึกหัดนี้จะแสดงขั้นตอนการใช้ NetBeans สร้าง Web Service ที่ชื่อ calculateTax โดยใช้ Servlet ซึ่งจะรันอยู่บน GlassFish V2.1 Server เพื่อแสดง Web Services การส่ง SOAP message และ WSDL ของ Services การพัฒนา calculateTax Web Service แบบฝึกหัดนี้จะสร้าง Web Application Project ขึ้นใหม่ เพื่อใช้ในการเก็บ Web Service โดยมีขั้นตอน การพัฒนาดังนี้ 1. เลือกเมนู File > New Project 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และ Projects เป็น Web Application แล้วกด Next 3. กำหนด Project Name เป็น TaxWSDemo แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ เก็บ Project ไว้ 4. จากนั้นเลือก Server เป็น GlassFish V3.1.2 กำหนด Jave EE Version: เป็น Java EE 6 แล้วกด Finish 5. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง New > Other… ให้เลือก Categories เป็น Web Services และเลือก File Types เป็น Web Service แล้วกด Next 6. ในไดอะล็อก New Web Service กำหนด Web Service Name: เป็น TaxService และ Package: เป็น ws แล้วกด Finish 7. โปรแกรมจะประกาศ Web Services ที่ชื่อ TaxService ในโหนด Web Services ของหน้าต่าง Project และหน้าต่าง Editor จะแสดงไฟล์ที่ชื่อ TaxService.java 8. ในหน้าต่าง Projects ขยายโหนด TaxWSDemo > Web Services แล้วคลิ๊กขวาที่โหนด TaxService เลือกคำสั่ง Add Operation… Web Services Exercises www.imcinstitute.com IMC Institute
  • 38. 9. ในไดอะล็อก Add Operation กำหนด Method เป็น calculateTax ชนิดของ Return Type เป็น double และกดปุ่ม Add เพื่อเพิ่ม Input parameter โดยกำหนด Name เป็น income และ Type เป็น ชนิด double แล้วกด OK 10. คลิ๊กที่แทป Source ของ TaxService.java และปรับปรุงเมธอด calculateTax ดังนี้ import javax.jws.WebMethod; import javax.jws.WebParam; import javax.jws.WebService; @WebService() public class TaxService { @WebMethod public double calculateTax(@WebParam(name = "income") double income) { if (income < 70000) { return 0; } else if (income < 100000) { return (income - 70000) * 0.05; } else if (income < 500000) { return (income - 100000) * 0.1 + 3500; } else { return (income - 500000) * 0.2 + 43500; } } } 11. คลิ๊กขวาที่โหนด TaxWSDemo จากนั้นเลือกคำสั่ง Clean and Build จากนั้นคลิ๊กขวาที่โหนด TaxWSDemo อีกครั้ง แล้วเลือก Deploy การทดสอบ Web Service 1. คลิ๊กขวาที่ TaxService ใน Web Services แล้วเลือก Test Web Service ดังแสดงในรูปที่ 1 รูปที่ 1 แสดงวิธีการทดสอบ Web Service ใน Netbeans Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 39. 39 2. โปรแกรมจะแสด 3. หน้าจอเพื่อให้เราป้อนข้อมูลอินพุต ซึ่งคือจำนวนเงินที่ต้องการคำนวณภาษี ในที่นี้จะใส่ตัวเลขเป็น 730000 และกดปุ่ม calculateTax ดังแสดงในรูปที่ 2 รูปที่ 2 แสดงหน้าต่างสำหรับให้ทดสอบเรียก Web Service 4. โปรแกรมจะเรียกใช้ Web Services และจะแสดงผลลัพธ์ที่ได้ พร้อมทั้งแสดงค่า SOAP Request และ SOAP Response ดังแสดงตัวอย่างในรูปที่ 3 Web Services Exercises www.imcinstitute.com IMC Institute
  • 40. รูปที่ 3 แสดงผลลัพธ์ที่ได้จากการเรียกใช้ Web Service พร้อมทั้ง SOAP Request และ SOAP Response 5. หลังจากกด Back กลับมาที่หน้าเดิมแล้ว เราสามารถที่จะดูรายละเอียดของไฟล์ WSDL ของ Web Service นี้ได้ โดยการคลิ๊กเลือกที่ WSDL File ดังแสดงในรูปที่ 4 รูปที่ 4 แสดงการคลิ๊กเพื่อเรียกดูรายละเอียดของไฟล์ WSDL Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 41. 41 6. โปรแกรมจะทำการเรียก url ชื่อ http://localhost:8080/TaxWSDemo/TaxServiceService?WSDL และจะได้ผลลัพธ์ดังแสดงในรูปที่ 5 รูปที่ 5 แสดงรายละเอียดของ WSDL 7. โปรแกรม Web Service จะถูกติดตั้งบน GlassFish V3.1.2 สามารถดูได้จากการคลิ๊กขวาที่ GlassFish Server 3.1 ในแทป Services และเลือก View Admin Console ดังแสดงในรูปที่ 6 หรือโดยการเปิด Web Browser และเรียก url ที่ http://localhost:4848 โดยมี user เป็น admin และ password เป็น adminadmin รูปที่ 6 แสดงการเรียกดู Admin Console Web Services Exercises www.imcinstitute.com IMC Institute
  • 42. Exercise 9: การเชื่อมต่อกับ MySQL Database แบบฝึกหัดนี้เป็นการเริ่มต้นใช้งาน Database Tool เพื่อเชื่อมต่อกับ Table test ในฐานข้อมูล MySQL สำหรับเป็นตัวช่วยให้ทำงานได้เร็วขึ้น เช่นปกติถ้าจะ create table ก็ต้องเขียน SQL แต่ Tool นี้มี GUI มาช่วย ทำให้ลดข้อผิดพลาด และ สะดวกในการทำงานมากขึ้น ทั้งนี้การทำแบบฝึกหัดนี้จะต้องมีการ download และ ติดตั้งโปรแกรม MySQL และ MySQL Workbench โดยสามารถทำการ download ได้จากเว็บ http://dev.mysql.com/ การเชื่อมต่อ MySQL โดยโปรแกรม MySQL Workbench 1. ให้เปิดโปรแกรม MySQL Workbench ดังรูปที่ 1 จากนั้นทำตามขั้นตอนดังนี้ รูปที่ 1 การเรียกใช้งาน Program MySQL Workbench 2. ดับเบิ้ลคลิ๊กที่ Connection Name ใส่ Password ที่กำหนดไว้ในตอนติดตั้งโปรแกรม MySQL ซึ่งจะมี ค่าเป็น root ดังรูปที่ 2 รูปที่ 2 การแสดงการเชื่อมต่อ Connection เพื่อเข้าไปจัดการ Database Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 43. 43 การสร้างตาราง books ขั้นตอนนี้จะเป็นการสร้าง Table ที่ชื่อ books โดยให้อยู่ภายใต้ Schema ที่ชื่อ test โดย Table นี้กำหนดให้มี Column ต่างๆ ดังตารางที่ 1 ตารางที่ 1 Table books ชื่อ Column ชนิด ขนาด Primary Key Index isbn varchar 20 Y Y title varchar 70 - - author varchar 50 - - price float - - - เราจะใช้โปรแกรม MySQL WorkBench ในการที่จะสร้าง Table นี้โดยมีขั้นตอนต่างๆ ดังนี้ 1. คลิ๊กที่ icon ชื่อ Add Table... แล้วใส่ชื่อ table และ ชื่อ field ตามตารางที่ 1 ดังรูปที่ 3 แล้วกดปุ่ม Ap- ply Web Services Exercises www.imcinstitute.com IMC Institute
  • 44. รูปที่ 3 การเลือกคำสั่งสร้างตาราง 2. หรือใช้คำสั่ง SQL Statement ก็ได้ โดยนำไปใส่ที่หน้าต่าง Query1 แล้ว กด icon สายฟ้าสี เหลืองเพื่อรัน CREATE TABLE BOOKS ( ISBN VARCHAR(20) NOT NULL , TITLE VARCHAR(70) NULL , AUTHOR VARCHAR(50) NULL , PRICE FLOAT NULL , PRIMARY KEY (ISBN) ); 3. เปิด Tables books จะเห็น Column ต่างๆ ดังรูปที่ 4 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 45. 45 รูปที่ 4 ผลลัพธ์จากการสร้างตาราง การใช้คำสั่ง SQL ใน MySQL WorkBench ภายหลังจากที่มีการสร้าง Table ที่ชื่อ books เราสามารถใช้คำสั่ง SQL เพื่อที่จะติดต่อกับฐานข้อมูล ในที่นี้จะแสดงการเพิ่มข้อมูลลงใน Table โดยมีขั้นตอนต่างๆดังนี้ 1. ดับเบิ้ลคลิ๊กที่ Table books ด้านขวา จะได้ SQL Editor ให้ป้อนคำสั่ง SQL เป็น INSERT INTO books VALUES ('123', 'JAVA', 'Numnonda', 2500.00); INSERT INTO books VALUES ('456', 'SOA', 'Numnonda', 3000.00) ; Web Services Exercises www.imcinstitute.com IMC Institute
  • 46. แล้ว คลิ๊กที่ icon สายฟ้าสีเหลือง ดังรูปที่ 5 หรือกด Ctrl+Shift+Enter เพื่อรันคำสั่ง SQL ทั้งหมด รูปที่ 5 การ Execute คำสั่งเพิ่มข้อมูลในตาราง 2. เราสามารถที่จะดูข้อมูลที่ป้อนเข้าไปได้ โดยการคลิ๊กขวาที่ Table ที่ชื่อ books เแล้วลือก Select Rows – Limit 1000 ดังรูปที่ 6 รูปที่ 6 การเรียกดูข้อมูลใน Table ชื่อ books 3. เมื่อติดตั้ง Database แล้วเราสามารถที่จะใช้ NetBeans เพื่อเชื่อมต่อกับ Database ได้โดยสำหรับ Netbeans 7.3 ให้เลือกที่แทป Services จะเห็น MySQL Driver ที่มีมาให้แล้ว ซึ่งถ้าขยายแทบ Data- bases > Drivers จะเห็น Driver ที่ชื่อ MySQL ให้ทำการคลิ๊กขวา แล้วเลือก Connect Using 4. ให้ทำการระบุค่าของ Host: และ Port: เป็น localhost และ 3306 (กรณีที่ไม่ได้เปลี่ยนแปลง port ตอน ติดตั้ง) ตามลำดับ 5. จากนั้นให้ระบุฐานข้อมูลที่ต้องการติดต่อ (ในที่นี้ระบุ test) 6. สำหรับ User Name: และ Password: ให้ใส่ค่าตามที่กำหนดไว้ในตอนติดตั้งโปรแกรม MySQL ซึ่งในที่ นี้จะมีค่าเป็น root และ root โดยไดอะล็อกจะแสดงผลได้ดังแสดงในรูปที่ 7 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 47. 47 รูปที่ 7 แสดงการกำหนดค่าให้กับ Database Connection 7. กด OK จากนั้นในหน้าต่าง Runtime ถ้าขยายแทบ Database จะเห็น Connection ใหม่ดังแสดงในรูป ที่ 8 รูปที่ 8 แสดง Connection ไปยัง test Database Web Services Exercises www.imcinstitute.com IMC Institute
  • 48. 5. ถ้าขยายแทบ jdbc:mysql://localhost:3306/test จะเห็นรายการ test > Tables > books คลิ๊กขวาแล้ว เลือก View Data... ดังแสดงในรูปที่ 9 รูปที่ 9 แสดงการเลือกเพื่อแสดงข้อมูลในตาราง books 6. จะเห็นข้อมูลที่อยู่ในตาราง books ดังแสดงในรูปที่ 10 รูปที่ 10 แสดงข้อมูลในตาราง Books Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 49. 49 Exercise 10: Java Web Services from Session Bean(1) แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรม Enterprise Java Bean (EJB) โดยจะเป็นการพัฒนา โปรแกรมบน GlassFish V3.1.2 เพื่อติดต่อกับฐานข้อมูล MySQL โปรแกรม EJB บน Application Server จะ ประกอบด้วย Entity Class ที่เชื่อมโยงกับตารางที่ชื่อ books และ Session Bean เพื่อเป็นโปรแกรมที่สามารถ เรียกใช้ Entity Class ในการจัดการเพิ่ม แก้ไข และ ลบข้อมูลของตาราง books ได้ ขั้นตอนในการพัฒนาโปรแกรม 1. สร้าง Enterprise Application Project 2. พัฒนา Entity Class 3. พัฒนา Session Bean 4. พัฒนา Web Application โดยขั้นตอนแรกเราจะต้องนำ MySQL Driver ไปใส่ไว้ใน GlassFish Server ก่อน เพื่อทำให้ GlassFish Server สามารถที่จะรันโปรแกรมที่มีการติดต่อกับ MySQL Database ได้ ให้ทำการดูตำแหน่งของ GlassFish จากใน NetBeans ดังนี้ 1. คลิ๊กที่ tab Services ใน NetBeans 2. คลิ๊กขวาที่ GlassFish Server 3.1.2 ที่อยู่ใน Servers แล้วเลือก Properties ดังแสดงในรูปที่ 1 รูปที่ 1 แสดงการหาตำแหน่งของ GlassFish 3. จากนั้นให้ดูตำแหน่งของ domain ใน GlassFish Server จาก Domains Folder: ดังแสดงในรูปที่ 2 Web Services Exercises www.imcinstitute.com IMC Institute
  • 50. รูปที่ 2 แสดงตำแหน่งของ Domain ใน GlassFish 4. ไปยังตำแหน่งของ Domain ใน GlassFish จากนั้นให้นำไฟล์ mysql-connector-java-5.1.19-bin.jar (MySQL Driver) ไปใส่ไว้ใน folder lib ดังแสดงในรูปที่ 3 รูปที่ 3 แสดงการใส่ MySQL Driver ภายใน Domain ของ GlassFish 5. Restart GlassFish โดยคลิ๊กขวาตรง GlassFish ที่อยู่ใน NetBeans แล้วเลือก Restart ดังแสดงในรูป ที่ 4 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 51. 51 รูปที่ 4 แสดงการ Restart GlassFish Server การสร้าง Enterprise Application Project เราจะกำหนดให้โปรแกรมนี้เป็นโปรแกม Enterprise Application ซึ่งมีทั้ง EJB Module และ Web Module ขั้นตอนแรกจะเป็นการสร้าง Project ใหม่ขึ้นมาใน NetBeans ซึ่งมีขั้นตอนดังนี้ 1. เลือกเมนู File => New Project 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java EE และเลือก Enterprise เป็น Enterprise Application แล้วกด Next 3. กำหนด Project Name เป็น BookApp แล้วเลือก Project Location เป็น folder ที่เราต้องการจะเก็บ project ไว้ กด Next 4. จากนั้นเลือก Server เป็น GlassFish V3.1.2 โดยกำหนด Jave EE Version: เป็น Java EE 6 และให้ เลือกช่อง Create EJB Module: และ Create Web Application Module: ดังแสดงในรูปที่ 5 Web Services Exercises www.imcinstitute.com IMC Institute
  • 52. รูปที่ 5 แสดงการสร้างโปรเจ็ค Enterprise Application 5. กด Finish การพัฒนาโปรแกรม Entity Class โปรแกรม EJB 3.0 จะใช้คลาสประเภท Entity เพื่อเป็นออปเจ็คที่สอดคล้องกับตารางในฐานข้อมูล ในที่ นี้เราจะสร้าง Entity Class ที่ชื่อ Books.java จากตารางที่ชื่อ books ซึ่งมีการสร้างมาก่อนแล้ว โดยมีขั้นตอน การพัฒนาโปรแกรมนี้มีดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-ejb จากนั้นเลือกคำสั่ง New > Other... 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity Classes from Database แล้วกด Next 3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น New Data Source… โดยใส่ชื่อ JNDI Name: jdbc/test และเลือกเชื่อมต่อไปยังฐานข้อมูล test ดังแสดงในรูปที่ 6 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 53. 53 รูปที่ 6 แสดงการสร้าง Data Source 4. กด OK จากนั้นกด Add All >> เพื่อเลือกตารางที่ต้องการนำมาสร้าง Entity Class ซึ่งจะได้ Selected Tables: เป็น books กด Next ดังแสดงในรูปที่ 7 Web Services Exercises www.imcinstitute.com IMC Institute
  • 54. รูปที่ 7 แสดงการสร้าง Entity Class จาก Data Source 5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity และให้ตรวจสอบว่า Crate Persistence Unit ได้ถูก เลือกไว้ ซึ่ง Persistence Unit จะเป็นตัวกำหนดให้ EJB Container ของ Application Server รู้ได้ว่า Entity Class จะถูกควบคุมด้วย Entity Manager ตัวใด และเป็นตัวกำหนด Data Source ที่จะใช้กับ Entity Manager นี้ 6. ไม่จำเป็นต้องเปลี่ยนค่าใดๆ จากนั้นกด Next ดังแสดงในรูปที่ 8 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 55. 55 รูปที่ 8 แสดงการสร้าง Entity Class 7. เมื่อกด Finish โปรแกรมจะสร้างไฟล์ที่ชื่อ persistence.xml ใน package: Configuration Files และ สร้างไฟล์ที่ชื่อ Books.java ใน package: entity การพัฒนาโปรแกรม Session Bean โปรแกรม EJB จะใช้ Session Bean ในการติดต่อกับโปรแกรมอื่นๆ ภายนอก EJB Container โดย โปรแกรมเหล่านั้นจะติดต่อกับ Entity Class โดยผ่าน Session Bean แบบฝึกหัดนี้จะสร้าง Session Bean ที่ ชื่อ BooksFacade.java ที่มี Business method ในการสร้าง แก้ไข ลบ และเรียกดูข้อมูลของตารางที่ชื่อ books โดยใช้ Entity Class ที่ชื่อ Books.java และ EntityManager โดยจะมีขั้นตอนการพัฒนาดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-ejb จากนั้นเลือกคำสั่ง New > Other… 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Session Beans for Entity Classes แล้วกด Next 3. จากนั้นกด Add All >> แล้วกด Next 4. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น sb และเลือก local ดังแสดงในรูปที่ 9 แล้วกด Finish Web Services Exercises www.imcinstitute.com IMC Institute
  • 56. รูปที่ 9 แสดงการสร้าง Session Bean 5. โปรแกรมจะสร้างไฟล์ที่ชื่อ BooksFacade.java และ BooksFacadeLocal.java ใน package ที่ชื่อ sb การพัฒนาโปรแกรม Web Application โปรแกรม EJB จะเป็นส่วนของ Business Logic เท่านั้น การพัฒนาส่วนของ Presentation จะต้องใช้ โปรแกรม Web Application หรือ Java SE แบบฝึกหัดนี้จะพัฒนาโปรแกรม Web Application เพื่อให้ผู้ใช้ป้อน isbn ของหนังสือในหน้าเว็บ findBook.html แล้วโปรแกรมจะเรียกโปรแกรม Servlet ที่ชื่อ ShowBook.java เพื่อ แสดงรายละเอียดของหนังสือดังกล่าวออกมา โดยมีขั้นตอนการพัฒนาดังนี้ 1. การพัฒนาโปรแกรม findBook.html โปรแกรม findBook.html เป็นเว็บเพจที่ใช้แสดงฟอร์มสำหรับให้ผู้ใช้ป้อน isbn ของหนังสือ โดยมีขั้น ตอนการพัฒนาดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-war จากนั้นเลือกคำสั่ง New > Other… 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web เลือก File Types: เป็น HTML แล้วกด Next 3. กำหนด HTML File Name: เป็น findBook แล้วกด Finish 4. เขียน source code ของไฟล์ findBook.html ตาม Listing ที่ 1 โดยเราสามารถที่จะลาก icon ประเภท HTML Forms ที่อยู่ในหน้าต่าง Palette เพื่อสามารถให้เขียนโปรแกรมได้ง่ายขึ้น Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 57. 57 Listing 1 โปรแกรม findBook.html <html> <head> <title></title> </head> <body> <form action="ShowBook" method="POST"> <h2>Search Book from ISBN </h2> Enter ISBN <input type="text" name="isbn" value="" /> <input type="submit" value="Find" /> </form> </body> </html> 2. การพัฒนาโปรแกรม ShowBook.java โปรแกรม ShowBook.java เป็นโปรแกรม Java Servlet ที่จะอ่านหมายเลข ISBN ที่ผู้ใช้ป้อนมาจาก หน้า findBook.html และจะเรียกเมธอด find() ของ session bean ที่ชื่อ BooksFacade เพื่อแสดงรายละเอียด ของหนังสือ โดยมีขั้นตอนการพัฒนาโปรแกรมดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด BookApp-war จากนั้นเลือกคำสั่ง New > Other... 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web เลือก File Types: เป็น Servlet แล้วกด Next 3. กำหนด File Name: เป็น ShowBook และ Package: เป็น servlets กด Next แล้วกด Finish 4. ในหน้าต่าง Editor ให้คลิ๊กขวาภายในเมธอด processRequest แล้วเลือก Insert Code… > Call En- terprise Bean… 5. ในไดอะล็อก Call Enterprise Bean เลือก BooksFacade ที่อยู่ใน BookApp-ejb แล้วกด OK 6. โปรแกรมจะเพิ่ม Source code ในการเรียก EJB ดังนี้ @EJB private BooksFacadeLocal booksFacade; 7. ให้ปรับปรุง Source code ในเมธอด processRequest ดังนี้ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet ShowBook</title>"); Web Services Exercises www.imcinstitute.com IMC Institute
  • 58. out.println("</head>"); out.println("<body>"); String isbn = request.getParameter("isbn"); Books book = booksFacade.find(isbn); out.println("Title: " + book.getTitle()+ "<BR>"); out.println("Author: " + book.getAuthor() + "<BR>"); out.println("Price: " + book.getPrice() + "<BR>"); out.println("</body>"); out.println("</html>"); out.close(); } 9. คลิ๊กขวาแล้วเลือก Fix Imports เพื่อทำการ import คลาสต่างๆ แล้ว Save โปรแกรม การทดสอบโปรแกรม 1. ทำการคลิ๊กขวาตรง BookApp เพื่อทำการ Clean and Build 2. Run โปรแกรม BookApp (ไม่ใช่ BookApp-ejb หรือ BookApp-war) 3. เลือก URL ของ Web Browser เป็น http://localhost:8080/BookApp-war/findBook.html ให้เราทดลอง ใส่ข้อมูล 4. เมื่อกดปุ่ม Find โปรแกรมก็จะแสดงรายละเอียดของหนังสือดังแสดงในรูปที่ 10 รูปที่ 10 แสดงตัวอย่างผลลัพธ์ที่ได้จากการรันโปรแกรม Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 59. 59 Exercise 11: Java Web Services from Session Bean (2) แบบฝึกหัดในบทนี้เป็นการพัฒนาโปรแกรม Web Services สำหรับ Java EE ซึ่งจะเป็นการพัฒนาบน Server ที่รันบน Java EE โดยชุดคำสั่ง JAX-WS ซึ่งในกรณีนี้จะแสดงขั้นตอนการใช้ NetBeans สร้าง Web Services Method ที่ชื่อ findEmployeeDetails จาก Session Bean โดย Service นี้จะเป็นการค้นหาข้อมูลของ employee จาก table ที่ชื่อ employees และ departments ในฐานข้อมูล MySQL ซึ่งมีขั้นตอนในการพัฒนา โปรแกรมดังนี้ 1. สร้าง Table ที่ชื่อ employees และ departments 2. สร้าง EJB Module 3. พัฒนาโปรแกรม Entity Class 4. พัฒนาโปรแกรม Session Bean 5. สร้าง Web Application 1. การสร้าง Table ที่ชื่อ employees และ departments ขั้นตอนแรกจะเป็นการสร้าง table โดยใช้โปรแกรม NetBeans ให้ทำการคัดลอก script ต่อไปนี้ แล้วใส่ ใน SQL Command Editor ของ NetBeans จากนั้นให้ทำการ Run SQL ดังแสดงในรูปที่ 1 create table `test`.DEPARTMENTS ( DEPARTMENT_ID DECIMAL(4) not null primary key, DEPARTMENT_NAME VARCHAR(30) not null ) ENGINE=INNODB; insert into departments values(90,'Executive'); create table `test`.EMPLOYEES ( EMPLOYEE_ID DECIMAL(6) not null primary key, FIRST_NAME VARCHAR(20), LAST_NAME VARCHAR(25) not null, DEPARTMENT_ID DECIMAL(4), FOREIGN KEY (DEPARTMENT_ID) REFERENCES DEPARTMENTS(DEPARTMENT_ID) ON UPDATE CASCADE ) ENGINE=INNODB; insert into employees values(100,'Steven','King',90); Web Services Exercises www.imcinstitute.com IMC Institute
  • 60. insert into employees values(101,'Neena','Kochhar',90); รูปที่ 1 แสดงการสร้าง Run SQL เพื่อสร้างตาราง โดยเมื่อตรวจสอบดูใน tables ของ test จะพบ table ที่ชื่อ employees และ departments ดังแสดงในรูปที่ 2 รูปที่ 2 แสดงตารางที่ถูกสร้างขึ้นมา การสร้าง EJB Module 1. เลือกเมนู File > New Project 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java EE และเลือก Enterprise เป็น EJB Mod- ule ดังแสดงในรูปที่ 3 แล้วกด Next Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 61. 61 รูปที่ 3 แสดงการสร้าง EJB Module 3. กำหนด Project Name เป็น EmployeeWS แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ เก็บไฟล์ไว้ แล้วกด Next 4. เลือก Server เป็น GlassFish V3.1.2 กำหนด Jave EE 6 แล้วกด Finish การพัฒนา Employees and Departments Entity Classes 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWS จากนั้นเลือกคำสั่ง New > Other 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity Classes from Database แล้วกด Next 3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น jdbc/test เพื่อเลือก การเชื่อมต่อไปยังตาราง test ในฐานข้อมูล MySQL 4. จากนั้นให้เลือกไปที่ตาราง EMPLOYEES แล้วกด Add > และคงการเลือก Include Related Tables ไว้ตาราง EMPLOYEES และ DEPARTMENTS จะถูกย้ายมาอยู่ใน Selected Tables: ดังแสดงในรูปที่ 4 แล้วกด Next Web Services Exercises www.imcinstitute.com IMC Institute
  • 62. รูปที่ 4 แสดงการสร้าง Entity Class สำหรับ EMPLOYEES และ DEPARTMENTS 5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity ดังแสดงในรูปที่ 5 จากนั้นกด Next และ Finish รูปที่ 5 แสดงการระบุ Package สำหรับ Entity Classs ที่สร้างขึ้นมา Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 63. 63 การพัฒนาโปรแกรม Session Bean โปรแกรม NetBeans จะมี Wizard เพื่อสร้าง Session Bean จาก Entity Class เพื่อสร้าง Business method ในการสร้าง แก้ไข ลบ และเรียกดูข้อมูลของ table ที่สอดคล้องกับ Entity Class โดยจะมีขั้นตอนการพัฒนาดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWS จากนั้นเลือกคำสั่ง New > Other... 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Session Beans for Entity Classes แล้วกด Next 3. ในไดอะล็อก New Session Beans for Entity Classes กด Add All >> แล้วคงการเลือก Include Ref- erenced Class ไว้ ดังแสดงในรูปที่ 6 จากนั้นกด Next รูปที่ 6 แสดงการสร้าง Session Beans For Entity Classes 4. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น sb และเลือก local ดังแสดงในรูปที่ 7 แล้วกด Finish Web Services Exercises www.imcinstitute.com IMC Institute
  • 64. รูปที่ 7 แสดงการสร้าง Session Bean ซึ่งเราจะได้ Entity Class ที่ชื่อ Employees, Departments และ Session Bean ที่ชื่อ AbstractFacade, Em- ployeesFacade, EmployeesFacadeLocal โดยเมื่อทำการ Clean and Build โปรเจ็คแล้ว จะมีโครงสร้างของ โปรเจ็ค ดังแสดงในรูปที่ 8 รูปที่ 8 แสดงโครงสร้างของโปรเจ็ค EmployeeWS ที่ถูกสร้างขึ้น การพัฒนา Web Service Methods: findEmployeeDetails ขั้นตอนนี้จะสร้าง Web Services Method ที่ชื่อ findEmployeeDetails ใน Session Bean ที่ชื่อ Em- ployeesFacade.java ที่พัฒนาจากแบบฝึกหัด Enterprise Java Bean โดย Services นี้จะคืนค่า first_name, last_name และ department_name ของ employee โดยการค้นหาจาก employee_id ที่ป้อนเข้ามา ซึ่งมีขั้น ตอนการพัฒนาดังนี้ Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 65. 65 1. เลือกไฟล์ EmployeesFacade.java แล้วคลิ๊กขวาเลือก Insert Code… > Add Business Method… จากนั้นให้ทำการใส่ข้อมูลดังแสดงในรูปที่ 3 รูปที่ 3 แสดงการเพิ่มเมธอดใน Session Bean 2. เพิ่ม source code โดยเพิ่มคำสั่ง annotation เพื่อประกาศให้ session bean นี้เป็น Web Service และ เมธอด findEmployeeDetails เป็น Web Services Method โดยมีคำสั่งดังนี้ @WebService @Stateless public class EmployeesFacade extends AbstractFacade<Employees> implements EmployeesFacadeLocal { @PersistenceContext(unitName = "EmployeeWSPU") private EntityManager em; protected EntityManager getEntityManager() { return em; } public EmployeesFacade() { Web Services Exercises www.imcinstitute.com IMC Institute
  • 66. super(Employees.class); } @WebMethod public List<String> findEmployeeDetails(int employee_id) { ArrayList<String> result = new ArrayList<String>(); Employees employee = em.find(Employees.class, employee_id); result.add("First name: " + employee.getFirstName()); result.add("Last name: " + employee.getLastName()); Departments department = employee.getDepartmentId(); result.add("Department name: " + department.getDepartmentName()); return result; } } 2. คลิ๊กขวาเลือก Fix Imports กด OK แล้วกดปุ่ม Save 3. ทำการ Clean and Build และ Deploy Project 4. จากนั้นให้คลิ๊กขวาที่ EmployeeFacade ใน Web Services แล้วเลือก Test Web Service 5. กด WSDL File ในหน้า Web Browser จากนั้นให้ทำการ copy URL ของ WSDL File ไว้ เช่น http://localhost:8080/EmployeesFacadeService/EmployeesFacade?WSDL การพัฒนาโปรแกรม Web Application เพื่อเรียกใช้ Web Service ขั้นตอนนี้จะเป็นการพัฒนา Web Application บน Apache Tomcat เพื่อเรียกใช้ Web Service ที่ชื่อ findEmployeeDetails โดยมีขั้นตอนการพัฒนาดังนี้ 1. เลือกเมนู File > New Project.. 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Web และ Projects เป็น Web Application แล้ว กด Next 3. กำหนด Project Name เป็น EmployeeWSClient จากนั้นเลือก Server เป็น Apache Tomcat 7.0.14.0 กำหนด Jave EE Version: เป็น Java EE 6 แล้วกด Finish 4. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด EmployeeWSClient จากนั้นเลือกคำสั่ง New > Other.. Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 67. 67 5. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web Services เลือก File Types: เป็น Web Ser- vice Client แล้วกด Next 6. ในไดอะล็อก New Web Service Client เลือก WSDL URL: และใส่ค่า http://localhost:8080/Employ- eesFacadeService/EmployeesFacade?WSDL 7. กด Finish โปรแกรมจะแสดง Web Service Reference โดยมี Service ชื่อ EmployeesFacade 8. คลิ๊กขวาที่โหนด EmployeeWSClient แล้วเลือก New > Servlet.. 9. กำหนด Servlet Name: เป็น EmployeeServlet ใส่ใน Package: servlets กด Next 10. กำหนด URL Pattern(s): เป็น /findEmployee แล้วกด Finish 11. ในหน้าต่าง Projects ลากโหนด findEmployeeDetails ลงในไฟล์ EmployeeServlet.java ของหน้าต่าง Editor โปรแกรมจะเพิ่ม source code ให้อัตโนมัติ ให้ปรับปรุง source code ในส่วนที่เรียกใช้ Web Service ดังนี้ protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { String id = request.getParameter("id"); int employee_id = Integer.parseInt(id); List<String> result = findEmployeeDetails(employee_id); for (String s : result) { out.print(s + "<BR>"); } } finally { out.close(); } } private static java.util.List<java.lang.String> findEmployeeDetails(int arg0) { sb.EmployeesFacadeService service = new sb.EmployeesFacadeService(); sb.EmployeesFacade port = service.getEmployeesFacadePort(); return port.findEmployeeDetails(arg0); } Web Services Exercises www.imcinstitute.com IMC Institute
  • 68. 12. กดปุ่ม Save การทดสอบโปรแกรม 1. ทำการ Build และ Deploy โปรเจ็ค EmployeeWSClient 2. Run โปรแกรม EmployeeServlet โดยให้ใส่ค่าของ URI เป็น /findEmployee?id=100 ดังแสดงในรูปที่ 4 จะได้ผลลัพธ์ดังแสดงในรูปที่ 5 รูปที่ 4 แสดงการกำหนดค่า id รูปที่ 5 แสดงผลลัพธ์ของ employee id=100 3. ทดลองเปลี่ยน URL ของ Web Browser เป็น http://localhost:8084/EmployeeWSClient/findEmployee?id=101 จะได้ผลลัพธ์ดังแสดงในรูปที่ 6 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 69. 69 รูปที่ 6 แสดงแสดงผลลัพธ์ของ employee id=101 4. อาจทำการสร้างไฟล์ findEmployee.html เพื่อรับค่า employee id จากผู้ใช้ โดยกำหนดให้ findEmploy- ee.html เรียกใช้ EmployeeServlet ซึ่งจะเรียกใช้ Web Service เพื่อแสดงผลลัพธ์อีกที Web Services Exercises www.imcinstitute.com IMC Institute
  • 70. Exercise 12: RESTful Web Services แบบฝึกหัดนี้เป็นการพัฒนาโปรแกรม RESTful Web Services โดยใช้ชุดคำสั่ง JAX-RS และ NetBeans เพื่อสร้าง Web Services ที่จะเรียกดูข้อมูลจากฐานข้อมูล MySQL ผ่านชุดคำสั่ง Java Persistence API (JPA) ขั้นตอนในการพัฒนาโปรแกรม 1. สร้าง Web Application Project 2. พัฒนา Entity Class 3. พัฒนา RESTful Web Service จาก Entity Class 4. ทดสอบ RESTful Web Service จาก Entity Class 1. การสร้าง Web Application Project เราจะกำหนดให้โปรแกรมนี้เป็นโปรแกม Web Application ขั้นตอนแรกจะเป็นการสร้าง Project ใหม่ ขึ้นมาใน NetBeans ซึ่งมีขั้นตอนดังนี้ 1. เลือกเมนู File > New Project 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และเลือก Project เป็น Web Applic- ation แล้วกด Next 3. กำหนด Project Name เป็น RestfulWS แล้วเลือก Project Location เป็น Directory ที่เราต้องการจะ เก็บ Project ไว้ กด Next 4. จากนั้นเลือก Server เป็น GlassFishV3.1 และ Java EE 6 แล้วกด Finish 2. การพัฒนา Entity Class ขั้นตอนนี้จะเป็นการสร้าง Entity Class ที่ชื่อ Employees.java ซึ่งจะเป็นออปเจ็คที่สอดคล้องกับตาราง ที่ชื่อ employees ใน Oracle โดยมีขั้นตอนการพัฒนาโปรแกรมดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง New > Other 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Persistence เลือก File Types: เป็น Entity Classes from Database แล้วกด Next Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 71. 71 3. ในไดอะล็อก New Entity Classes from Database ให้เลือก Data Source: เป็น jdbc/test 4. กด OK จากนั้นเลือกเฉพาะ books แล้วกด Add > 5. ในไดอะล็อกถัดไปให้ระบุ Package: เป็น entity และกด Finish 3. การพัฒนา Restful Web Service จาก Entity Class ขั้นตอนนี้จะเป็นการพัฒนา Restful Web Services เพื่อให้สามารถติดต่อกับฐานข้อมูลโดยผ่าน Entity Class ที่ พัฒนาขึ้นได้ โดยจะมีขั้นตอนการพัฒนาดังนี้ 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง New > Other 2. ในไดอะล็อก New File ให้เลือก Categories ที่ชื่อ Web Services เลือก File Types: เป็น RESTful Web Services from Entity Classes แล้วกด Next 4. ในไดอะล็อก New RESTful Web Services from Entity Class กด Add All >> จะได้ผลลัพธ์ดังแสดง ในรูปที่ 1 แล้วกด Next จากนั้นกด Finish รูปที่ 1 การเลือก Entity Class สำหรับ RESTful Web Service 4. การทดสอบ RESTful Web Service จาก Entity Class ขั้นตอนนี้จะเป็นการทดสอบ RESTful Web Services ที่พัฒนาขึ้นโดยจะมีขั้นตอนดังนี้ Web Services Exercises www.imcinstitute.com IMC Institute
  • 72. 1. เลือกหน้าต่าง Projects แล้วคลิ๊กขวาที่โหนด RestfulWS จากนั้นเลือกคำสั่ง Test Restful Web Services 2. โปรแกรม Browser จะแสดง uri ของ RESTful Web Services ให้คลิ๊กที่โหนด entity.books และคลิ๊ก ปุ่ม Test จะได้ผลลัพธ์ดังรูปที่ 2 รูปที่ 2 แสดงผลลัพธ์ของหนังสือทั้งหมดที่มีอยู่ 3. ให้คลิ๊กที่ {id} และทดลองป้อนข้อมูล id เป็น 111 แล้วกดปุ่ม Test จะได้ผลลัพธ์ตัวอย่างดังรูปที่ 3 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 73. 73 รูปที่ 3 แสดงผลลัพธ์ของหนังสือที่มี id (isbn) เท่ากับ 111 4. ทดลองเปลี่ยน method เป็น DELETE เพื่อทดลองทำการลบข้อมูลออกจากตาราง books Web Services Exercises www.imcinstitute.com IMC Institute
  • 74. Exercise 13: การพัฒนาโปรแกรมเว็บเพื่อติดต่อฐาน ข้อมูล MongoDB แบบฝึกหัดนี้จะเป็นการพัฒนาโปรแกรม Web Application โดยใช้ Java Servlet เพื่อเชื่อมต่อกับ ฐาน ข้อมูลที่เป็น NoSQL อย่าง MongoDB ซึ่งเป็นฐานข้อมูลที่เก็บข้อมูลแบบ Document ในรูปแบบของ JSON และมีความสามารถในการเก็บข้อมูลขนาดใหญ่ได้ ขั้นตอนในการพัฒนาโปรแกรม 1. ติดตั้ง MongoDB 2. ทดลองใช้ MongoDB 3. เขียนโปรแกรม Java Servlet เพื่อเชื่อมต่อกับ MongoDB 1. การติดตั้ง MongoDB โปรแกรมฐานข้อมูล MongoDB สามารถทำงานในระบบปฎิบัติการที่หลากหลายทั้ง Windows, Mac OS หรือ Linux สำหรับบนระบบปฎิบัติการ Windows สามารถติดตั้งได้โดยการดาวน์โหลดไฟล์ Binary จาก เว็บไซต์ http://www.mongodb.org/downloads ซึ่งเมื่อทำการดาวน์โหลดไฟล์ดังกล่าวแล้ว ให้ทำการ unzip เก็บไฟล์ไว้ในไดเร็กทอรี่ที่ต้องการ โดยเราจะมีไฟล์ต่างๆ ดังรูปที่ 1 Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 75. 75 รูปที่ 1 ไฟล์ไบนารี่ต่างๆ ของ MongoDB ซึ่งไฟล์ที่สำคัญก็คือ  mongod.exe ที่เป็น Database Server  mongo.exe ที่เป็นหน้าจอของ admin โดย Default MongoDB จะเก็บข้อมูลไว้ที่ไดเร็กทอรี่ datadb ซึ่งเราจะต้องไปสร้างไดเร็กทอรี่ดังกล่าว ภายใต้ Drive C 2. การทดลองใช้ MongoDB เราสามารถที่จะทดลองการใช้งาน MongoDB โดยการเปิดโปรแกรม Mongo.exe ซึ่งก็จะเป็นโปรแกรม command shell ของ administrator และโดย Default ก็จะกำหนดใช้ฐานข้อมูลที่ชื่อ test ซึ่งเราสามารถที่จะ แสดงฐานข้อมูลที่ใช้อยู่ได้ โดยการพิมพ์คำสั่ง > db Web Services Exercises www.imcinstitute.com IMC Institute
  • 76. คำสั่งที่จะแสดงรายชื่อฐานข้อมูล (database) ทั้งหมดคือ >show dbs เราสามารถที่จะสร้างฐานข้อมูลใหม่ที่ชื่อว่า mydatabase โดยใช้คำสั่ง >use mydatabase คำสั่งที่จะแสดง Tables ทั้งหมดในฐานข้อมูลคือ >show collections และเราสามารถที่จะเรียกดูคำสั่งในการช่วยเหลือโดย >help สำหรับในตัวอย่างนี้เราจะทำการทดลองสร้างข้อมูลของหนังสือ สองเล่มดังนี้ > db.books.insert({isbn:"555123", author:"thanachart", title:"Introduction to MongoDB", price:1200}) และสามารถทำการเพิ่มข้อมูลได้โดยคำสั่งต่อไปนี้ > new_book = {isbn:"555124", author:"James Gosling", title: "Java SE", price: 1400} > db.books.insert(new_book) เราสามารถที่จะดูข้อมูลของหนังสือทั้งหมดได้จากคำสั่ง > db.books.find() ซึ่งก็จะได้ผลลัพธ์ดังนี้ { "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1200 } { "_id" : ObjectId("511fb24e7c199204a9f733a6"), "isbn" : "555124", "author" : "James Gosling", "title" : "Java SE", "price" : 1400 } Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 77. 77 ทั้งนี้ id จะเป็น index ในการระบุหมายเลขของข้อมูล นอกจากนี้เราสามารถที่จะค้นหาข้อมูลสำหรับ รายการใดๆ ได้เช่น การค้นหาตามชื่อผู้แต่ง > db.books.find({author:"thanachart"}) หรืออาจต้องการค้นชื่อหนังสือที่มีคำว่า Mongo > db.books.find({title:/Mongo/}) เราสามารถที่จะ update ข้อมูล เช่นต้องการเปลี่ยนราคาของหนังสือที่แต่งโดย thanachart เป็น 1300 โดยใช้คำ สั่ง > db.books.update({author:"thanachart"},{$set: {price:1300}}) เราจะลองทำการเพิ่ม comment ของหนังสือเช่นมีผู้อ่านที่ชื่อ Somchai อาจมาให้ความเห็นว่าหนังสือของ James Gosling เป็น “good reading book” โดยเราอาจใช้คำสั่งดังนี้ > new_comment = {reader:"Somchai", date: new Date(), text: "good reading book"} > db.books.update({author:/James/},{$push: {comment:new_comment}}) ซึ่งเราจะได้ข้อมูลนี้ใหม่เป็น { "_id" : ObjectId("511fb0387c199204a9f733a5"), "isbn" : "555123", "author" : "thanachart", "title" : "Introduction to MongoDB", "price" : 1300 } { "_id" : ObjectId("511fb24e7c199204a9f733a6"), "author" : "James Gosling", "comment" : [ { "reader" : "Somchai", "date" : ISODate("2013-02-16T16:45:07.309Z"), "text" : "good reading book" } ], "isbn" : "555124", "price" : 1400, "title" : "Java SE" } 3. การเขียนโปรแกรม Java Servlet เพื่อเชื่อมต่อกับ MongoDB เราสามารถที่จะเขียนโปรแกรมเชื่อมต่อกับฐานข้อมูล MongoDB ได้หลายแบบ แต่ในที่นี้จะใช้ Mon- goDB Driver ที่สามารถจะดาวน์โหลดมาได้จาก https://github.com/mongodb/mongo-java-driver/downloads ในที่นี้จะสาธิตการเพิ่มข้อมูลลงใน MongoDB โดยเราจะให้มี โปรแกรม addBook.html และ thanky- ou.html ดัง Listing ที่ 1 และ 2 และทำการเขียนโปรแกรม Servlet โดยมีขั้นตอนดังนี้ Web Services Exercises www.imcinstitute.com IMC Institute
  • 78. 1. เลือกเมนู File > New Project 2. ในไดอะล็อก New Project ให้เลือก Categories เป็น Java Web และ Projects เป็น Web Application แล้วกด Next 3. กำหนด Project Name เป็น WebBaseDB แล้วเลือก Project Location เป็น folder ที่เราต้องการจะ เก็บ Project ไว้ แล้วกด Next 4. เลือก Server เป็น Apache Tomcat กำหนด Jave EE Version: เป็น Java EE 6 Web แล้วกด Finish 5. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New > HTML กำหนด HTML File Name: เป็น addBook แล้วกด Finish 6. เขียน source code ของไฟล์ addBook.html ตาม Listing ที่ 1 Listing ที่ 1 โปรแกรม addBook.html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Add a new book</title> </head> <body><h1>Add a new book</h1><P> <form action="MongoDBServlet" method="POST"> 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> 7. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New > HTML กำหนด HTML File Name: เป็น thankyou แล้วกด Finish 8. เขียน source code ของไฟล์ thankyou.html ตาม Listing ที่ 2 Listing ที่ 2 โปรแกรม thankyou.html <html> <head> <title>Thank you</title> </head> <body> <H1>Thank you for inserting data </H1> </body> </html> Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 79. 79 9. คลิ๊กขวาที่โหนด WebBaseDB จากนั้นเลือกคำสั่ง New → Servlet กำหนด Java Package เป็น controller, Class Name เป็น MongoDBServlet แล้วกด Finish 10. copy ไฟล์ mongo-2.10.1.jar ไปไว้ที่ไดเร็กทอรี่ โดยให้ Copy ไปวางที่ directory /lib ของ Apache Tomcat (ซึ่ง Default อยู่ที่ C:Program FilesApache Software FoundationTomcat 6.0lib) 11. ในหน้าต่าง editor ให้แก้ไข source code ของไฟล์ MongoDBServlet.java ให้เป็นไปตาม Listing ที่ 3 Listing ที่ 3 โปรแกรม MongoDBServlet.java package controller; import java.io.IOException; import java.io.PrintWriter; import java.net.UnknownHostException; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mongo; /** * Servlet implementation class MongoDBServlet */ @WebServlet("/MongoDBServlet") public class MongoDBServlet extends HttpServlet { private static final long serialVersionUID = 1L; Mongo m = null; public void init() { try { m = new Mongo( "localhost" ); Web Services Exercises www.imcinstitute.com IMC Institute
  • 80. System.out.println("Connected"); } catch (Exception ex) { System.out.println(ex); } } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Add a new book</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1> Add a new book </h1>"); try { String isbn = request.getParameter("isbn"); String author = request.getParameter("author"); String title = request.getParameter("title"); String priceStr = request.getParameter("price"); float price = Float.parseFloat(priceStr); DB db = m.getDB( "test" ); BasicDBObject book = new BasicDBObject(); book.put("isbn", isbn); book.put("author", author); book.put("title", title); book.put("price", price); DBCollection coll = db.getCollection("books"); coll.insert(book); RequestDispatcher obj = request.getRequestDispatcher("thanky- ou.html"); obj.forward(request, response); } catch (UnknownHostException ex) { out.println("Error " + ex); return; } out.println("</body>"); out.println("</html>"); Java Web Services Exercises Thanachart and Thanisa Numnonda
  • 81. 81 out.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse re- sponse) throws ServletException, IOException { processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse re- sponse) throws ServletException, IOException { processRequest(request, response); } } 4 การทดสอบโปรแกรม 1. ทำการ Deploy โปรแกรม WebBaseDB 2. เรียกใช้งานหน้า addBook.html แล้วทดสอบกรอกข้อมูล 3. ไปที่โปรแกรม admin ของ MongoDB แล้วเรียกคำสั่ง db.books.find() จะเห็นข้อมูลใหม่ที่ป้อนเข้ามา Web Services Exercises www.imcinstitute.com IMC Institute