More Related Content
Similar to Java Web Programming Using NetBeans 6.5
Similar to Java Web Programming Using NetBeans 6.5 (20)
More from Thanachart Numnonda
More from 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