็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
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
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
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
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
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
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