Contenu connexe
Similaire à Java Web Programming Using NetBeans 6.5
Similaire à Java Web Programming Using NetBeans 6.5 (20)
Plus de Thanachart Numnonda
Plus de Thanachart Numnonda (20)
Java Web Programming Using NetBeans 6.5
- 1. 1
Hand-on
Exercises
การเขยนโปรแกรมเวบ
Java Servlet / JSP
โดยใช
GlassFish and NetBeans 6.5
Dr.Thanachart Numnonda
and
Asst Prof.Thanisa Kruawaisayawan
July 2009
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 2. 2
สารบญ
Exercise 1 การสรางโปรเจค Web Application และไฟล HTML........................................................................5
1.1 การสราง Web Application Project..................................................................................................5
1.2 การพฒนาโปรแกรม addCustomer.html................................................................................................9
1.3 การทดสอบโปรแกรม..........................................................................................................................11
Exercise 2 การเขยนโปรแกรม Java Servlet เพ!ออ"านค"าพาราม#เตอร.........................................................................13
2.1 การพฒนาโปรแกรม CustomerServlet.java.........................................................................................13
2.1.1 การอ"านค"าพาราม#เตอรจาก addCustomer.html ...............................................................................13
2.1.2 การแสดงรายละเอยดของค"าต"างๆ.......................................................................................................14
2.2 ข&นตอนการพฒนาโปรแกรม CustomerServlet.java ...............................................................................14
2.3 การทดสอบโปรแกรม..........................................................................................................................19
2.4 การปรบปร'งโปรแกรมเพ!อใหแสดงผลภาษาไทยและเรยกไฟล addCustomer.html เม!อเร#!มตน......................................20
Exercise 3 โปรแกรมเวบส.าหรบการท.าโพล........................................................................................................22
3.1 การพฒนาโปรแกรม vote.html............................................................................................................22
3.2 การพฒนาโปรแกรม VoteServlet.java................................................................................................23
3.2.1 ก.าหนดตวแปร counter และ lang ...............................................................................................24
3.2.2 อ"านค"าพาราม#เตอรต"างๆท!ส"งมาจาก vote.html และท.าการประมวลผล............................................................24
3.2.3 การแสดงผลการโหวต..................................................................................................................24
3.3 ข&นตอนการพฒนาโปรเจค Voter ...........................................................................................................25
3.4 การปรบปร'งโปรแกรม VoteServlet.java..............................................................................................29
3.4.1 ก.าหนดตวแปร voters................................................................................................................29
3.4.2 การอ"านหมายเลขไอพของผ/ใช..........................................................................................................29
Exercise 4 การเช!อมต"อกบ MySQL Database.............................................................................................32
4.1 การต#ดต&งโปรแกรมฐานขอม/ล MySQL....................................................................................................32
4.2 การสราง Database Connection.....................................................................................................32
4.3 การสรางตาราง books.......................................................................................................................35
4.4 การใชค.าส!ง SQL ใน NetBeans........................................................................................................37
Exercise 5 การพฒนาโปรแกมเวบเพ!อต#ดต"อกบฐานขอม/ล..........................................................................................39
5.1 การสราง Web Application Project................................................................................................39
5.2 การพฒนาโปรแกรม addBook.html....................................................................................................39
5.3 การพฒนาโปรแกรม Thankyou.html...................................................................................................41
5.4 การพฒนาโปรแกรม AddBookServlet.java.........................................................................................41
5.4.1 การอ"านค"าพาราม#เตอรจาก addBook.html ......................................................................................42
5.4.2 การเช!อมต"อกบฐานขอม/ล...............................................................................................................42
5.4.3 เพ#!มรายช!อหนงสอใหม"ลงในฐานขอม/ล ................................................................................................43
5.4.4 การเรยกเวบเพจ Thankyou.html ...............................................................................................43
5.5 ข&นตอนการพฒนาโปรแกรม AddBookServlet.java ...............................................................................45
5.6 ทดสอบโปรแกรม..............................................................................................................................47
Exercise 6 โปรแกรมเวบเพ!อสาธ#ตขอบเขตของออปเจค............................................................................................49
6.1 การพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Request .....................................................................49
6.1.1 ข&นตอนการพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Request ....................................................52
6.1.2 ข&นตอนการทดสอบโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Request....................................................52
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 3. 3
6.2 การพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Session .....................................................................52
6.2.1 ข&นตอนการพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Session .....................................................55
6.2.2 ข&นตอนการทดสอบโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Session ...................................................55
6.3 การพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Application................................................................55
6.3.1 ข&นตอนการพฒนาโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Application...............................................58
6.3.2 ข&นตอนการทดสอบโปรแกรมเพ!อสาธ#ตขอบเขตของ Object แบบ Application..............................................58
Exercise 7 การพฒนาโปรแกรม Servlet โดยใชคลาสประเภท Web Listener..........................................................59
7.1 การพฒนาโปรแกรม Init.java..............................................................................................................59
7.2 การปรบปร'งโปรแกรม AddBookServlet.java .....................................................................................64
7.3 ทดสอบโปรแกรม..............................................................................................................................65
Exercise 8 การพฒนาโปรแกรม Servlet Filter ..............................................................................................67
8.1 การพฒนาโปรแกรม Servlet Filter......................................................................................................67
8.2 การเขยนหนา Login.........................................................................................................................68
8.2.1 ข&นตอนการพฒนาโปรแกรม ...........................................................................................................69
8.3 การเขยน Servlet Filter..................................................................................................................70
8.3.1 ข&นตอนการพฒนาโปรแกรม ...........................................................................................................71
8.4 การเขยนโปรแกรม ShowServlet .......................................................................................................73
8.4.1 ข&นตอนการพฒนาโปรแกรม ...........................................................................................................73
8.5 ข&นตอนการทดสอบโปรแกรม .................................................................................................................74
Exercise 9 การเขยนโปรแกรม JSP เพ!อแสดงผลลพธ............................................................................................75
9.1 การพฒนาโปรแกรม hello.jsp.............................................................................................................75
9.2 การพฒนาโปรแกรม viewBook.jsp....................................................................................................76
9.2.1 การก.าหนด Tag Library .........................................................................................................76
9.2.2 การก.าหนด Datasource ..........................................................................................................76
9.2.3 การใชค.าส!ง sql:query .............................................................................................................77
9.2.4 การใชค.าส!ง c:forEach เพ!อแสดงผล ..............................................................................................77
Exercise 10 การพฒนาโปรแกรมเวบ Online Book Store................................................................................80
10.1 การพฒนาโปรแกรม selectBooks.jsp................................................................................................80
10.2 การพฒนาโปรแกรม Book.java.........................................................................................................84
3
10.3 การพฒนาโปรแกรม Cart.java...........................................................................................................85
3
10.4 การพฒนาโปรแกรม ProcessSelection.java......................................................................................86
10.5 การพฒนาโปรแกรม Init.java ...........................................................................................................88
10.6 การพฒนาโปรแกรม viewCart.jsp.....................................................................................................88
10.7 ข&นตอนการทดสอบโปรแกรม ...............................................................................................................89
Exercise 11 การสราง Custom Tags ส.าหรบโปรแกรม JSP...............................................................................92
11.1 การพฒนาโปรแกรม hello.jsp............................................................................................................92
11.2 การพฒนาโปรแกรม helloTag.jsp.....................................................................................................94
11.2.1 สราง Tag Library Descriptor.............................................................................................94
11.2.2 สรางไฟล Tag Handler.........................................................................................................95
11.2.3 เขยนโปรแกรม helloTag.jsp...................................................................................................97
11.3 การพฒนาโปรแกรม helloJSTL.jsp...................................................................................................98
11.4 การพฒนาโปรแกรม helloTagFile.jsp...............................................................................................98
11.4.1 สราง Tag File....................................................................................................................99
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 4. 4
11.4.2 เขยนโปรแกรม helloTagFile.jsp...........................................................................................100
Exercise 12 การพฒนาโปรแกรมเวบโดยใช Strut Framework .........................................................................101
12.1 การสราง Web Application Project............................................................................................101
12.2 การพฒนาโปรแกรม BookActionForm.java...................................................................................101
12.3 การพฒนาโปรแกรม AddBook.jsp..................................................................................................106
12.4 การพฒนาโปรแกรม AddBookAction.java.....................................................................................107
12.5 การพฒนาไฟล ApplicationResource.properties..........................................................................109
12.6 การพฒนาโปรแกรม Init.java และ Thankyou.html...........................................................................109
12.7 การพฒนาไฟล Struts-config.xml.................................................................................................109
12.8 การทดสอบโปรแกรม......................................................................................................................110
Exercise 13 การพฒนาโปรแกรมเวบโดยใช JSF Framework............................................................................112
13.1 การสราง Web Application Project............................................................................................112
13.2 การพฒนาโปรแกรม JSF Managed Bean........................................................................................113
13.3 การพฒนาโปรแกรม PriceValidator.java........................................................................................115
13.4 การพฒนาโปรแกรม AddBook.jsp..................................................................................................116
13.5 การก.าหนด Page Navigation......................................................................................................117
13.6 การก.าหนด Error Message.........................................................................................................118
13.7 การพฒนาโปรแกรม Thankyou.html, error.html และ Init.java.........................................................119
13.8 การพฒนาโปรแกรม AddBookServlet.java.....................................................................................119
13.9 การทดสอบโปรแกรม......................................................................................................................121
Exercise 14 การพฒนาโปรแกรมเวบโดยใช Visual JSF....................................................................................122
14.1 การสราง Web Application Project............................................................................................122
14.2 การพฒนาโปรแกรม HelloWeb......................................................................................................122
14.3 การทดสอบโปรแกรม......................................................................................................................126
14.4 การปรบปร'งโปรแกรม HelloWeb....................................................................................................127
14.5 การทดสอบโปรแกรม......................................................................................................................129
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 5. 5
Exercise 1 การสรางโปรเจค Web Application และไฟล
HTML
แบบฝกหดนจะเปนการสรางโปรเจค Web Application และพฒนาหนาเวบเพจเพอใหผ#ใชป%อนขอม#ล
ของล#กคา โดยเวบเพจจะพฒนาดวยภาษา HTML ซ,งจะท.าหนาเปนส/วนอ0นพ1ตของโปรแกรมเพอใหผ#ใชป%อน
ขอม#ลผ/าน Web Browser
ขนตอนในการพฒนาโปรแกรม
1. สรางโปรเจค Web Application
2. พฒนาโปรแกรม addCustomer.html
1.1 การสราง Web Application Project
เราจะเร0มตนสรางโปรแกรม Web-Base Application โดยการสราง Project ใหม/ข,นมาใน NetBeans
ซ,งมขนตอนดงน
1. เลอกเมน# File > New Project
2. ในไดอะลอก New Project ใหเลอก Categories เปน Java Web และเลอก Projects เปน Web
Application ดงร#ปท 1.1
รปท 1.1 การสรางโปรเจค Web Application
3. กด Next ก.าหนด Project Name: เปน WebApp แลวเลอก Project Location: เปน Directory ทเรา
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 6. 6
ตองการจะเกบไฟล5ไว ดงร#ปท 1.2
รปท 1.2 การกาหนดชอโปรเจค
4. จากนนใหเลอก Server เปน Apache Tomcat 6.0.18 ดงร#ปท 1.3
รปท 1.3 การเลอก Server ทจะตดตงโปรเจค
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 7. 7
5. กดป16ม Finish โปรแกรมจะท.าการสราง Projects และสรางไฟล5ต/างๆ ข,นมาโดยมโครงสรางของไฟล5ดง
ร#ปท
รปท 1.4 โครงสรางไฟล!ของโปรเจค WebApp
1.2 การพฒนาโปรแกรม addCustomer.html
โปรแกรม addCustomer.html เปนเวบเพจทใชแสดงฟอร5มส.าหรบป%อนขอม#ลล#กคา เขาในฐานขอม#ล
customers ซ,งจะสรางข,นในแบบฝกหดถดไป โดยมร#ปแบบดงร#ปท 1.5 โปรแกรม addBook.html มขนตอนการ
พฒนาดงน
1. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด WebApp จากนนเลอกค.าสง New > Other
2. ในไดอะลอก New File ใหเลอก Categories ทชอ Web ซ,งโปรแกรมกจะแสดง File Types ต/างๆ ภาย
ใต Category น ใหเราเลอก HTML แลวกด Next
3. ก.าหนด HTML File Name: เปน addCustomer แลวกด Finish
4. เขยน source code ของไฟล5 addCustomer.html ตาม Listing ท 1.1 โดยเราสามารถทจะลาก icon
ประเภท HTML Forms ทอย#/ในหนาต/าง Palette เพอสามารถใหเขยนโปรแกรมไดง/ายข,น
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 8. 8
รปท 1.5 หนาเวบเพจ addCustomer.html
Listing ท 1.1 โปรแกรม addCustomer.html
<html>
<head>
<title> Add Customer </title>
</head>
<body>
<H1> Add a new customer profile </H1>
<p>
<form action="addCustomer.do" method="POST">
Customer ID : <input name="id" /> <br>
Name: <input name="name" /> <br>
Address: <textarea name="addr" rows="4" cols="20"></textarea> <br>
Mobile: <input name="mobile" size="9" /> <br>
Fax: <input name="fax" size="9" /> <br>
E-mail: <input name="email" size="25" /> <br><br>
<input type="submit" value="Add" />
</form>
</body>
</html>
1.3 การทดสอบโปรแกรม
1. ท.าการ Clean and Build และ Undeploy and Deploy โปรแกรม WebApp
2. Run โปรแกรม WebApp
3. ท Web Browser เปลยน URL เปน http://localhost:8080/WebApp/addCustomer.html จะได
ผลลพธ5ดงร#ปท 1.6
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 10. 10
Exercise 2 การเขยนโปรแกรม Java Servlet เพออ!านค!า
พาราม"เตอร
เนอหาทตองศกษากอน การสรางโปรเจค Web Application และสรางไฟล5 HTML
แบบฝกหดนจะเปนการพฒนาโปรแกรม Java Servlet เพอแสดงรายละเอยดของค/าพาราม0เตอร5ทผ#ใช
ป%อนเขามาออกทางโปรแกรม Web Browser และแสดงผลการออกออกทาง Web Browser
2.1 การพฒนาโปรแกรม CustomerServlet.java
โปรแกรม CustomerServlet.java เปนโปรแกรมทถ#กเรยกใชโดย addCustomer.html เมอผ#ใชกดป16ม
Add โปรแกรมนจะท.าหนาทน.าค/าพาราม0เตอร5ต/างๆ ทผ#ใชป%อนมาแสดงผล โดยมขนตอนการท.างานดงน
1. อ/านค/าพาราม0เตอร5ต/างๆ ทส/งมาจาก addCustomer.html
2. แสดงรายละเอยดของค/าต/างๆ
2.1.1 การอ/านค/าพาราม0เตอร5จาก addCustomer.html
เวบเพจ addCustomer.html จะส/งขอม#ลของรายชอหนงสอใหม/ผ/านมาทางพาราม0เตอร5ต/างๆ ดงน
● id รหสของล#กคา
● name ชอล#กคา
● addr ทอย#/ล#กคา
● mobile หมายเลขโทรศพท5มอถอ
● fax หมายเลข fax
● email ของล#กคา
พาราม0เตอร5ต/างๆ เหล/านจะถ#กส/งผ/านโปรโตคอล Http และในโปรแกรมเราสามารถทจะอ/านค/าพารา-
ม0เตอร5เหล/านไดจากออปเจค request โดยเรยกใชเมธอด getParameter() ซ,งโปรแกรมส/วนนจะมค.าสงต/างๆ
ดงน
String id = request.getParameter("id");
String name = request.getParameter("name");
String addr = request.getParameter("addr");
String mobile = request.getParameter("mobile");
String fax = request.getParameter("fax");
String email = request.getParameter("email");
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 11. 11
2.1.2 การแสดงรายละเอยดของค/าต/างๆ
โปรแกรม Servlet จะสามารถแสดงผลออกทาง Web Browser ไดโดยการเขยนโคด HTML ภายใน ค.าสง
out.println() โดยมค.าสงในเมธอด processRequest() ดงน
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Customer Information</title>");
out.println("</head>");
out.println("<body>");
String id = request.getParameter("id");
String name = request.getParameter("name");
String addr = request.getParameter("addr");
String mobile = request.getParameter("mobile");
String fax = request.getParameter("fax");
String email = request.getParameter("email");
out.println("<h1> Customer Information </h1>");
out.println("<b>ID: </b>" + id + "<BR>");
out.println("<b>Name: </b>" + name + "<BR>");
out.println("<b>Address: </b>" + addr + "<BR>");
out.println("<b>Mobile: </b>" + mobile + "<BR>");
out.println("<b>Fax: </b>" + fax + "<BR>");
out.println("<b>E-mail: </b>" + email + "<BR>");
out.println("</body>");
out.println("</html>");
out.close();
2.2 ขนตอนการพฒนาโปรแกรม CustomerServlet.java
เราสามารถทจะพฒนาโปรแกรม CustomerServlet.java ตามขนตอนดงน
1. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด WebApp จากนนเลอกค.าสง New > Other...
2. ในไดอะลอก New File ใหเลอก Categories ทชอ Web ซ,งโปรแกรมกจะแสดง File Types ต/างๆ ภาย
ใต Category น ใหเราเลอก Servlet แลวกด Next ดงร#ปท 2.1
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 12. 12
รปท 2.1 การเลอกไฟล!ประเภท Servlet
3. ก.าหนด Class Name: เปน CustomerServlet และก.าหนด Package เปน servlet ดงร#ปท 2.2
รปท 2.2 การกาหนดชอ Servlet
4. กด Next ก.าหนด URL Pattern(s): เปน /addCustomer.do ดงร#ปท 2.3
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 13. 13
รปท 2.3 การกาหนด URL Pattern
5. กด Finish โปรแกรม NetBeans จะสรางไฟล5 CustomerServlet.java ไวภายใต Source Packages
โดยจะอย#/ใน Directory ชอ servlet
6. ในหนาต/าง editor ใหแกไข sourcecode ของไฟล5 CustomerServlet.java โดยม source code ของ
เมธอด processRequest ตามหวขอ 2.1.2
2.3 การทดสอบโปรแกรม
1. ท.าการ Build และ Deploy โปรแกรม WebApp
2. Run โปรแกรม WebApp
3. ท Web Browser เปลยน URL เปน http://localhost:8080/WebApp/addCustomer.html
4. ทดลองป%อนขอม#ลดงร#ป
5. โปรแกรมจะแสดงผลดงร/ปท! 2.4 และ 2.5
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 14. 14
รปท 2.4 การป+อนขอมลหนา addCustomer.html
รปท 2.5 ผลลพธ!จากการเรยกโปรแกรม CustomerServlet
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 15. 15
2.4 การปรบปรงโปรแกรมเพอใหแสดงผลภาษาไทยและเร%ยกไฟล' addCustomer.html เมอเร(มตน
เราสามารถท!จะปรบปร'งโปรเจคน&เพ!อใหเรยกไฟล addCustomer.html โดยอตโนมต#เม!อเร#!มตนรน
โปรแกรม โดยการก.าหนดพาราม#เตอร Welcome Files ใหเป6นไฟลดงกล"าว โดยมข&นตอนดงน&
1. ในหนาต/าง Projects ขยายโหนด WebApp > Web Pages > WEB-INF
2. เลอกไฟล5 web.xml แลวเลอกแทป Pages ท.าการแกไข Welcome Files เปน addCustomer.html ดง
ร#ปท 2.6
รปท 2.6 การจดการไฟล! web.xml
นอกจากนถาเราทดลองป%อนขอม#ลภาษาไทย ลงไปในจะพบว/า โปรแกรม Web Browser บางตวจะแสดง
ผลลพธ5ภาษาไทยไม/ถ#กตอง เราสามารถแกไขไดโดยการก.าหนดใหการเขารหสของพาราม0เตอร5ทส/งมาเปน UTF-
8 โดยเพ0มค.าสงดงน
request.setCharacterEncoding("UTF-8");
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 16. 16
Exercise 3 โปรแกรมเวบส%าหรบการท%าโพล
เนอหาทตองศกษากอน การเขยนโปรแกรม Java Servlet เพออ/านค/าพาราม0เตอร5
แบบฝกหดนจะเปนการพฒนาโปรแกรม Java Servlet เพอท.า Poll โดยใหผ#ใชสามารถทจะโหวตเลอก
ภาษาคอมพ0วเตอร5ทชอบได แลวโปรแกรมจะแสดงผลการโหวตทาง Web Browser
3.1 การพฒนาโปรแกรม vote.html
โปรแกรม vote.html เปนหนาเวบทใหผ#ใชสามารถทจะท.าการโหวตเลอกภาษาคอมพ0วเตอร5ได โดยเมอผ#
ใชกดป16ม Vote โปรแกรมเวบกจะไปท.าการเรยก url ทชอ processVote โปรแกรมนมหนาเวบดงร#ปท 3.1
รปท 3.1 การแสดงผลของโปรแกรม vote.html
และม sourcecode ดง Listing ท 3.1
Listing ท 3.1 โปรแกรม vote.html
<html>
<head>
<title> Web Voting</title>
</head>
<body>
<form action="processVote" method="POST">
Select a computer language <BR>
<input type="radio" name="lang" value="1" /> Java <br>
<input type="radio" name="lang" value="2" /> C# <br>
<input type="radio" name="lang" value="3" /> C <br>
<input type="radio" name="lang" value="4" /> Pascal <br>
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 17. 17
<input type="submit" value="Vote" />
</form>
</body>
</html>
3.2 การพฒนาโปรแกรม VoteServlet.java
โปรแกรม VoteServlet.java เปนโปรแกรมทถ#กเรยกใชโดย vote.html เมอผ#ใชกดป16ม Vote โปรแกรม
นจะท.าหนาทเพอน.าค/าทผ#ใชโหวตมาประมวลผล โดยมขนตอนการท.างานดงน
1. ก.าหนดตวแปร counter และ lang
2. อ/านค/าพาราม0เตอร5ต/างๆทส/งมาจาก vote.html และท.าการประมวลผล
3. แสดงผลการโหวต
3.2.1 ก.าหนดตวแปร counter และ lang
ตวแปร count เปนอะเรย5เพอทจะเกบจ.านวนผลโหวตของภาษาคอมพ0วเตอร5แต/ละภาษา และตวแปร lang
เปนอะเรย5ของ String เพอทจะเกบรายชอภาษาคอมพ0วเตอร5 ตวแปรทงสองเปนตวแปรของออปเจคทจะประกาศ
นอกเมธอด โดยมค.าสงประกาศดงน
String []lang ={"Java", "C#", "C", "Pascal"};
int []count = new int[4];
3.2.2 อ/านค/าพาราม0เตอร5ต/างๆทส/งมาจาก vote.html และท.าการประมวลผล
เวบเพจ vote.html จะส/งขอม#ลของการโหวตมาในพาราม0เตอร5ทชอ lang โดยจะมค/าเปนหมายเลข 1-
4 ในทนจะมค.าสง request.getParameter เพอจะอ/านค/าทโหวตมา จากนนจะท.าการแปลงค/าซ,งเปน String ให
เปนค/าจ.านวนเตม จากนนจะเปนการเพ0มจ.านวนโหวตในตวแปร count ตามค/า index ทสอดคลองกบภาษาท
โหวตมา โดยมค.าสงต/างๆ ดงน
String vote = request.getParameter("lang");
int voteNum = Integer.parseInt(vote) – 1;
count[voteNum]++;
3.2.3 การแสดงผลการโหวต
ค.าสงแสดงผลการโหวตจะเปนค.าสงเพอแสดงค/าของตวแปร count โดยมค.าสงดงน
for (int i = 0; i < count.length; i++) {
out.println(lang[i] +" = " + count[i] + "<BR>");
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 18. 18
}
โปรแกรม VoteServlet.java จะม sourcecode ดง Listing ท 3.2
Listing ท 3.2 โปรแกรม VoteServlet.java
import java.io.*;
import java.util.HashSet;
import javax.servlet.*;
import javax.servlet.http.*;
public class VoteServlet extends HttpServlet {
String []lang ={"Java", "C#", "C", "Pascal"};
int []count = new int[4];
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String vote = request.getParameter("lang");
int voteNum = Integer.parseInt(vote) - 1;
count[voteNum]++;
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet VoteServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet VoteServlet at " + request.getContextPath() + "</h1>");
for (int i = 0; i < count.length; i++) {
out.println(lang[i] +" = " + count[i] + "<BR>");
}
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 19. 19
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
3.3 ขนตอนการพฒนาโปรเจ*ค Voter
เราสามารถทจะพฒนาแบบฝกหดนทชอโปรเจค Voter ตามขนตอนดงน
1. เลอกค.าสงสราง New Project > Web Application จากนนก.าหนดชอโปรเจคเปน Voter ดงร#ปท 3.2
รปท 3.2 การสรางโปรเจค Web Application
2. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด Voter จากนนเลอกค.าสง New > Other...
3. ในไดอะลอก New File ใหเลอก Categories ทชอ Java Web ซ,งโปรแกรมกจะแสดง File Types ต/างๆ
ภายใต Category น ใหเราเลอก HTML แลวกด Next
4. ก.าหนด HTML File Name: เปน vote แลวกด Finish
5. ในหนาต/าง Editor เขยน Source code ของ vote.html ดง Listing ท 3.1
6. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด Voter จากนนเลอกค.าสง New > Servlet
7. ก.าหนด Class Name: เปน VoteServlet.java และ Package เปน controller แลวกด Next ก.าหนด
URL Pattern(s): เปน /processVote แลวกด Finish
8. ในหนาต/าง Editor เขยน Source code ของ VoteServlet.java ดง Listing ท 3.2
9. กด Save แลวท.าการ run โปรเจคเพอทดสอบโปรแกรมโดยเรยก URL ท
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 20. 20
http://localhost:8080/Voter/vote.html โดยจะไดผลลพธ5ดงตวอย/างในร#ปท3.3
รปท 3.3 ตวอย-างผลลพธ!ของโปรเจค Voter
3.4 การปรบปรงโปรแกรม VoteServlet.java
ขนตอนนจะเปนการปรบปร1งโปรแกรม VoteServlet.java เพอป%องกนการโหวตซ.าทงนจะไม/อน1ญาตให
ผ#ใชทใชหมายเลขไอพเดยวกนโหวตซ.าได โดยจะเกบหมายเลขไอพทท.าการโหวตแลวในออปเจคชน0ด HashSet
การพฒนาโปรแกรมนมค.าสงเพ0มเต0มทส.าคญดงน
1. ก.าหนดตวแปร voters
2. อ/านหมายเลขไอพของผ#โหวตและเพ0มคะแนนการโหวตหากหมายเลขไอพนไม/เคยโหวต
3.4.1 ก.าหนดตวแปร voters
ตวแปร voters เปนตวแปรชน0ด HashSet ทจะเกบหมายเลขไอพของผ#โหวต โดยจะประกาศเปนตวแปร
ออปเจคทมค.าสงประกาศดงน
HashSet voters = new HashSet();
3.4.2 การอ/านหมายเลขไอพของผ#ใช
การอ/านหมายเลขไอพของผ#ใชท.าไดโดยเรยกใช ค.าสง getRemoteAddr() ในออปเจค request เมอ
ทราบหมายเลขไอพ เราสามารถทจะตรวจสอบไดว/าหมายเลขนเคยโหวตแลวหรอไม/ โดยการตรวจสอบว/าออปเจค
voters มค/าหมายเลขไอพนหรอไม/โดยใชค.าสง contain() หากยงไม/เคยโหวตกใหเพ0มค/าตวนบและเพ0มหมายเลข
ไอพนในออปเจค voters โดยมค.าสงดงน
String ip = request.getRemoteAddr();
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 21. 21
if (!voters.contains(ip)) {
count[voteNum]++;
voters.add(ip);
} else {
out.println("This IP address has been voted");
}
ส.าหรบโปรแกรม VoteServlet.java ทปรบปร1งใหม/จะม sourcecode ดง Listing ท 3.3
Listing ท 3.3 โปรแกรม VoteServlet.java เพอป%องกนการโหวตซ.า
import java.io.*;
import java.util.HashSet;
import javax.servlet.*;
import javax.servlet.http.*;
public class VoteServlet extends HttpServlet {
String []lang ={"Java", "C#", "C", "Pascal"};
int []count = new int[4];
HashSet voters = new HashSet();
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String vote = request.getParameter("lang");
int voteNum = Integer.parseInt(vote) - 1;
String ip = request.getRemoteAddr();
if (!voters.contains(ip)) {
count[voteNum]++;
voters.add(ip);
} else {
out.println("This IP address has been voted");
}
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet VoteServlet</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet VoteServlet at " + request.getContextPath() + "</h1>");
for (int i = 0; i < count.length; i++) {
out.println(lang[i] +" = " + count[i] + "<BR>");
}
out.println("</body>");
out.println("</html>");
out.close();
}
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 22. 22
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 23. 23
Exercise 4 การเชอมต!อกบ MySQL Database
เนอหาทตองศกษากอน -
แบบฝ8กหดน&เป6นข&นตอนการต#ดต&ง NetBeans เพ!อเช!อมต"อกบโปรแกรมฐานขอม/ล MySQL ท!เป6น
โปรแกรมฐานขอม/ล OpenSource แบบ FreeWare ซ:!งปกต#จะมตวอย"างฐานขอม/ลท!สรางมาพรอมแลวอย/"หลาย
ช'ด หน:!งในน&นคอฐานขอม/ลท!ช!อ test ท!เราจะใชในการทดสอบการเช!อมต"อกบโปรแกรม NetBeans
4.1 การต(ดตงโปรแกรมฐานขอม-ล MySQL
ขนตอนนเปนการต0ดตงโปรแกรม MySQL Server 5.0 โดยมขนตอนดงน
1. ท.าการดาวน5โหลดโปรแกรม MySQL Server 5.0 จาก URL ทชอ http://www.mysql.com/
2. ท.าการ unzip โปรแกรม mysql-5.0.xx-win32.zip
3. รนโปรแกรม setup.exe เพอท.าการต0ดตงโปรแกรม MySQL Server 5.0 โดยโปรแกรมจะแสดง
ไดอะลอกดงร#ปท 4.1
รปท 4.1 การตดตง MySQL Server
4. กดป16ม Next แลวท.าการต0ดตงโปรแกรมตามขนตอนต/างๆ โดยใหก.าหนดไดเรกทอรทตองการต0ดตงตาม
ความเหมาะสม
4.2 การสราง Database Connection
เม!อต#ดต&ง Database แลว เราสามารถท!จะใช NetBeans เพ!อเช!อมต"อ Database โดยใช JDBC Driver
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 24. 24
ซ:!งในท!น&จะใช Driver ท!ช!อ MySQL Connector/J ซ:!งเป6น Driver ท!พฒนาโดยใชภาษาจาวาและต#ดต"อโดยตรง
กบ Database และโปรแกรม NetBeans 6.5 ไดต#ดต&งมาไวใหแลว เราสามารถท!จะเช!อมต"อกบ Database โดยใช
Driver ดงกล"าวได โดยมข&นตอนดงน&
1. ในโปรแกรม NetBeans เลอกแทป Services แลวขยายโหนด Databases > Drivers
2. เลอกโหนด MySQL(Connector/J Driver) จากน&นคล#;กขวาเลอก Connect Using.. ดงร/ปท! 4.2
รปท 4.2 การเลอกคาสงเชอมต-อ Database
3. ในไดอะลอก New Database Connection ใหระบ'
● Host: เป6น localhost
● Port: เป6น 3306
● Database: เป6น test
● User Name: เป6น root
4. ส.าหรบ Password: ใหใส"ค"าตามท!ก.าหนดไวในตอนต#ดต&งโปรแกรม MySQL ซ:!งในท!น&จะมค"าเป6น
root
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 25. 25
5. ท.าการเลอก Remember password โดยไดอะลอกจะแสดงผลไดดงร/ปท! 4.3
รปท 4.3 การกาหนดค-าในการเชอมต-อ Database
6. กดป'<ม OK เม!อไดอะลอกแสดงขอความใหเลอก database schema.ใหกดป'<ม OK อกคร&งซ:!งตอนน&ถา
ขยายแทบ Database ในหนาต"าง Runtime จะเหน Connection ใหม"ดงร/ปท! 4.4
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 26. 26
รปท 4.4 การแสดงการเชอมต-อ
4.3 การสรางตาราง books
ในท!น&จะก.าหนดใหสราง Table ท!ช!อ books โดยใหอย/"ภายใต Schema ท!ช!อ test โดย Table น&ก.าหนด
ใหม Column ต"างๆ ดงตารางท! 4.1
ตารางท! 4.1Table books
ชอ ชนด ขนาด
isbn varchar 20
title varchar 70
author varchar 50
price float -
เราจะใชโปรแกม NetBeans ในการท!จะสราง Table น&โดยมข&นตอนต"างๆ ดงน&
1. ในหนาต"าง Runtime ขยายแทบ Databases > jdbc:mysql://localhost:3306/test แลวจะเหนรายการ
Tables
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 27. 27
2. คล#;กขวาท! Tables แลวเลอก Create Table... ดงร/ปท! 4.5
รปท 4.5 การเลอกคาสงสรางตาราง
3. ภายในไดอะลอก Create Table ใหก.าหนด Table Name เป6น books แลวใส" Column ต"างๆ ดงตารางท!
4.1 และก.าหนดให isbn เป6น Key โดยไดอะลอกจะแสดงผลไดดงร/ปท! 4.6
รปท 4.6 การสรางตารางชอ books
4. แลวกด OK ซ:!งตอนน&ในหนาต"าง Runtime ถาขยายแทบ Tables > books จะเหน Column ต"างๆ ดงร/ป
ท! 4.7
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 28. 28
รปท 4.7 ผลลพธ!จากการสรางตาราง
4.4 การใชค/าสง SQL ใน NetBeans
ภายหลงจากท!มการสราง Table ท!ช!อ books เราสามารถท!จะใชโปรแกรม NetBeans สรางค.าส!ง SQL
เพ!อท!จะต#ดต"อกบฐานขอม/ล ในท!น&จะแสดงการเพ#!มขอม/ลลงใน Table โดยมข&นตอนต"างๆดงน&
1. ตรงโหนด Procedures คล#;กขวาท!โหนดแลวเลอกค.าส!ง Execute Command... หนาต"าง SQL Editor
จะปรากฎข:&นมา
2. ใหป>อนค.าส!ง SQL เป6น
INSERT INTO books VALUES ('123', 'Intro to Java Programming', 'Thanachart', 500.00)
3. กด Enter หรอ (Ctrl-Shift-E) เพ!อรนค.าส!ง SQL
4. เราสามารถท!จะด/ขอม/ลท!ป>อนเขาไปได โดยเลอกค.าส!ง View Data.. จาก Table ท!ช!อ books ดงร/ปท! 4.8
รปท 4.8 การเรยกคาสงดขอมลในตาราง
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 29. 29
Exercise 5 การพฒนาโปรแกมเวบเพอต"ดต!อกบฐานขอม,ล
เนอหาทตองศกษากอน การเชอมต/อกบ MySQL Database
แบบฝกหดนจะเปนการพฒนาโปรแกรม Web Application โดยใช Java Servlet เพอเชอมต/อกบฐาน
ขอม#ล ในทนก.าหนดใหใชฐานขอม#ล MySQL ซ,งม Table ทชอ books โปรแกรมทจะพฒนาข,นเปนการเพ0ม
ขอม#ลลงใน Table ดงกล/าว โดยก.าหนดใหผ#ใชป%อนรายละเอยดขอม#ลผ/านเวบเพจทชอ addBook.html ซ,งเมอผ#
ใชกดป16ม Add โปรแกรมกจะไปเรยกโปรแกรม Servlet ทชอ AddBookServlet ซ,งจะมค.าสงในอ/านค/า
parameter ทผ#ใชป%อนเขามาและท.าการใส/ขอม#ลลงใน Table ดงกล/าว โดยใชช1ดค.าสง JDBC
ขนตอนในการพฒนาโปรแกรม
1. สรางโปรเจค WebBaseDB
2. พฒนาโปรแกรม addBook.html และ Thankyou.html
3. พฒนาโปรแกรม AddBookServlet.java
5.1 การสราง Web Application Project
เราจะเร0มตนสรางโปรแกรม Web-Base Database โดยการสราง Project ใหม/ข,นมาใน NetBeans ซ,งม
ขนตอนดงน
1. เลอกเมน# File > New Project..
2. ในไดอะลอก New Project ใหเลอก Categories เปน Java Web และเลอก Projects เปน Web
Application แลวกด Next
3. ก.าหนด Project Name: เปน WebBaseDB แลวเลอก Project Location: เปน Director ทเราตองการ
จะเกบไฟล5ไว จากนนเลอก Server เปน Apache Tomcat 6.0.18 แลวกด Finish
5.2 การพฒนาโปรแกรม addBook.html
โปรแกรม addBook.html เปนเวบเพจทใชแสดงฟอร5มส.าหรบป%อนขอม#ลหนงสอใหม/เขาในฐานขอม#ล
books ซ,งมลกษณะดงร#ปท 5.1 โปรแกรม addBook.html มขนตอนการพฒนาดงน
1. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด WebBaseDB จากนนเลอกค.าสง New > Other...
2. ในไดอะลอก New File ใหเลอก Categories ทชอ Web ซ,งโปรแกรมกจะแสดง File Types ต/างๆ ภาย
ใต Category น ใหเราเลอก HTML แลวกด Next
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 30. 30
3. ก.าหนด HTML File Name: เปน addBook แลวกด Finish
4. เขยน source code ของไฟล5 addBook.html ตาม Listing ท 5.1 โดยเราสามารถทจะลาก icon ประเภท
HTML Forms ทอย#/ในหนาต/าง Palette ดงร#ปท 5.2 เพอสามารถใหเขยนโปรแกรมไดง/ายข,น
รปท 5.1 หนาเวบเพจ addBook.html
รปท 5.2 ตวอย-างหนาต-าง Palette สาหรบการเขยนคาสง HTML
Listing ท 5.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>
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 31. 31
<P>
<form action="addBook.do" 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>
5.3 การพฒนาโปรแกรม Thankyou.html
โปรแกรม Thankyou.html เปนเวบเพจทใชแสดงใหเหนว/าขอม#ลไดถ#กเพ0มเขาไปในฐานขอม#ลแลว โดย
ม sourcecode ดง Listing ท 2 ซ,งขนตอนการพฒนาโปรแกรมนจะเปนเช/นเดยวกบการพฒนาโปรแกรม
addBook.html
Listing ท 5.2 โปรแกรม Thankyou.html
<html>
<head>
<title>Thank you</title>
</head>
<body>
<H1>Thank you for inserting data </H1>
</body>
</html>
5.4 การพฒนาโปรแกรม AddBookServlet.java
โปรแกรม AddBookServlet.java เปนโปรแกรมทถ#กเรยกใชโดย addBook.html เมอผ#ใชกดป16ม Add
โปรแกรมนจะท.าหนาทเพอต0ดต/อกบฐานขอม#ลโดยมขนตอนการท.างานดงน
1. อ/านค/าพาราม0เตอร5ต/างๆทส/งมาจาก addBook.html
2. เชอมต/อกบฐานขอม#ล books
3. เพ0มรายชอหนงสอใหม/ลงในฐานขอม#ล books
4. เรยกเวบเพจ Thankyou.html
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 32. 32
5.4.1 การอ/านค/าพาราม0เตอร5จาก addBook.html
เวบเพจ addBook.html จะส/งขอม#ลของรายชอหนงสอใหม/ผ/านมาทางพาราม0เตอร5ต/างๆดงน
● isbn หมายเลข ISBN ของหนงสอ
● title ชอหนงสอ
● author ชอผ#แต/ง
● price ราคาหนงสอ
พาราม0เตอร5ต/างๆเหล/านจะถ#กส/งผ/านโปรโตคอล Http และในโปรแกรมเราสามารถทจะอ/านค/า
พาราม0เตอร5เหล/านไดจากออปเจค request โดยเรยกใชเมธอด getParameter() ซ,งโปรแกรมส/วนนจะมค.าสง
ต/างๆดงน
String isbn = request.getParameter("isbn");
String author = request.getParameter("author");
String title = request.getParameter("title");
String priceStr = request.getParameter("price");
5.4.2 การเชอมต/อกบฐานขอม#ล
การเขยนโปรแกรมเพอเชอมต/อกบฐานขอม#ลเพอเปนการเรยกใชค.าสง SQL ซ,งจะตองใช JDBC
API โดยจะมขนตอนดงน
● ท.าการโหลด Driver ส.าหรบ Database Server ทตองการเชอมต/อ ผ/าน DriverManager หรอ
โหลด DataSource จาก JNDI
● ด,งออปเจคชน0ด Connection จาก Driver หรอ Datasource
● ด,งออปเจคชน0ด Statement จากออปเจคชน0ด Connection
● เรยกใชค.าสง SQL โดยใชเมธอด executeQuery() หรอ executeUpdate() ของออปเจคชน0ด
Statement
โปรแกรม AddBookServlet จะใชว0ธการโหลด DataSource จาก JNDI ซ,งเราไม/จ.าเปนทจะตองโหลด
ท1กครงทมการเรยกใชโปรแกรม Servlet นแต/จะท.าการโหลดครงแรกทมการเรยกใช Servlet น ดงนนเราจะเขยน
sourcecode ส/วนนทเมธอด init() ดงน
private Connection conn;
public void init() {
try {
conn = jdbcTest.getConnection();
} catch (Exception ex) {
System.out.println(ex);
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 33. 33
}
}
5.4.3 เพ0มรายชอหนงสอใหม/ลงในฐานขอม#ล
เมอเชอมต/อฐานขอม#ลและไดออปเจคชน0ด Connection มาแลว เราสามารถทจะเรยกใชค.าสง SQL ได
ซ,งในทนคอค.าสง INSERT ซ,งจะมร#ปแบบของค.าสงดงน
INSERT INTO books VALUES(....)
โดยเราจะใชค/าจากพาราม0เตอร5ต/างๆทรบมา ดงนนถาขอม#ลทป%อนเขามาถ#กตองเราสามารถทจะเพ0มรายชอ
หนงสอใหม/ลงในฐานขอม#ลโดยใชค.าสงดงน
Statement stmt = conn.createStatement();
String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" +author +"',"+price
+")";
int numRow = stmt.executeUpdate(sql);
5.4.4 การเรยกเวบเพจ Thankyou.html
เมอขอม#ลไดถ#กเพ0มลงไปในฐานขอม#ลแลว โปรแกรม AddBookServlet จะท.าการเรยกเวบเพจ
Thankyou.html โดยการเรยกใช RequestDispatcher ดงน
RequestDispatcher obj = request.getRequestDispatcher("Thankyou.html");
if (numRow == 1 && obj != null) {
obj.forward(request,response);
}
โปรแกรม AddBookServlet.java จะม sourcecode ทงหมดดง Listing ท 5.3
Listing ท 5.3 โปรแกรม AddBookServlet.java
package controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.sql.DataSource;
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 34. 34
public class AddBookServlet extends HttpServlet {
@Resource(name = "jdbc/test")
private DataSource jdbcTest;
private Connection conn;
public void init() {
try {
conn = jdbcTest.getConnection();
} 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);
Statement stmt = conn.createStatement();
String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" +author +"',"+price+")";
int numRow = stmt.executeUpdate(sql);
RequestDispatcher obj = request.getRequestDispatcher("Thankyou.html");
if (numRow == 1 && obj != null) {
obj.forward(request,response);
}
} catch (SQLException ex) {
out.println("Error " + ex);
return;
}
out.println("</body>");
out.println("</html>");
out.close();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 35. 35
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
}
5.5 ขนตอนการพฒนาโปรแกรม AddBookServlet.java
เราสามารถทจะพฒนาโปรแกรม AddBookServlet.java ตามขนตอนดงน
1. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด WebBaseDB จากนนเลอกค.าสง New > Other...
2. ในไดอะลอก New File ใหเลอก Categories ทชอ Web ซ,งโปรแกรมกจะแสดง File Types ต/างๆ ภาย
ใต Category น ใหเราเลอก Servlet แลวกด Next
3. ก.าหนด Class Name: เปน AddBookServlet และก.าหนด Package เปน controller แลวกด Next
4. ก.าหนด URL Pattern(s): เปน /addBook.do แลวกด Finish
5. โปรแกรม NetBeans จะสรางไฟล5 AddBookServlet.java ไวภายใต Source Packages โดยจะอย#/ใน
Directory ชอ controller
6. ในหนา Editor ใหคล0;กขวาเลอก Insert Code... > Use Database ดงร#ปท 5.3
รปท 5.3 การเลอกคาสง Use Database
7. ในไดอะลอก Choose Database กดป16ม Add...
8. ในไดอะลอก Add Data Source Reference กดป16ม Add...
9. ในไดอะลอก Create Data Source ก.าหนด JNDI Name เปน jdbc/test และเลอก Database
Connection เปน jdbc:mysql//localhost:3306/test ดงร#ปท 5.4
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 36. 36
รปท 5.4 การกาหนดค-า JNDI
10. กดป16ม OK โปรแกรมจะกลบไปแสดงไดอะลอก Add Data Source Reference ใหก.าหนด Reference
Name: เปน jdbc/test ดงร#ปท 5.5
รปท 5.5 การกาหนดค-า Reference Name
11. กดป16ม OK จะไดไดอะลอก Choose Database ดงร#ปท 5.6
รปท 5.6 หนาไดอะลอก Choose Database
12. กดป16ม OK โปรแกรม NetBeans จะเพ0ม context.xml ใหอตโนมต0 โดยสามารถด#ไดจากการ ขยายโหนด
WebBaseDB > Web Pages > META-INF [หมายเหต1 ในกรณทใช GlassFish Server ค.าสงนจะ
เขยนในไฟล5 sun-web.xml]
13. โปรแกรมจะเพ0ม sourcecode ใหดงน
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 37. 37
@Resource(name = "jdbc/test")
private DataSource jdbcTest;
14. ในหนาต/าง editor ใหแกไข sourcecode ของไฟล5 AddBookServlet.java ใหเปนไปตาม Listing ท
5.3
15. โปรแกรมจะมขอผ0ดพลาดอย#/เนองจากยงไม/ไดท.าการ import คลาสต/างๆ เราสามารถแกไขไดโดยคล0;ก
ขวาในหนาต/าง editor แลวเลอก Fix Imports หรอกด Ctrl+Shift+I โปรแกรมจะแสดงชอคลาสต/างๆ ท
ตอง Import มาใหเลอก ในทนจะตองเลอกคลาสใหถ#กตองดงร#ปท 5.7
รปท 5.7 การกาหนดคลาสทตอง import
16. ท.าการ Save โปรแกรมโดยการกด Ctrl+S
17. ตรวจสอบไฟล5 context.xml จะเปนดง Listing ท 5.4
Listing ท 5.4 ไฟล5 context.xml
<?xml version="1.0" encoding="UTF-8"?>
<Context path="/WebBaseDB">
<Resource auth="Container" driverClassName="com.mysql.jdbc.Driver" maxActive="20"
maxIdle="10" maxWait="-1" name="jdbc/test" password="root" type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/test" username="root"/>
</Context>
5.6 ทดสอบโปรแกรม
1. ท.าการ Build และ Deploy โปรแกรม WebBaseDB
2. Run โปรแกรม WebBaseDB ทงนตองท.าการรน MySQL Database Server ก/อน
3. โปรแกรมจะแสดงหนา addBook.html ใหเราใส/ขอม#ล ลองทดลองใส/ขอม#ลดงร#ปท 5.8
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 38. 38
รปท 5.8 ตวอย-างการป+อนขอมล Books
4. เมอกดป16ม Add โปรแกรมกจะใส/ขอม#ลลงใน Database และแสดงผลลพธ5ดงร#ปท 5.9
รปท 5.9 ผลลพธ!ทแสดงทาง Web Browser
5. เราสามารถทจะด#ขอม#ลทป%อนเขาไปได โดยไปทหนาต/าง Services ของโปรแกรม NetBeans แลวเลอก
ค.าสง View Data.. จาก Table ทชอ books ดงร#ปท 5.10
รปท 5.10 ขอมลทถกป+อนเขา Table ทชอ books
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 39. 39
Exercise 6 โปรแกรมเวบเพอสาธ"ตขอบเขตของออปเจค
เนอหาทตองศกษากอน การเขยนโปรแกรม Servlet เพออ/านค/าพาราม0เตอร5
แบบฝกหดนจะเปนการพฒนาโปรแกรม Java Servlet เพออธ0บายขอบเขตการท.างานของออปเจคใน
โปรแกรมแบบเวบ (Object Scope) ทมอย#/สแบบคอ Page, Request, Session และ Web (Application) โดย
จะทดลองส/งค/าของออปเจคผ/านกนระหว/างโปรแกรม Servlet สองช1ด
6.1 การพฒนาโปรแกรมเพอสาธ(ตขอบเขตของ Object แบบ Request
ออปเจคทสรางข,นในโปรแกรม Java Servlet ในแต/โปรแกรมจะมขอบเขตการใชงาน (scope) อย#/เพยง
แค/โปรแกรมนนๆ (url นนๆ) ไม/สามารถทจะใชโปรแกรม Java Servlet หรอ JSP ตวอนเรยกใชออปเจคตวนน
ได การจะใหโปรแกรม Servlet หรอ JSP อนๆ เรยกออปเจคใดๆ ไดนน จะตองมการเขยน source code เพอส/ง
ผ/านค/าของออปเจคนนไปยงออปเจคอนๆ ทงนเราสามารถก.าหนดขอบเขตการใชงานเพ0มเต0มไดอก 3 แบบคอ
● Request ออปเจคสามารถถ#กเรยกใชเมอมการเรยกมาจากโปรแกรม Servlet/JSP อน
● Session ออปเจคจะเกบอย#/ใน Session ของ Web Browser ตราบเท/าทยงมการใชงานอย#/
● Application ออปเจคจะสามารถใชงานไดในโปรแกรม Servlet/JSP ใดๆ ทอย#/ใน Web
Application เดยวกน
การส/งค/าของออปเจคจาก url หน,งมายง url อนท.าไดหลายว0ธ แบบฝกหดทผ/านมาเปนการแสดงใหเหนถ,ง
การส/งค/าพาราม0เตอร5ทอย#/ในฟอร5มของไฟล5 HTML ไปยงโปรแกรม Java Servlet ทสามารถเรยกใชไดโดย ค.าสง
request.getParameter()
นอกจากนเรายงสามารถทจะส/งออปเจคไปยง โปรแกรม Java Servlet หรอ JSP อนโดยการใชค.าสง
setAttribute() อาท0เช/นส/งค/าของตวแปร String ชอว/า name โดยจะเกบไวใน attribute ทชอ RequestName
และมร#ปแบบค.าสงดงน
String name = “Thanisa”;
request.setAttribute(“RequestName”, name);
ซ,งจะท.าให url ทท.าการเรยกถดไปสามารถเรยกใช attribute ทชอ RequestName และด,งค/าของตวแปร
name ออกมาได โดยใชค.าสง getAttribute() โดยมร#ปแบบดงน
String name = (String) request.getAttribute(“RequestName”);
ส/วนค.าสงทใชในการทจะ forward จากโปรแกรม Servlet ตวหน,งไปยง url อนจะเปนค.าสงทมร#ปแบบ
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 40. 40
ดงน
RequestDispatcher obj = request.getRequestDispatcher("SecondServlet");
obj.forward(request,response);
โดยท SecondServlet คอชอ url ทตองการ forward
ในขนตอนนจะเปนการพฒนาโปรแกรมเพอสาธ0ตการท.างานของขอบเขตการท.างานของ Object แบบ
request โดยการพฒนาโปรแกรม Servlet ข,นมาสองโปรแกรมคอ FirstServlet ทจะใชในการส/งออปเจคซ,งม
source code ตาม Listing ท 6.1 และ โปรแกรม SecondServlet ทจะใช/ในการอ/านค/าของออปเจคทส/งออกมา
แลวน.ามาแสดงผล ซ,งม source code ตาม Listing ท 6.2
Listing ท 6.1 โปรแกรม FirstServlet.java
package servlet;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String name = "Thanisa";
request.setAttribute("RequestName", name);
RequestDispatcher obj = request.getRequestDispatcher("SecondServlet");
obj.forward(request, response);
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 41. 41
}
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
Listing ท 6.2 โปรแกรม SecondServlet.java
package servlet;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SecondServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String name = (String) request.getAttribute("RequestName");
out.println(name);
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 42. 42
6.1.1 ขนตอนการพฒนาโปรแกรมเพอสาธ0ตขอบเขตของ Object แบบ Request
เราสามารถทจะพฒนาโปรแกรม ตามขนตอนดงน
1. เลอกค.าสงสราง New Project จากเมน# เลอก Java Web แลวเลอก Web Application ก.าหนดชอโปร
เจคเปน ScopeDemo เลอก Server เปน Apache Tomcat 6.0.18 และ Java EE Version เปน Java
EE5 แลวกด Finish
2. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด ScopeDemo จากนนเลอกค.าสง New > Servlet
3. ก.าหนด Class Name: เปน FirstServlet.java และ Package เปน servlet แลวกด Finish
4. ในหนาต/าง Editor เขยน Source code ของ FirstServlet.java ดง Listing ท 6.1 แลวเลอกค.าสง Save
5. เลอกหนาต/าง Projects แลวคล0;กขวาทโหนด ScopeDemo จากนนเลอกค.าสง New > Servlet
6. ก.าหนด Class Name: เปน SecondServlet.java และ Package เปน servlet แลวกด Finish
7. ในหนาต/าง Editor เขยน Source code ของ SecondServlet.java ดง Listing ท 6.2 แลวเลอกค.าสง
Save
6.1.2 ขนตอนการทดสอบโปรแกรมเพอสาธ0ตขอบเขตของ Object แบบ Request
เราสามารถทจะทดสอบโปรแกรม ตามขนตอนดงน
1. ท.าการ Build และ Deploy โปรเจค ScopeDemo
2. ท.าการ Run โปรเจค ScopeDemo
3. ในโปรแกรม Web Browser เลอก url ทชอ http://localhost:8080/ScopeDemo/FirstServlet
แลวสงเกต1ผลลพธ5
4. ทดลองรน url ทชอ http://localhost:8080/ScopeDemo/SecondServlet โดยตรง แลวสงเกตผลลพธ5
อกครงจะเหนว/า ค/าทแสดงเปน null ทงนเนองจากโปรแกรมไม/ไดมการส/ง request มาจาก FirstServlet
6.2 การพฒนาโปรแกรมเพอสาธ(ตขอบเขตของ Object แบบ Session
ขอบเขตการใชงานของออปเจคแบบ Request จะส/งผ/านค/าของออปเจคตาม request ของ url ทงนไม/
สามารถทจะใชงานไดโดยการเรยก url นนโดยไม/มการส/ง request มาดงแสดงในขนตอนทผ/านมา เราสามารถท
จะก.าหนดขอบเขตของการใชงานของออปเจค ใหใชงานผ/านใน session ของ Web Browser ได (ตราบเท/าท
Browser ยงใช session นนอย#) โดยการก.าหนด Attribute ลงในออปเจคชน0ด HttpSession ซ,งจะเปนออปเจคท
/
เกบขอม#ล session ของ Web Browser อาท0เช/นเกบค/าของตวแปร String ชอว/า name ไวใน attribute
ของ session ทชอ SessionName โดยมร#ปแบบค.าสงดงน
String name = “Thanisa”;
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 43. 43
HttpSession session = request.getSession();
session.setAttribute(“SessionName”, name);
โปรแกรม Java Servlet อนๆสามารถทจะเรยกใช attribute ของ Session ทชอ SessionName และด,ง
ค/าของตวแปร name ออกมาได โดยใชค.าสง getAttribute() เพอเรยกค/าจาก Session โดยมร#ปแบบดงน
HttpSession session = request.getSession();
String name = (String) session.getAttribute(“SessionName”);
ในขนตอนนจะเปนการพฒนาโปรแกรมเพอสาธ0ตการท.างานของขอบเขตการท.างานของ Object แบบ
session โดยการพฒนาโปรแกรม Servlet ข,นมาสองโปรแกรมคอ FirstSessionServlet ทจะใชในการส/งออป
เจคซ,งม source code ตาม Listing ท 6.3 และ โปรแกรม SecondSessionServlet ทจะใช/ในการอ/านค/าของออป
เจคทส/งออกมาแลวน.ามาแสดงผล ซ,งม source code ตาม Listing ท 6.4
Listing ท 6.3 โปรแกรม FirstSessionServlet.java
package servlet;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FirstSessionServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
String name = "Thanisa";
HttpSession session = request.getSession();
session.setAttribute("SessionName", name);
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
- 44. 44
}
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
Listing ท 6.4 โปรแกรม SecondSessionServlet.java
package servlet;
import java.io.*;
import java.net.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SecondSessionServlet extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
try {
HttpSession session = request.getSession();
String name = (String) session.getAttribute("SessionName");
out.println(name);
} finally {
out.close();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}
public String getServletInfo() {
return "Short description";
}
// </editor-fold>
}
การเขยนโปรแกรม Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan