Your SlideShare is downloading. ×
  • Like
็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + GlassFish
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 2,524 views
Published

็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + GlassFish by IMC Institute [in Thai]

็Hand-on Exercise: Java Web Services using Eclipse + Tomcat & NetBeans + GlassFish by IMC Institute [in Thai]

Published in Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,524
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
158
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 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