็hand-on exercise: java web services using eclipse + tomcat & netbeans + glassfish

81
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

Upload: imc-institute

Post on 15-Jan-2015

2.338 views

Category:

Technology


8 download

DESCRIPTION

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

TRANSCRIPT

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

1

Hand-onExercises

Java Web Services

Using Eclipse, Tomcat, NetBeans IDE and GlassFish Server

Assoc.Prof.Dr. Thanachart Numnondaand

Assist.Prof.Dr. Thanisa Kruawaisayawan

April 2014

Web Services Exercises www.imcinstitute.com IMC Institute

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

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 Project2. ในชอง Initial WSDL ใหใส http://www.webservicex.com/CurrencyConvertor.asmx?wsdl ดงแสดง

ในรปท 1

รปท 1 แสดงการสราง soapUI Project ใน soapUI

Web Services Exercises www.imcinstitute.com IMC Institute

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

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

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

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

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

รปท 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

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

7

6. พฒนา source code ดง Listing ท 17. ทำการรนโปรแกรม จะไดตวอยางผลลพธแสดงราคานำมนลาสด ดงแสดงในรปท 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

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

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 Servlet2. 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

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

9

1. เลอกเมน File > New > Project > Web > Dynamic Web Project2. กำหนด 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 > Interface2. กำหนดคา package เปน com.taxws และ name เปน TaxServiceInterface3. ปรบปรงโปรแกรม TaxServiceInterface ดงน

package com.taxws;

import javax.jws.WebMethod;import javax.jws.WebParam;import javax.jws.WebService;

@WebServicepublic interface TaxServiceInterface {

@WebMethod public double calculateTax(@WebParam(name = "income") double income) ;

}

4. ทำการพฒนาโปรแกรม TaxService โดยคลกขวาทแทป TaxWSDemo แลวเลอกคำสง New > Class5. กำหนดคา package เปน com.taxws และ name เปน TaxService6. ปรบปรงโปรแกรม 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

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

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 แลวกด Next2. กำหนด File Name เปน web.xml แลวกด Finish3. ปรบปรงโปรแกรม 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

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

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 Server2. กำหนด url นบน Web Browser >> http://localhost:8080/TaxWSDemo/taxws จะแสดงผลลพธดงน

3. ทดสอบการเรยก TaxService จาก soap UI โดย เลอกเมน File > New soapUI Project4. กำหนดคา Project Name เปน TaxWSClient และ Initial WSDL

เปน http://localhost:8080/TaxWSDemo/taxws?wsdl แลวกดปม OK5. ในหนาตาง Projects ขยายโหนด TaxWSClient >> TaxServicePortBinding >> calculateTax6. ดบเปลคลก 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

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

</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 ทชอ TaxWSClient2. ใชโปรแกรม 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

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

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

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

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 {

@ResourceWebServiceContext wsctx;

@WebMethodpublic double calculateTax(@WebParam(name = "income") double income) {

MessageContext mctx = wsctx.getMessageContext();

// get detail from request headersMap 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 usernameusername = userList.get(0).toString();

}

if (passList != null) {// get passwordpassword = passList.get(0).toString();

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

15

}

// Should validate username and password with databaseif (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

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

การทดสอบโปรแกรม

ทำการทดสอบโปรแกรม ตามขนตอนดงน

1. ทำการรนโปรเจค TaxWSDemo ใหมโดยใชคำสง Run As > Run On Server2. ทำการรนโปรแกรม TaxWSClient.java จะเหนวาไดผลลพธอยางถกตอง3. ทดลองเปลยนคา username หรอ password ในโปรแกรม TaxWSClient.java แลวทดลองรน

โปรแกรมใหม จะเหนวาผลลพธเปลยนไป

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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.. ของโปรแกรม Eclipse3. ในไดอะลอก Prefernces เลอก Web Services > Axis2 Preferences และกำหนดตำแหนงของ Axis2

runtime location ใหตรงกบไดเรกทอรททำการ unzip ไฟล axis2-1.x.x.zip ดงรป

Web Services Exercises www.imcinstitute.com IMC Institute

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

การพฒนาโปรแกรม Axis2 Web Services

ขนตอนนจะเปนการพฒนา Dynamic Web Project ใหเปน Axis2 Web Services สำหรบการคำนวณภาษโดยมขนตอนดงน

1. เลอกเมน File > New > Project > Web > Dynamic Web Project2. กำหนด Project Name เปน TaxAxisWS แลวเลอก Target Runtime เปน Apache Tomcat 7

กำหนด Dynamic Web Module Version เปน 2.5 แลวกด Finish (หมายเหต กรณของ Axis เราจะตองเลอก Web Module เวอรชน 2.x เทานน)

3. คลกขวาทโหนด TaxAxisWS แลวเลอกคำสง Properties4. ในไดอะลอก Properties for TaxAxisWS ใหเลอก Project Facets แลวเลอกชอง Axis2 Web

Services แลวกด Apply ดงรป

5. ทำการพฒนาโปรแกรม TaxService โดยคลกขวาทแทป TaxWSDemo แลวเลอกคำสง New > Class6. กำหนดคา package เปน com.taxws และ name เปน TaxService7. ปรบปรงโปรแกรม TaxService ดงน

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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

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

10. กด Next แลวเลอกคาตามทตงไว

11. กด Next โปรแกรมจะทำการตดตง Web Service ลงบน Tomcat แลวกด Finish12. เราสามารถเรยกด Service ทตดตงไดโดยการปอน url ท web browser ดงน

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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

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

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 Project2. กำหนด Project Name เปน RESTfulDemo แลวเลอก Target Runtime เปน Apache Tomcat 7

กำหนด Dynamic Web Module Version เปน 3.0 แลวกด Next3. ในหนา web module ใหเลอกชอง Generate web.xml deployment descriptor แลวกด Finish4. 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

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

23

5. เพม jar file เหลานลงใน Build Path โดยการคลกขวาทฌหนด RestfulDemo แลวเลอก Properties แลวเลอก Java Build Path กด Add JARs.. แลวเลอกไฟลตางๆดงรป แลวกด OK

6. ทำการพฒนาโปรแกรม Hello โดยคลกขวาทแทป RESTfulDemo แลวเลอกคำสง New > Class7. กำหนดคา package เปน com.rs และ name เปน Hello8. ปรบปรงโปรแกรม 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

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

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 Server11. เรยกด 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

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

25

1. สราง Java Project ทชอ RESTfulClient2. ทำการกำหนดคา Project Build Path ตามขนตอนแบบเดยวกบการพฒนาโปรเจค RESTfulDemo3. สราง 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 interfacesSystem.out.println(service.path("rest").path("hello")

.accept(MediaType.TEXT_PLAIN).get(ClientResponse.class)

.toString());// Get plain textSystem.out.println(service.path("rest").path("hello")

.accept(MediaType.TEXT_PLAIN).get(String.class));// Get XMLSystem.out.println(service.path("rest").path("hello")

.accept(MediaType.TEXT_XML).get(String.class));// The HTMLSystem.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

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

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 Project2. กำหนด Project Name เปน DataWSPrj แลวเลอก Target Runtime เปน Apache Tomcat 7

กำหนด Dynamic Web Module Version เปน 3.0 แลวกด Next3. ทำการ copy ไฟล Jersey JARs และกำหนดคา Project Build Path4. ทำการพฒนาโปรแกรมตางดง source code ตาม Listing ท 5 - 75. ทำการรนโปรเจคโดยใชคำสง Run As > Run On Server6. เรยกด Service ทตดตงไดโดยการปอน url ท web browser เปน

http://localhost:8080/DataWSPrj/rest/todo

Listing ท 5 โปรแกรม Todo.java

package com.rest.model;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElementpublic 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

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

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

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

<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.APPLICATION_XML).get(String.class)); }

private static URI getBaseURI() { return UriBuilder.fromUri("http://localhost:8080/DataWSPrj").build(); }

}

ทดลองรนโปรแกรมจะไดผลลพธดงน

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 Servlet4. 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 Project2. ในไดอะลอก New Project ใหเลอก Categories เปน Java Web และ Projects เปน Web

Application แลวกด Next3. กำหนด Project Name เปน TaxWSDemo แลวเลอก Project Location เปน folder ทเราตองการจะ

เกบ Project ไว 4. จากนนเลอก Server เปน GlassFish V3.1.2 กำหนด Jave EE Version: เปน Java EE 6 แลวกด

Finish5. คลกขวาทโหนด TaxWSDemo จากนนเลอกคำสง New > Other… ใหเลอก Categories เปน Web

Services และเลอก File Types เปน Web Service แลวกด Next6. ในไดอะลอก New Web Service กำหนด Web Service Name: เปน TaxService และ Package:

เปน ws แลวกด Finish7. โปรแกรมจะประกาศ Web Services ทชอ TaxService ในโหนด Web Services ของหนาตาง Project

และหนาตาง Editor จะแสดงไฟลทชอ TaxService.java8. ในหนาตาง Projects ขยายโหนด TaxWSDemo > Web Services แลวคลกขวาทโหนด TaxService

เลอกคำสง Add Operation…

Web Services Exercises www.imcinstitute.com IMC Institute

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

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

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

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

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

รปท 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

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

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

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

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

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

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

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

รปท 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

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

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

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

แลว คลกท 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

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

47

รปท 7 แสดงการกำหนดคาใหกบ Database Connection7. กด OK จากนนในหนาตาง Runtime ถาขยายแทบ Database จะเหน Connection ใหมดงแสดงในรป

ท 8

รปท 8 แสดง Connection ไปยง test Database

Web Services Exercises www.imcinstitute.com IMC Institute

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

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

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

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 Project2. พฒนา Entity Class3. พฒนา Session Bean4. พฒนา Web Application

โดยขนตอนแรกเราจะตองนำ MySQL Driver ไปใสไวใน GlassFish Server กอน เพอทำให GlassFish Serverสามารถทจะรนโปรแกรมทมการตดตอกบ MySQL Database ได ใหทำการดตำแหนงของ GlassFish จากใน NetBeans ดงน

1. คลกท tab Services ใน NetBeans2. คลกขวาท GlassFish Server 3.1.2 ทอยใน Servers แลวเลอก Properties ดงแสดงในรปท 1

รปท 1 แสดงการหาตำแหนงของ GlassFish3. จากนนใหดตำแหนงของ domain ใน GlassFish Server จาก Domains Folder: ดงแสดงในรปท 2

Web Services Exercises www.imcinstitute.com IMC Institute

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

รปท 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

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

51

รปท 4 แสดงการ Restart GlassFish Server

การสราง Enterprise Application Project

เราจะกำหนดใหโปรแกรมนเปนโปรแกม Enterprise Application ซงมทง EJB Module และ Web Module ขนตอนแรกจะเปนการสราง Project ใหมขนมาใน NetBeans ซงมขนตอนดงน

1. เลอกเมน File => New Project2. ในไดอะลอก New Project ใหเลอก Categories เปน Java EE และเลอก Enterprise เปน Enterprise

Application แลวกด Next3. กำหนด Project Name เปน BookApp แลวเลอก Project Location เปน folder ทเราตองการจะเกบ

project ไว กด Next4. จากนนเลอก 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

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

รปท 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 แลวกด Next3. ในไดอะลอก New Entity Classes from Database ใหเลอก Data Source: เปน New Data Source…

โดยใสชอ JNDI Name: jdbc/test และเลอกเชอมตอไปยงฐานขอมล test ดงแสดงในรปท 6

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

53

รปท 6 แสดงการสราง Data Source

4. กด OK จากนนกด Add All >> เพอเลอกตารางทตองการนำมาสราง Entity Class ซงจะได Selected Tables: เปน books กด Next ดงแสดงในรปท 7

Web Services Exercises www.imcinstitute.com IMC Institute

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

รปท 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

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

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 แลวกด Next3. จากนนกด Add All >> แลวกด Next4. ในไดอะลอกถดไปใหระบ Package: เปน sb และเลอก local ดงแสดงในรปท 9 แลวกด Finish

Web Services Exercises www.imcinstitute.com IMC Institute

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

รปท 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 แลวกด Next3. กำหนด HTML File Name: เปน findBook แลวกด Finish4. เขยน source code ของไฟล findBook.html ตาม Listing ท 1 โดยเราสามารถทจะลาก icon ประเภท

HTML Forms ทอยในหนาตาง Palette เพอสามารถใหเขยนโปรแกรมไดงายขน

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 แลวกด Next3. กำหนด File Name: เปน ShowBook และ Package: เปน servlets กด Next แลวกด Finish4. ในหนาตาง Editor ใหคลกขวาภายในเมธอด processRequest แลวเลอก Insert Code… > Call En-

terprise Bean…5. ในไดอะลอก Call Enterprise Bean เลอก BooksFacade ทอยใน BookApp-ejb แลวกด OK6. โปรแกรมจะเพม 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

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

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 Build2. 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

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

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 และ departments2. สราง EJB Module3. พฒนาโปรแกรม Entity Class4. พฒนาโปรแกรม Session Bean5. สราง 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

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

insert into employees values(101,'Neena','Kochhar',90);

รปท 1 แสดงการสราง Run SQL เพอสรางตาราง

โดยเมอตรวจสอบดใน tables ของ test จะพบ table ทชอ employees และ departments ดงแสดงในรปท 2

รปท 2 แสดงตารางทถกสรางขนมา

การสราง EJB Module

1. เลอกเมน File > New Project2. ในไดอะลอก New Project ใหเลอก Categories เปน Java EE และเลอก Enterprise เปน EJB Mod-

ule ดงแสดงในรปท 3 แลวกด Next

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 > Other2. ในไดอะลอก New File ใหเลอก Categories ทชอ Persistence เลอก File Types: เปน Entity Classes

from Database แลวกด Next3. ในไดอะลอก New Entity Classes from Database ใหเลอก Data Source: เปน jdbc/test เพอเลอก

การเชอมตอไปยงตาราง test ในฐานขอมล MySQL4. จากนนใหเลอกไปทตาราง EMPLOYEES แลวกด Add > และคงการเลอก Include Related Tables

ไวตาราง EMPLOYEES และ DEPARTMENTS จะถกยายมาอยใน Selected Tables: ดงแสดงในรปท4 แลวกด Next

Web Services Exercises www.imcinstitute.com IMC Institute

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

รปท 4 แสดงการสราง Entity Class สำหรบ EMPLOYEES และ DEPARTMENTS

5. ในไดอะลอกถดไปใหระบ Package: เปน entity ดงแสดงในรปท 5 จากนนกด Next และ Finish

รปท 5 แสดงการระบ Package สำหรบ Entity Classs ทสรางขนมา

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 แลวกด Next3. ในไดอะลอก 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

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

รปท 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

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

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

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

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 แลวกดปม Save3. ทำการ Clean and Build และ Deploy Project4. จากนนใหคลกขวาท EmployeeFacade ใน Web Services แลวเลอก Test Web Service5. กด 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 แลว

กด Next3. กำหนด Project Name เปน EmployeeWSClient จากนนเลอก Server เปน Apache Tomcat

7.0.14.0 กำหนด Jave EE Version: เปน Java EE 6 แลวกด Finish4. เลอกหนาตาง Projects แลวคลกขวาทโหนด EmployeeWSClient จากนนเลอกคำสง New > Other..

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 ชอ EmployeesFacade8. คลกขวาทโหนด EmployeeWSClient แลวเลอก New > Servlet..9. กำหนด Servlet Name: เปน EmployeeServlet ใสใน Package: servlets กด Next10. กำหนด URL Pattern(s): เปน /findEmployee แลวกด Finish11. ในหนาตาง 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

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

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

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

69

รปท 6 แสดงแสดงผลลพธของ employee id=101

4. อาจทำการสรางไฟล findEmployee.html เพอรบคา employee id จากผใช โดยกำหนดให findEmploy-ee.html เรยกใช EmployeeServlet ซงจะเรยกใช Web Service เพอแสดงผลลพธอกท

Web Services Exercises www.imcinstitute.com IMC Institute

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

Exercise 12: RESTful Web Services

แบบฝกหดนเปนการพฒนาโปรแกรม RESTful Web Services โดยใชชดคำสง JAX-RS และ NetBeans เพอสราง Web Services ทจะเรยกดขอมลจากฐานขอมล MySQL ผานชดคำสง Java Persistence API (JPA)

ขนตอนในการพฒนาโปรแกรม1. สราง Web Application Project2. พฒนา Entity Class3. พฒนา RESTful Web Service จาก Entity Class4. ทดสอบ RESTful Web Service จาก Entity Class

1. การสราง Web Application Project

เราจะกำหนดใหโปรแกรมนเปนโปรแกม Web Application ขนตอนแรกจะเปนการสราง Project ใหมขนมาใน NetBeans ซงมขนตอนดงน

1. เลอกเมน File > New Project2. ในไดอะลอก New Project ใหเลอก Categories เปน Java Web และเลอก Project เปน Web Applic-

ation แลวกด Next3. กำหนด Project Name เปน RestfulWS แลวเลอก Project Location เปน Directory ทเราตองการจะ

เกบ Project ไว กด Next4. จากนนเลอก Server เปน GlassFishV3.1 และ Java EE 6 แลวกด Finish

2. การพฒนา Entity Class

ขนตอนนจะเปนการสราง Entity Class ทชอ Employees.java ซงจะเปนออปเจคทสอดคลองกบตารางทชอ employees ใน Oracle โดยมขนตอนการพฒนาโปรแกรมดงน

1. เลอกหนาตาง Projects แลวคลกขวาทโหนด RestfulWS จากนนเลอกคำสง New > Other2. ในไดอะลอก New File ใหเลอก Categories ทชอ Persistence เลอก File Types: เปน Entity

Classes from Database แลวกด Next

Java Web Services Exercises Thanachart and Thanisa Numnonda

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

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 > Other2. ในไดอะลอก 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 Service4. การทดสอบ RESTful Web Service จาก Entity Class

ขนตอนนจะเปนการทดสอบ RESTful Web Services ทพฒนาขนโดยจะมขนตอนดงน

Web Services Exercises www.imcinstitute.com IMC Institute

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

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

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

73

รปท 3 แสดงผลลพธของหนงสอทม id (isbn) เทากบ 111

4. ทดลองเปลยน method เปน DELETE เพอทดลองทำการลบขอมลออกจากตาราง books

Web Services Exercises www.imcinstitute.com IMC Institute

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

Exercise 13: การพฒนาโปรแกรมเวบเพอตดตอฐานขอมล MongoDB

แบบฝกหดนจะเปนการพฒนาโปรแกรม Web Application โดยใช Java Servlet เพอเชอมตอกบ ฐานขอมลทเปน NoSQL อยาง MongoDB ซงเปนฐานขอมลทเกบขอมลแบบ Document ในรปแบบของ JSON และมความสามารถในการเกบขอมลขนาดใหญได

ขนตอนในการพฒนาโปรแกรม1. ตดตง MongoDB2. ทดลองใช 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

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

75

รปท 1 ไฟลไบนารตางๆ ของ MongoDB

ซงไฟลทสำคญกคอ mongod.exe ทเปน Database Server mongo.exe ทเปนหนาจอของ admin

โดย Default MongoDB จะเกบขอมลไวทไดเรกทอร \data\db ซงเราจะตองไปสรางไดเรกทอรดงกลาว ภายใต Drive C

2. การ ทดลองใช MongoDB

เราสามารถทจะทดลองการใชงาน MongoDB โดยการเปดโปรแกรม Mongo.exe ซงกจะเปนโปรแกรม command shell ของ administrator และโดย Default กจะกำหนดใชฐานขอมลทชอ test ซงเราสามารถทจะ แสดงฐานขอมลทใชอยได โดยการพมพคำสง

> db

Web Services Exercises www.imcinstitute.com IMC Institute

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

คำสงทจะแสดงรายชอฐานขอมล (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

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

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

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

1. เลอกเมน File > New Project2. ในไดอะลอก New Project ใหเลอก Categories เปน Java Web และ Projects เปน Web

Application แลวกด Next3. กำหนด Project Name เปน WebBaseDB แลวเลอก Project Location เปน folder ทเราตองการจะ

เกบ Project ไว แลวกด Next4. เลอก Server เปน Apache Tomcat กำหนด Jave EE Version: เปน Java EE 6 Web แลวกด

Finish 5. คลกขวาทโหนด WebBaseDB จากนนเลอกคำสง New > HTML กำหนด HTML File Name: เปน

addBook แลวกด Finish6. เขยน 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

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

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 Files\Apache Software Foundation\Tomcat 6.0\lib\)

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

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

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

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

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