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


āļŠāļēāļĢāļšāļ
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

  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

     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


                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

         āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšāđ„āļŸāļĨ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

      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




                                   āļĢāļ›āļ— 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
9

āļŦāļĄāļēāļĒāđ€āļŦāļ•1 āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢ5āļ•āđ‚āļ”āļĒāļžāļ™āļāļēāļ™āļˆāļ°āđ€āļ›āļ™ 8080 āļĒāļāđ€āļ§āļ™āļ§/āļēāļˆāļ°āļ.āļēāļŦāļ™āļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ­āļ™




                           āļĢāļ›āļ— 1.6 āļœāļĨāļĨāļžāļ˜!āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ addCustomer.html




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
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

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




                                      āļĢāļ›āļ— 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




                                   āļĢāļ›āļ— 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




                                   āļĢāļ›āļ— 2.4 āļāļēāļĢāļ›+āļ­āļ™āļ‚āļ­āļĄāļĨāļŦāļ™āļē addCustomer.html




                              āļĢāļ›āļ— 2.5 āļœāļĨāļĨāļžāļ˜!āļˆāļēāļāļāļēāļĢāđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ CustomerServlet


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
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


                             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

           <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

               }

         āđ‚āļ›āļĢāđāļāļĢāļĄ 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

    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

         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


               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

    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


                      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

āļ‹:!āļ‡āđƒāļ™āļ—!āļ™&āļˆāļ°āđƒāļŠ 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

    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




                                        āļĢāļ›āļ— 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

    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




                                     āļĢāļ›āļ— 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


                   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

    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

 <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

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

                 }
             }



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

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

    }

    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




                                       āļĢāļ›āļ— 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

                          @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




                                    āļĢāļ›āļ— 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


                     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

āļ”āļ‡āļ™
         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

    }


    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

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

         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

    }


    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
45

6.2.1      āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Session

           āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

      1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet
      2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ FirstSessionServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish
      3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ FirstSessionServlet.java āļ”āļ‡ Listing āļ— 6.3 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē
           āļŠāļ‡ Save
      4.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet
      5.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ SecondSessionServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish
      6.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ SecondSessionServlet.java āļ”āļ‡ Listing āļ— 6.4 āđāļĨāļ§āđ€āļĨāļ­āļ
           āļ„.āļēāļŠāļ‡ Save

6.2.2      āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Session

           āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

      1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo
      2.   āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo
      3.   āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđ€āļĨāļ­āļ url āļ—āļŠāļ­
         http://localhost:8080/ScopeDemo/FirstSessionServlet
      4. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondSessionServlet        āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5
      5.   āļ—āļ”āļĨāļ­āļ‡āļ›@āļ” Web Browser āđāļĨāļ§āđ€āļ›@āļ”āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­
           http://localhost:8080/ScopeDemo/SecondSessionServlet āđƒāļŦāļĄ/āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5



6.3     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜(āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application

       āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ.āļēāļŦāļ™āļ”āļ‚āļ­āļšāđ€āļ‚āļ•āļāļēāļĢāđƒāļŠāļ‡āļēāļ™āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āđƒāļŦāđ€āļ›āļ™āđāļšāļš Application āļāļĨ/āļēāļ§āļ„āļ­āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļāļš
āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļŦāļĢāļ­ JSP āļ—1āļāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­āļĒ#/āļ āļēāļĒāđƒāļ™ Web Application āđ€āļ”āļĒāļ§āļāļ™āļ•āļĢāļēāļšāđƒāļ”āļ— Web Server
āļĒāļ‡ deploy āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ”āļ‡āļāļĨ/āļēāļ§āļ­āļĒ#/ āļ–,āļ‡āđāļĄāļ§/āļē Web Browser āļ‚āļ­āļ‡āļABāļ‡ client āļˆāļ°āļ›@āļ”āđ„āļ›āđāļĨāļ§āļāļ•āļēāļĄ
āļāļēāļĢāļ.āļēāļŦāļ™āļ”āļ‚āļ­āļšāđ€āļ‚āļ•āđāļšāļš Application āļŠāļēāļĄāļēāļĢāļ–āļ—.āļēāđ„āļ”āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ setAttribute() āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ”
ServletContext āļ‹,āļ‡āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļ—āđ€āļāļšāļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡ Web Application āļ‹,āļ‡āđƒāļ™āđāļ•/āļĨāļ° Web Application āļˆāļ°āļĄāļ­āļ­āļ›āđ€āļˆ
āļ„āļŠāļ™0āļ” ServletContext āļ­āļĒ#/āļŦāļ™,āļ‡āļ•āļ§ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāļĄāļēāđ„āļ”āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getServletContext()

           āļ•āļ§āļ­āļĒ/āļēāļ‡āļ„.āļēāļŠāļ‡āđƒāļ™āļāļēāļĢāđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” String āļ—āļŠāļ­ name āđ„āļ§āđƒāļ™ attribute āļ—āļŠāļ­ AppName āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
46

āļŠāļ™0āļ” ServletContext āļˆāļ°āļĄāļĢ#āļ›āđāļšāļšāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
         String name = "Thanisa";
         ServletContext context = getServletContext();
         context.setAttribute("AppName", name);

       āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ­āļ™āđ†āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ attribute āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” ServletContext āļ—āļŠāļ­
AppName āđāļĨāļ°āļ”,āļ‡āļ„/āļēāļ‚āļ­āļ‡āļ•āļ§āđāļ›āļĢ name āļ­āļ­āļāļĄāļēāđ„āļ” āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getAttribute() āđ€āļžāļ­āđ€āļĢāļĒāļāļ„/āļēāļˆāļēāļāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ”
ServletContext āđ‚āļ”āļĒāļĄāļĢ#āļ›āđāļšāļšāļ”āļ‡āļ™

         ServletContext context = getServletContext();
         String name = (String) context.getAttribute("AppName");
         out.println(name);

        āđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āļ‚āļ­āļšāđ€āļ‚āļ•āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡ Object āđāļšāļš
application āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ‚,āļ™āļĄāļēāļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ FirstAppServlet āļ—āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢāļŠ/āļ‡āļ­āļ­āļ›
āđ€āļˆāļ„āļ‹,āļ‡āļĄ source code āļ•āļēāļĄ Listing āļ— 6.5 āđāļĨāļ° āđ‚āļ›āļĢāđāļāļĢāļĄ SecondAppServlet āļ—āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢāļ­/āļēāļ™āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„
āļ—āļŠ/āļ‡āļ­āļ­āļāļĄāļēāđāļĨāļ§āļ™.āļēāļĄāļēāđāļŠāļ”āļ‡āļœāļĨ āļ‹,āļ‡āļĄ source code āļ•āļēāļĄ Listing āļ— 6.6

Listing āļ— 6.5 āđ‚āļ›āļĢāđāļāļĢāļĄ FirstAppServlet.java

package servlet;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;


package servlet;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;


public class FirstAppServlet 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";
         ServletContext context = getServletContext();

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
47

            context.setAttribute("AppName", 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>
}

Listing āļ— 6.6 āđ‚āļ›āļĢāđāļāļĢāļĄ SecondAppServlet.java

package servlet;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;


public class SecondAppServlet extends HttpServlet {


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
          throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try {
          ServletContext context = getServletContext();
          String name = (String) context.getAttribute("AppName");
          out.println(name);
      } finally {
          out.close();
      }
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
48

         processRequest(request, response);
    }



    protected void doPost(HttpServletRequest request, HttpServletResponse response)
         throws ServletException, IOException {
      processRequest(request, response);
    }


    public String getServletInfo() {
       return "Short description";
    }
    // </editor-fold>
}

6.3.1        āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application

             āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet
        2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ FirstAppServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish
        3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ FirstAppServlet.java āļ”āļ‡ Listing āļ— 6.5 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡
             Save
        4.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet
        5.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ SecondAppServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish
        6.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ SecondAppServlet.java āļ”āļ‡ Listing āļ— 6.6 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē
             āļŠāļ‡ Save

6.3.2        āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application

             āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo
        2.   āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo
        3.   āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđ€āļĨāļ­āļ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/FirstAppServlet
        4.   āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondAppServlet āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5
        5.   āļ—āļ”āļĨāļ­āļ‡āļ›@āļ” Web Browser āđāļĨāļ§āđ€āļ›@āļ”āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­
             http://localhost:8080/ScopeDemo/SecondAppServlet āđƒāļŦāļĄ/āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                              Thanachart Numnonda / Thanisa Kruawaisayawan
49


               Exercise 7 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ—
                               Web Listener

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

       āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ Web Application āļ—āļŠāļ­ WebBaseDB āļ—āđƒāļŠāđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡
āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđāļĨāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡ Table āđ‚āļ”āļĒāđ€āļž0āļĄāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Web Listener āđ€āļžāļ­āļ—.āļēāļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđāļ—āļ™āļ§0āļ˜
āļāļēāļĢāđ€āļ”0āļĄāļ—āđ€āļŠāļ­āļĄāļ•/āļ­āđƒāļ™āđ€āļĄāļ˜āļ­āļ” init()

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

      1.   āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java
      2.   āđāļāđ„āļ‚āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java

7.1    āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java

       āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļ.āļēāļŦāļ™āļ”āļ„.āļēāļŠāļ‡āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āđƒāļ™āđ€āļĄāļ˜āļ­āļ” init() āļ‹,āļ‡āđ€āļ›āļ™āļ§0āļ˜āļāļēāļĢāļ—
āđ„āļĄ/āđ€āļŦāļĄāļēāļ°āļŠāļĄāļĄāļēāļāļ™āļ āđ€āļ™āļ­āļ‡āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—1āļāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļˆāļ°āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ•āļ­āļ‡āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™
āļŠ/āļ§āļ™āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” init() āļ—āļ‹.āļēāļāļ™ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļŠ/āļ§āļ™āļ™āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠ ContextListener

      āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļˆāļ°āļĄ Listener āļ­āļĒ#/āļŠāļ­āļ‡āļŠāļ™0āļ”āļ„āļ­ ContextListener āđāļĨāļ° SessionListener āđ‚āļ”āļĒāļ—
ContextListener āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđ€āļĄāļ­ Web Application āđ€āļĢ0āļĄāļ•āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļŦāļĢāļ­āļŠ0āļ™āļŠ1āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°
āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— Servlet Listener āđ„āļ”āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

      1.   āļžāļ’āļ™āļēāļ„āļĨāļēāļŠāļ— implements Listener āļ—āļ•āļ­āļ‡āļāļēāļĢāļ­āļēāļ—0āđ€āļŠ/āļ™ ServletContextListener
      2.   āđ€āļ‚āļĒāļ™āđ€āļĄāļ˜āļ­āļ”āļ—āļ•āļ­āļ‡ implements āđƒāļ™ Listener āļ™āļ™āđ†
      3.   config āđ„āļŸāļĨ5 web.xml āđ€āļžāļ­āđ€āļž0āļĄāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener

       āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āđ€āļ›āļ™ ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ
āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ Connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļ‚āļĒāļ™āļ„.āļēāļŠāļ‡āđ€āļŦāļĨ/āļēāļ™āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ”
contextInitialized() āļ‹,āļ‡āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđ€āļĄāļ­ Web Application āđ€āļĢ0āļĄāļ•āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™

           āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āļ”āļ‡āļ™

      1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
50

    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Web Application Listener āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ Init āđāļĨāļ° Package āđ€āļ›āļ™ listener āđāļĨāļ§āļāļ” Finish āļ”āļ‡āļĢ#āļ›āļ— 7.1




                                   āļĢāļ›āļ— 7.1 āļāļēāļĢāļŠāļĢāļēāļ‡āļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Web Listener

    4.   āđƒāļ™āļŦāļ™āļē Editor āđƒāļŦāļ„āļĨ0;āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Insert Code... > Use Database
    5.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Choose Database āļāļ”āļ›'<āļĄ Add...
    6.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Data Source Reference āđƒāļŦāļ.āļēāļŦāļ™āļ” Reference Name: āđ€āļ›āļ™ jdbc/test āļ”āļ‡āļĢ#āļ›āļ— 7.2




                                      āļĢāļ›āļ— 7.2 āļāļēāļĢāļāļēāļŦāļ™āļ” Reference Name

    7.   āđ‚āļ›āļĢāđāļāļĄāļˆāļ°āļ›āļĢāļēāļāļ sourcecode āļ”āļ‡āļ™āđƒāļ™āđ„āļŸāļĨ5 Init.java

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
51


         private DataSource getJdbcTest() throws NamingException {
                 Context c = new InitialContext();
                 return (DataSource) c.lookup("java:comp/env/jdbc/test");
         }

    8.   āđƒāļŦāļ—.āļēāļāļēāļĢāđ€āļž0āļĄ sourcecode āļ”āļ‡āļ•/āļ­āđ„āļ›āļ™āđƒāļ™āđ€āļĄāļ˜āļ­āļ” contextInitialized
                  conn = getJdbcTest().getConnection();
                         arg0.getServletContext().setAttribute("connection", conn);

    9.   āļˆāļēāļāļ™āļ™āđƒāļŦāļ—.āļēāļāļēāļĢ Fix Imports āđāļĨāļ° āļˆāļ°āļ—.āļēāđƒāļŦ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Init.java āļ”āļ‡āļ™
         private Connection conn;
         public void contextInitialized(ServletContextEvent arg0) {
                 try {
                         conn = getJdbcTest().getConnection();
                                arg0.getServletContext().setAttribute("connection", conn);
                 } catch (SQLException ex) {
                         Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);
                 } catch (NamingException ex) {
                         Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);
                 }
          }

    10. āļˆāļēāļāļ™āļ™āļ„āļ§āļĢāđ€āļž0āļĄāđ€āļ•0āļĄāļ„.āļēāļŠāļ‡āļ•/āļ­āđ„āļ›āļ™āđƒāļ™āđ€āļĄāļ˜āļ­āļ” contextDestroyed

         public void contextDestroyed(ServletContextEvent arg0) {
            try {
                  conn.close();
             } catch (SQLException ex) {
                 Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);
            }
         }

         āđ€āļĢāļēāļˆāļ°āđ„āļ” sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Init.java āļ”āļ‡ Listing āļ—   7.1

Listing āļ— 7.1 āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java

public class Init implements ServletContextListener {

   private Connection conn;

   public void contextInitialized(ServletContextEvent arg0) {
     try {
        conn = getJdbcTest().getConnection();
        arg0.getServletContext().setAttribute("connection", conn);
     } catch (SQLException ex) {
        Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);
     } catch (NamingException ex) {
        Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
52

            }
       }

       public void contextDestroyed(ServletContextEvent sce) {
         try {
            conn.close();
         } catch (SQLException ex) {
            Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex);
         }
       }

       private DataSource getJdbcTest() throws NamingException {
          Context c = new InitialContext();
          return (DataSource) c.lookup("java:comp/env/jdbc/test");
       }
}

7.2         āļāļēāļĢāļ›āļĢāļšāļ›āļĢāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java

      āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āļˆāļ°āļĄ.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆ,āļ‡āļ•āļ­āļ‡āđāļāđ„āļ‚āļ„.āļēāļŠāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡
āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āđƒāļ™āđ„āļŸāļĨ5 AddBookServlet.java āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

           1.   āđƒāļŦāļĨāļšāļ„.āļēāļŠāļ‡
                @Resource(name = "jdbc/test")
                private DataSource jdbcTest;

           2.   āđāļāđ„āļ‚āđ€āļĄāļ˜āļ­āļ” init() āđƒāļŦāđ€āļ›āļ™āļ”āļ‡āļ™
                  public void init() {
                       conn = (Connection) getServletContext().getAttribute("connection");
                  }

                āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđƒāļŦāļĄ/āļ”āļ‡ Listing āļ— 7.2

Lisitng āļ— 7.2 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java

....

public class AddBookServlet extends HttpServlet {


       private Connection conn;

       public void init() {
         conn = (Connection) getServletContext().getAttribute("connection");
       }

       protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
         response.setContentType("text/html;charset=UTF-8");
         PrintWriter out = response.getWriter();

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                                 Thanachart Numnonda / Thanisa Kruawaisayawan
53

         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();
    }
             ....
}

7.3      āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

        1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB
        2.   Run āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB āļ—āļ‡āļ™āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļĢāļ™ MySQL Database Server āļ/āļ­āļ™
        6.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļŦāļ™āļē addBook.html āđƒāļŦāđ€āļĢāļēāđƒāļŠ/āļ‚āļ­āļĄ#āļĨ :āļ‹āļ‡āđ€āļĄāļ­āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļˆāļ°āđ„āļ”āļœāļĨāļĨāļž5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđāļšāļš
             āļāļāļŦāļ”āļ/āļ­āļ™




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
54


                       Exercise 8 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ€āļžāļ­āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5

         āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āļ­āļ˜0āļšāļēāļĒāļāļēāļĢāđƒāļŠ Servlet Filter āđƒāļ™āļāļēāļĢ
āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢ login āđ€āļ‚āļēāļŠ#/āļĢāļ°āļšāļš āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļšāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­āļĒ#/āđƒāļ™ Web Application āļˆāļ°āļ–#āļ
Filter āđ€āļĢāļĒāļāđ€āļžāļ­āļ•āļ§āļŠāļ­āļšāļŠāļ–āļēāļ™āļ°āļāļēāļĢ login āļ/āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļ™āđ„āļ”

8.1   āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter

      āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļ.āļēāļŦāļ™āļ”āļ‚,āļ™āļĄāļēāđƒāļ™ Web Application āļ‹,āļ‡āļˆāļ°āļ”āļāļāļēāļĢāļ—.āļēāļ‡āļēāļ™
āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđƒāļ”āđ† āđāļĨāļ§āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđāļāđ„āļ‚āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” request āđāļĨāļ° response āļ/āļ­āļ™āļ—
āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ™āļ™āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđƒāļŠāļ•/āļ­āđ„āļ› āļ•āļ§āļ­āļĒ/āļēāļ‡āļ‚āļ­āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āļ„āļ­

              ●   āļāļēāļĢāļ„āļ§āļšāļ„1āļĄāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet āļŦāļĢāļ­āļāļēāļĢāļ—.āļē Authentication
              ●   āļāļēāļĢāļšāļĨāļ­āļāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet āļŦāļĢāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet
              ●   āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ request

      āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āļˆāļ°āđ€āļ›āļ™ āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ— implements āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠāļ—āļŠāļ­ Filter āđāļĨāļ°āļĄāđ€āļĄāļ˜āļ­āļ”
āļŦāļĨāļāļ„āļ­ init(), destroy() āđāļĨāļ° doFilter()

        āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦ url āđƒāļ”āđ† āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ–#āļ Filter āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet
Filter āđƒāļ”āđ† āđ‚āļ”āļĒāļāļēāļĢāļ.āļēāļŦāļ™āļ”āļ„/āļēāđƒāļ™ web.xml āļ­āļēāļ—0āđ€āļŠ/āļ™āļ„.āļēāļŠāļ‡

            <filter>
               <filter-name>LoginFilter</filter-name>
               <filter-class>LoginFilter</filter-class>
            </filter>
            <filter-mapping>
               <filter-name>LoginFilter</filter-name>
               <url-pattern>/*</url-pattern>
            </filter-mapping>

         āđ€āļ›āļ™āļāļēāļĢāļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ url āļ—1āļāļ•āļ§āļ—āļ­āļĒ#/āđƒāļ™ Web Application āļ™ āļ•āļ­āļ‡āļ–#āļāļ”āļāđ‚āļ”āļĒ Servlet Filter āļ—āļŠāļ­
LoginFilter

       āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļĄ web form āļ—āļŠāļ­ login.html āļ‹,āļ‡āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet āļ‹,āļ‡
āļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„/āļē username āđāļĨāļ° password āļ—āļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļē āļŦāļēāļāļ–#āļāļ•āļ­āļ‡āļāļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļ—āļŠāļ­
loginFlag āđ€āļ›āļ™ true āđāļĨāļ§āļ.āļēāļŦāļ™āļ”āđƒāļŦāļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ loginFlag āđ€āļ›āļ™āđāļšāļš Session āđ‚āļ”āļĒāļāļēāļĢ setAttribute

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
55

āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession

       āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ™āļĒāļ‡āļĄ Servlet Filter āļ—āļŠāļ­ LoginFilter āļ‹,āļ‡āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āļ­/āļēāļ™āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›
āđ€āļˆāļ„ LoginFlag āļ—āļ­āļĒ#/āđƒāļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession āļ–āļēāļŦāļēāļāđ„āļĄ/āļžāļšāļŦāļĢāļ­āļĄāļ„/āļēāđ€āļ›āļ™ false āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĢāļ°āļš1 HTTP
Error 401 (This request requires HTTP authentication . )

      āļŠ1āļ”āļ—āļēāļĒāļˆāļ°āļĄāļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļŠāļ­ ShowServlet āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē HelloWorld
āđ€āļžāļ­āđāļŠāļ”āļ‡āđƒāļŦāđ€āļŦāļ™āļ§/āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ–#āļāļ”āļāđ‚āļ”āļĒ LoginFilter

8.2   āļāļēāļĢāđ€āļ‚%āļĒāļ™āļŦāļ™āļē Login

       āļŦāļ™āļē Login āļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄāļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ login.html āļ‹,āļ‡āļˆāļ°āđ€āļ›āļ™ web page āļ—āļĄāļĨāļāļĐāļ“āļ°āļ”āļ‡āļĢ#āļ› āđāļĨāļ°āļĄ
source code āļ•āļēāļĄ Listing āļ— 8.1 āļ™āļ­āļāļˆāļēāļāļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet āļ‹,āļ‡āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—
āļŠāļ­ username āđāļĨāļ° password āļžāļĢāļ­āļĄāļ—āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§/āļēāļĄāļ„/āļēāđ€āļ›āļ™ thana āđāļĨāļ° secret āļŦāļĢāļ­āđ„āļĄ/ āļŦāļēāļāđƒāļŠ/āļāļˆāļ°āļ.āļēāļŦāļ™āļ”āļ„/āļē
āļ•āļ§āđāļ›āļĢ loginFlag āđ€āļ›āļ™ true āđāļĨāļ§āđ€āļāļšāļĨāļ‡āđƒāļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ”āļ‡ Listing
āļ— 8.2




                                      āļĢāļ›āļ— 8.1 āđ€āļ§āļšāļŦāļ™āļē Login

Listing āļ— 8.1 āđ‚āļ›āļĢāđāļāļĢāļĄ login.html

<html>
   <head>
      <title>Login Page</title>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   </head>
   <body>
      <form action="LoginServlet" method="POST">
         UserName: <input name="username" /> <br>
         Password: <input type="password" name="password" /> <br>
         <input type="submit" value="Login" />
      </form>
   </body>
</html>


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
56

Listing āļ— 8.2 āđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet.java

package controller;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;


public class LoginServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       response.setContentType("text/html;charset=UTF-8");
       PrintWriter out = response.getWriter();
       try {
          boolean loginFlag = false;
          String username = request.getParameter("username");
          String password = request.getParameter("password");
          if (username.equals("thana") && password.equals("secret")) {
                loginFlag = true;
          }
          HttpSession session = request.getSession();
          session.setAttribute("loginFlag", loginFlag);

          response.sendRedirect("show.do");

        } 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";
    }
}


8.2.1     āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

          āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                       Thanachart Numnonda / Thanisa Kruawaisayawan
57


      1.   āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡āļŠāļĢāļēāļ‡ New Project āļˆāļēāļāđ€āļĄāļ™# āđ€āļĨāļ­āļ Java Web āđāļĨāļ§āđ€āļĨāļ­āļ Web Application āļ.āļēāļŦāļ™āļ”āļŠāļ­ āđ‚āļ›āļĢ
           āđ€āļˆāļ„āđ€āļ›āļ™ FilterDemo āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ° Java EE Version āđ€āļ›āļ™ Java
           EE5 āđāļĨāļ§āļāļ” Finish
      2.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > HTML..
      3.   āļ.āļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ login āđāļĨāļ§āļāļ” Finish
      4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ login.html āļ”āļ‡ Listing āļ— 8.1 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save
      5.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet...
      6.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ LoginServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Finish
      7.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ LoginServlet.java āļ”āļ‡ Listing āļ— 8.2 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡
           Save

8.3    āļāļēāļĢāđ€āļ‚%āļĒāļ™ Servlet Filter

        āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļ attribute āļ—āļŠāļ­ loginFlag āđāļĨāļ°āļŦāļēāļāđ„āļĄ/āļžāļšāļŦāļĢāļ­āļĄāļ„/āļēāđ€āļ›āļ™
false āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĢāļ°āļš1 HTTP Error 401 āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter āļˆāļ°āļĄ source code āļŦāļĨāļāļ­āļĒ#/āļ— āđ€āļĄāļ˜āļ­āļ”
doFilter() āļ”āļ‡ Listing āļ— 8.3

      āļ™āļ­āļāļˆāļēāļāļ™āļāļĢāļ“āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦ url āđ€āļ‰āļžāļēāļ°āļŠāļ­ *.do āđ€āļ—/āļēāļ™āļ™āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Filter āļ—āļŠāļ­ LoginFilter āļ‹,āļ‡
āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāđāļāđ„āļ‚ web.xml āļ”āļ‡āļ™
             <filter>
                <filter-name>LoginFilter</filter-name>
                <filter-class>filter.LoginFilter</filter-class>
             </filter>
             <filter-mapping>
                <filter-name>LoginFilter</filter-name>
                <url-pattern>*.do</url-pattern>
             </filter-mapping>



Listing āļ— 8.3 āđ€āļĄāļ˜āļ­āļ” doFilter() āļ‚āļ­āļ‡ āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter.java

  public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain)
        throws IOException, ServletException {


       if (debug) {
           log("LoginFilter:doFilter()");
       }

       doBeforeProcessing(request, response);


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                                  Thanachart Numnonda / Thanisa Kruawaisayawan
58

         HttpServletRequest req = (HttpServletRequest) request;
        HttpSession session = req.getSession();
        Boolean flag = (Boolean) session.getAttribute("loginFlag");
        boolean loginFlag;
        if (flag == null) {
            loginFlag = false;
        } else {
            loginFlag = flag;
        }
        if (!loginFlag) {
            HttpServletResponse res = (HttpServletResponse) response;
            res.sendError(HttpServletResponse.SC_UNAUTHORIZED);
            return;
        }

        Throwable problem = null;

        try {
           chain.doFilter(request, response);
        } catch (Throwable t) {

            problem = t;
            t.printStackTrace();
        }

        doAfterProcessing(request, response);

        if (problem != null) {
            if (problem instanceof ServletException) {
                throw (ServletException) problem;
            }
            if (problem instanceof IOException) {
                throw (IOException) problem;
            }
            sendProcessingError(problem, response);
        }
   }




8.3.1       āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

            āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

       1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other..
       2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
            āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Filter āđāļĨāļ§āļāļ” Next
       3.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ LoginFilter āđāļĨāļ° Package āđ€āļ›āļ™ filter āđāļĨāļ§āļāļ” Next
       4.   āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āđƒāļŦāđƒāļŠāļ„/āļēāļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āļ”āļ‡āļĢ#āļ›āļ— 8.2 āđāļĨāļ§āļāļ” Finish


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
59




                                     āļĢāļ›āļ— 8.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļēāļ‚āļ­āļ‡ Filter

    5.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāđāļāđ„āļ‚āđ„āļŸāļĨ5 web.xml āđ€āļžāļ­āļĢāļ°āļš1 Filter āđƒāļŦāļĄ/āļ—āļŠāļĢāļēāļ‡āļ‚,āļ™ āļ‹,āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļāļēāļĢāđāļāđ„āļ‚āļ™
         āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” FilterDemo > Web Pages >WEB-INF āđāļĨāļ§āđ€āļĨāļ­āļāđ„āļŸāļĨ5 web.xml āļˆāļ°āđ€āļŦāļ™
         āļŦāļ™āļēāļ•/āļēāļ‡āļ”āļ‡āļĢ#āļ›āļ— 8.3




                                      āļĢāļ›āļ— 8.3 āļŦāļ™āļēāļ•-āļēāļ‡āđ„āļŸāļĨ! web.xml

    6.   āđƒāļ™āļŠ/āļ§āļ™āļ‚āļ­āļ‡ Filter Mappings āđƒāļŦāđ€āļĨāļ­āļ LoginFilter āđāļĨāļ§āļāļ” Edit āđ€āļžāļ­āđāļāđ„āļ‚ Applies To āđ€āļ›āļ™ *.do āļ”āļ‡
         āļĢ#āļ›āļ— 8.4




                                   āļĢāļ›āļ— 8.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Filter Mapping

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
60


      7.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” doFilter() āļ‚āļ­āļ‡āđ„āļŸāļĨ5 LoginFilter.java āļ”āļ‡ Listing
           āļ— 8.3 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save


8.4     āļāļēāļĢāđ€āļ‚%āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet

       āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē Hello World āđāļĨāļ°āļĄ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ”
processRequest() āļ”āļ‡ Listing āļ— 8.4

Listing āļ— 8.4 āđ€āļĄāļ˜āļ­āļ” processRequest() āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet.java


   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();
      try {
          out.println("<html>");
          out.println("<head>");
          out.println("<title>Servlet ShowServlet</title>");
          out.println("</head>");
          out.println("<body>");
          out.println("<h1> Hello World </h1>");
          out.println("</body>");
          out.println("</html>");
      } finally {
          out.close();
      }
   }

8.4.1      āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ

           āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

      1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet..
      2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ ShowServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ view āđāļĨāļ§āļāļ” Next
      3.   āļ.āļēāļŦāļ™āļ” URL Pattern(s) āđ€āļ›āļ™ /show.do āļ”āļ‡āļĢ#āļ›āļ— 8.5 āđāļĨāļ§āļāļ” Finish




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
61




                                   āļĢāļ›āļ— 8.5 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē URL pattern

      4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ ShowServlet.java āļ”āļ‡ Listing āļ— 8.4 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save

8.5    āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

           āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

      1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ FilterDemo
      2.   āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ FilterDemo
      3.   āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/FilterDemo/show.do āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5āļˆāļ°āđ€āļŦāļ™āļ§/āļēāđāļŠāļ”āļ‡āļ‚āļ­
           āļœ0āļ”āļžāļĨāļēāļ” HTTP 401
      4.   āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/FilterDemo/login.html āđāļĨāļ§āļ›%āļ­āļ™ username āđ€āļ›āļ™ thana
           āđāļĨāļ° password āđ€āļ›āļ™ secret




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
62


                     Exercise 9 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

      āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļˆāļēāļāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļ­āļ­āļāļ—āļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web
Browser āđ‚āļ”āļĒāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WebbaseDB āđ€āļžāļ­āđ€āļ•0āļĄ

9.1    āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ          hello.jsp

      āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ°āļ§āļ™āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ Web Server āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°
āđ€āļ›āļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđāļšāļš dynamic content āļˆ,āļ‡āļ•āļ­āļ‡āļžāļ’āļ™āļēāđ‚āļ”āļĒāđƒāļŠāļ āļēāļĐāļē JSP āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

      1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other..
      2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ
           āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
      3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ hello āđāļĨāļ§āļāļ” Finish
      4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 hello.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 9.1
      5.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB
                                                   E
      6.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 hello.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄ
      7.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļ”āļ‡āļĢ#āļ›āļ— 1

Listing āļ— 9.1 āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Hello JSP</title>
  </head>
  <body>

   <h1>My First JSP</h1>

       Hello : Current time is : <%= new java.util.Date() %>

  </body>
</html>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
63




                                        āļĢāļ›āļ— 9.1 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡ hello.jsp


9.2       āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ       viewBook.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡ Table āļ—āļŠāļ­ books āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°
āđ€āļĢāļĒāļāđƒāļŠ standard tags āļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™ JSTL 1.1 āļ‹,āļ‡āļ—.āļēāđƒāļŦāļœ#āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ„āļĄ/āļ•āļ­āļ‡āđ€āļ‚āļĒāļ™ source code āļ āļēāļĐāļē
Java āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ•/āļēāļ‡āđ† āļ—āļŠ.āļēāļ„āļāļ”āļ‡āļ™

9.2.1      āļāļēāļĢāļ.āļēāļŦāļ™āļ” Tag Library

       āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ JSTL 1.0 āđ€āļĢāļēāļˆ,āļ‡āļˆ.āļēāđ€āļ›āļ™āļ•āļ­āļ‡āļĄāļ„.āļēāļŠāļ‡ Taglib āđ€āļžāļ­āļ—āļˆāļ°āļ›āļĢāļ°āļāļēāļĻ
Library āļ”āļ‡āļ™

                  <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
                  <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>



9.2.2      āļāļēāļĢāļ.āļēāļŦāļ™āļ” Datasource

       āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ™āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āļ•āļ­āļ‡āđƒāļŠ datasource āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–
āļ.āļēāļŦāļ™āļ”āđ„āļ”āļŠāļ­āļ‡āļ§0āļ˜

      ●    āļāļĢāļ“āļ—āļĄ datasource āļ‹,āļ‡āđ€āļŠāļ­āļĄāļ•/āļ­āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ•āļ­āļ‡āļāļēāļĢāļ­āļĒ#/āđāļĨāļ§ āļāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļ­āļ™āđ€āļ”0āļĄāđ„āļ”āđ€āļĨāļĒ āļ•āļ§āļ­āļĒ/āļēāļ‡āđ€āļŠ/āļ™
           jdbc/test āđ‚āļ”āļĒāđ„āļĄ/āļˆ.āļēāđ€āļ›āļ™āļ•āļ­āļ‡āļŠāļĢāļēāļ‡ dataSource āļ‚,āļ™āđƒāļŦāļĄ/āļ­āļ
      ●    āļāļĢāļ“āļ—āļĒāļ‡āđ„āļĄ/āļĄ datasource āđƒāļŦāđƒāļŠāļ„.āļēāļŠāļ‡ setDataSource āđ€āļ›āļ™ Tag āđ€āļžāļ­āđƒāļŦāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ.āļēāļŦāļ™āļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­
           āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ°āļ.āļēāļŦāļ™āļ”āļ„/āļēāđ„āļ§āđƒāļ™āļ•āļ§āđāļ›āļĢāļ•āļēāļĄāļŠāļ­āļ—āļ.āļēāļŦāļ™āļ”



āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
64

         āļ–,āļ‡āđāļĄāļ§/āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WebBaseDB āļˆāļ°āļĄ datasource āļ­āļĒ#/āđāļĨāļ§ āđāļ•/āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ” datasource āļ‚,āļ™āļĄāļē
         āđƒāļŦāļĄ/āļ­āļāļŦāļ™,āļ‡āļŠ1āļ” āļ.āļēāļŦāļ™āļ”āđ€āļ›āļ™āļ•āļ§āđāļ›āļĢāļ—āļŠāļ­ newdatasource āđ‚āļ”āļĒāļˆāļ°āļ.āļēāļŦāļ™āļ”āļ„.āļēāļŠāļ‡āđ€āļ›āļ™
               <sql:setDataSource var="newdatasource" driver="com.mysql.jdbc.Driver"
                        url="jdbc:mysql:///test" user="root" password="root" />

         āđ€āļžāļ­āđ€āļ›āļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āļ— url āļ—āļŠāļ­    jdbc:mysql:///test

9.2.3    āļāļēāļĢāđƒāļŠāļ„.āļēāļŠāļ‡ sql:query

         āļ„.āļēāļŠāļ‡ sql:query āđ€āļ›āļ™āļ„.āļēāļŠāļ‡āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”#āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āđ€āļŠāļ­āļĄāļ•/āļ­āđƒāļ™ datasource āļ—āđ€āļ›āļ™ jdbc/test
         āļŦāļĢāļ­āļ•āļ§āđāļ›āļĢ newdatasource āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āđ€āļĢāļēāļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠāļ„.āļēāļŠāļ‡ SQL āļ„āļ­ select *
         from books āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ sql:query āļ”āļ‡āļ™

                     <sql:query var="db" dataSource="/jdbc/test">
                       SELECT * FROM books
                     </sql:query>

         āļŦāļĢāļ­
                     <sql:query var="db" dataSource="${newdatasource}">
                        SELECT * FROM books
                     </sql:query>


9.2.4    āļāļēāļĢāđƒāļŠāļ„.āļēāļŠāļ‡ c:forEach āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨ

         āļāļēāļĢāđāļŠāļ”āļ‡āļ„/āļēāļ‚āļ­āļ‡āļœāļĨāļĨāļžāļ˜5āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢ Query āļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļŠāļēāļĄāļēāļĢāļ–āļ—.āļēāđ„āļ” āļāļēāļĢāđāļˆāļ‡āļ‚āļ­āļĄ#āļĨāļ—āļĨāļ°āđāļ–āļ§āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡
         c:forEach āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļŠāļ­āļŦāļ™āļ‡āļŠāļ­ āđāļĨāļ°āļŠāļ­āļœ#āđāļ•/āļ‡ āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™

                     <c:forEach var="row" items="${db.rows}">
                       ${row.title} : ${row.author} <br>
                     </c:forEach>


         āļŠ.āļēāļŦāļĢāļšāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™ āļĄāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ viewBook āđāļĨāļ§āļāļ” Finish
    4.   āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WebBaseDB āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Libraries āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Add Libraries..

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
65

    5.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Library āđ€āļĨāļ­āļ JSTL1.1 āđāļĨāļ§āļāļ”āļ›16āļĄ Add Library āļ”āļ‡āļĢ#āļ›āļ— 9.2




                                   āļĢāļ›āļ— 9.2 āļāļēāļĢāđ€āļžāļĄ Library āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„

    6.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 viewBook.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 9.2
    7.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB
    8.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 viewBook.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄ
    9.   āļ— Web Browser āđ€āļ›āļĨāļĒāļ™ URL āđ€āļ›āļ™ http://localhost:8080/WebBaseDB/viewBook.jsp āļˆāļ°āđ„āļ”
         āļœāļĨāļĨāļžāļ˜5āļ”āļ‡āļ•āļ§āļ­āļĒ/āļēāļ‡āđƒāļ™āļĢ#āļ›āļ— 9.3




                                   āļĢāļ›āļ— 9.3 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡ viewBook.jsp


Listing āļ— 9.2 āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
66

<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>


<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Page</title>
  </head>
  <body>

   <h1>JSP Page</h1>

   <sql:setDataSource var="newdatasource"
    driver="com.mysql.jdbc.Driver"
    url="jdbc:mysql:///test"
   user="root" password="root" />

   <sql:query var="db" dataSource="${newdatasource}">
     SELECT * FROM books
   </sql:query>

 <c:forEach var="row" items="${db.rows}">
     ${row.title} : ${row.author} <br>
  </c:forEach>

  </body>
</html>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
67


              Exercise 10 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļš Online Book Store

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ°
                 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

         āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āļŠāļĢāļēāļ‡ Web Form āđƒāļŦāļœ#āđƒāļŠāđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ•/āļēāļ‡āđ† āļ—āļĄ
āļ­āļĒ#/āđƒāļ™ table āļ—āļŠāļ­ books āļˆāļēāļāļ™āļ™āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļāļ­āļ­āļāļĄāļēāļ—āļēāļ‡āđ€āļ§āļšāđ€āļžāļˆ

10.1     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļĄāļ­āļĒ#/āđƒāļ™ table āļ—āļŠāļ­
books āļ­āļ­āļāļĄāļēāđāļŠāļ”āļ‡āđƒāļ™āļĢ#āļ›āđāļšāļšāļ‚āļ­āļ‡ Web Form āđ€āļžāļ­āđƒāļŦāļœ#āđƒāļŠāđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āđāļĨāļ°āļˆ.āļēāļ™āļ§āļ™āļ”āļ‡āļĢ#āļ›āļ— 10.1 āļ—āļ‡āļ™
Web Form āļ™āļˆāļ°āđ€āļĢāļĒāļ url āļ—āļŠāļ­ processSelection āđ€āļĄāļ­āļĄāļāļēāļĢāļāļ”āļ›16āļĄ Select āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ SQL tags āļ‚āļ­āļ‡
JSTL āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļ‚āļ­āļĄ#āļĨāļĢāļēāļĒāļŠāļ­āļŦāļ™āļ‡āļŠāļ­ āđ‚āļ”āļĒāļĄ source code āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™ Listing āļ— 10.1 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢ
āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

    1)   āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project..
    2)   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web
         Application āđāļĨāļ§āļāļ” Next
    3)   āļ.āļēāļŦāļ™āļ” Project Name: āđ€āļ›āļ™ BookOnline āđāļĨāļ§āđ€āļĨāļ­āļ Project Location: āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°
         āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ§āļāļ” Finish
    4)   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    5)   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
    6)   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ selectBooks āđāļĨāļ§āļāļ” Finish
    7)   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 selectBooks.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.1
    8)   āļāļ”āļ›16āļĄ Save




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
68




                              āļĢāļ›āļ— 10.1 āļ•āļ§āļ­āļĒ-āļēāļ‡āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp

Listing āļ— 10.1 āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>JSP Page</title>
   </head>
   <body>

   <sql:setDataSource var="ds" driver="com.mysql.jdbc.Driver"
   url="jdbc:mysql:///test" user="root" password="root" />

   <sql:query var="rs" dataSource="${ds}">
     select * from books
   </sql:query>

   <h1>Select Books</h1>
   <form action="ProcessSelection" method="POST">
     <table border="1">
        <thead>
          <tr>
             <th></th>
             <th> Title </th>


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
69

              <th> Author </th>
              <th> Price</th>
           </tr>
        </thead>
        <tbody>
           <c:forEach var="book" items="${rs.rows}">
              <tr>
                 <td><input type="checkbox" name="isbn"
                  value="${book.isbn}" /> </td>
                 <td>${book.title}</td>
                 <td>${book.author}</td>
                 <td>${book.price}</td>
              </tr>
           </c:forEach>
        </tbody>
     </table>
     <input type="submit" value="Select" />
  </form>
  </body>
</html>


10.2     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1Book.java

        āđ‚āļ›āļĢāđāļāļĢāļĄ Book.java āđ€āļ›āļ™āļ„āļĨāļēāļŠāļ—āļĄ attribute āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš table āļ—āļŠāļ­ books āđ‚āļ”āļĒāļĄ source code āļ”āļ‡
Listing āļ— 10.2 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class..
    2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ Book.java āđāļĨāļ° Package āđ€āļ›āļ™ model āđāļĨāļ§āļāļ” Next
    3.   āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļ™ āđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookActionForm āļ”āļ‡āļ™
                   String isbn;
                   String title;
                   String author;
                   double price;
    4.   āļ—.āļēāļāļēāļĢ encapsulate attribute (āļ.āļēāļŦāļ™āļ” attribute āđƒāļŦāđ€āļ›āļ™ private āđāļĨāļ° āļŠāļĢāļēāļ‡āđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter)
         āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ Refactor > Encapsulate Field..
    5.   āļāļ”āļ›16āļĄ Refactor āđāļĨāļ§āļāļ”āļ›16āļĄ Save

Listing āļ— 10.2 āđ‚āļ›āļĢāđāļāļĢāļĄ Book.java

package model;


public class Book {
  private String isbn;
  private String author;
  private String title;
  private double price;


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
70


    public String getIsbn() {
      return isbn;
    }

    public void setIsbn(String isbn) {
      this.isbn = isbn;
    }

    public String getAuthor() {
      return author;
    }

    public void setAuthor(String author) {
      this.author = author;
    }

    public String getTitle() {
      return title;
    }

    public void setTitle(String title) {
      this.title = title;
    }

    public double getPrice() {
      return price;
    }

    public void setPrice(double price) {
      this.price = price;
    }

}

10.3      āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1Cart.java

       āđ‚āļ›āļĢāđāļāļĢāļĄ Cart.java āđ€āļ›āļ™āļ„āļĨāļēāļŠāļ—āļ—.āļēāļŦāļ™āļēāļ—āļ„āļĨāļēāļĒāļāļš shopping cart āđ€āļžāļ­āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” Book āļ•āļēāļĄ
āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļ āđ‚āļ”āļĒāļ­āļēāļ‡āļ­0āļ‡āļˆāļēāļāļŦāļĄāļēāļĒāđ€āļĨāļ‚ isbn āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāļ„āļ™āļĢāļēāļĒāļŠāļ­āļŦāļ™āļ‡āļŠāļ­āļˆāļēāļ table āļ—āļŠāļ­
books āļŦāļĄāļēāļĒāđ€āļĨāļ‚ isbn āļ—āļ­āļēāļ‡āļ­0āļ‡ āđāļĨāļ§āļˆāļ°āđāļ›āļĨāļ‡āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” books āļ/āļ­āļ™āļˆāļ°āđƒāļŠ/āļĨāļ‡āđƒāļ™ cart āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ
source code āļ”āļ‡ Listing āļ— 10.3 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

     1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class..
     2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ Cart.java āđāļĨāļ° Package āđ€āļ›āļ™ model āđāļĨāļ§āļāļ” Next
     3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Cart.java āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.3
     4.   āļāļ”āļ›16āļĄ Save



āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
71

Listing āļ— 10.3 āđ‚āļ›āļĢāđāļāļĢāļĄ Cart.java

package model;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.LinkedList;
import java.util.List;


public class Cart {
  List <Book> books;
  Connection conn;

    public void addItem(String isbn) {
      try {
         Statement stmt = conn.createStatement();
         String sql = "SELECT * from books where isbn='" + isbn + "'";
         ResultSet rs = stmt.executeQuery(sql);
         while (rs.next()) {
            Book bk = new Book();
            bk.setIsbn(isbn);
            bk.setAuthor(rs.getString("author"));
            bk.setTitle(rs.getString("title"));
            bk.setPrice(rs.getFloat("price"));
            books.add(bk);
         }
      }catch (SQLException ex) {
          ex.printStackTrace();
      }
    }

    public List<Book> getBooks() {
      return books;
    }

    public Cart(Connection conn) {
      this.conn = conn;
      books = new LinkedList<Book>();
    }

    public void removeItem(String isbn) {
       books.remove(isbn);
    }

}

10.4    āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java

        āđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļ—.āļēāļŦāļ™āļēāļ—āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļŠāļ­ isbn
āļ‹,āļ‡āļŠ/āļ‡āļĄāļēāļˆāļēāļāļŦāļ™āļē Web Form āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.java āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getParameterValues āļ”āļ‡āļ™
āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
72


                  String[] isbn = request.getParameterValues("isbn");

         āļˆāļēāļāļ™āļ™āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļ session āđ€āļžāļ­āđ€āļĢāļĒāļ attribute āļ—āļŠāļ­ cart āļ­āļ­āļāļĄāļēāđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
                  HttpSession session = request.getSession(true);
                  Cart cart = (Cart) session.getAttribute("cart");

         āļāļĢāļ“āļ—āđ„āļĄ/āļžāļš attribute āļ—āļŠāļ­ cart āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļāļš attribute āļ™āļ‚,āļ™āđƒāļŦāļĄ/āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
               if (cart == null) {
                   ServletContext ctx = getServletContext();
                   Connection conn = (Connection) ctx.getAttribute("connection");
                   cart = new Cart(conn);
                   session.setAttribute("cart", cart);
               }

      āđ€āļĄāļ­āđ„āļ”āļ„/āļē attribute āļ—āļŠāļ­ cart āļĄāļēāđāļĨāļ§ āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđ€āļāļšāļĢāļēāļĒāļāļēāļĢāļŠāļ­ isbn āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļāļĨāļ‡āđƒāļ™
āļ­āļ­āļ›āđ€āļˆāļ„āļ‚āļ­āļ‡ cart āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
                for (int i = 0; i < isbn.length; i++) {
                  cart.addItem(isbn[i]);
               }

         āđ€āļĄāļ­āļŠ0āļ™āļŠ1āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđ„āļ›āđ€āļĢāļĒāļ url āļ—āļŠāļ­ view.cart āļ•/āļ­āđ„āļ› āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
               RequestDispatcher pg = request.getRequestDispatcher("viewCart.jsp");
               pg.forward(request, response)

      āļŠ.āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” processRequest āļ”āļ‡ Listing āļ—            10.4 āđāļĨāļ°āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™
āļ”āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet..
    2.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ ProcessSelection.java āđāļĨāļ° Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” URL Pattern(s) āđ€āļ›āļ™ /ProcessSelection āļ”āļ‡āļĢ#āļ› āđāļĨāļ§āļāļ” Finish
    4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ ProcessSelection.java āļ”āļ‡ Listing āļ— 10.4 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē
         āļŠāļ‡ Save

Listing āļ— 10.4 āđ€āļĄāļ˜āļ­āļ” processRequest() āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java

   protected void processRequest(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
      response.setContentType("text/html;charset=UTF-8");
      PrintWriter out = response.getWriter();


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
73

        String[] isbn = request.getParameterValues("isbn");

        HttpSession session = request.getSession(true);
        Cart cart = (Cart) session.getAttribute("cart");
        if (cart == null) {
            ServletContext ctx = getServletContext();
            Connection conn = (Connection) ctx.getAttribute("connection");
            cart = new Cart(conn);
            session.setAttribute("cart", cart);
        }
        for (int i = 0; i < isbn.length; i++) {
            cart.addItem(isbn[i]);
        }
        cart = (Cart) session.getAttribute("cart");
        RequestDispatcher pg = request.getRequestDispatcher("viewCart.jsp");
        pg.forward(request, response);

        out.close();
   }

10.5        āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java

      āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ
āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢ
āđāļāđ„āļ‚āđ„āļŸāļĨ5 context.xml āđāļĨāļ° web.xml āļ”āļ‡āđāļšāļšāļāļāļŦāļ”āļ”āļ‡āļāļĨ/āļēāļ§

10.6        āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļ āđāļĨāļ°āđ€āļāļšāđƒāļ™
shopping cart āļ­āļ­āļāļĄāļēāđāļŠāļ”āļ‡ āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđƒāļŠ Expression Language āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāđƒāļ™ session āļ”āļ‡ Listing
āļ— 10.5 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

       1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > JSP
       2.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ viewCart āđāļĨāļ§āļāļ” Finish
       3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 viewCart.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.5
       4.   āļāļ”āļ›16āļĄ Save

Listing āļ— 10.5 āđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                              Thanachart Numnonda / Thanisa Kruawaisayawan
74

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Cart</title>
   </head>
   <body>
   <h1>Selected Books in Cart</h1>
   <c:forEach var="book" items="${sessionScope.cart.books}">
   ${book.title} <br>
   </c:forEach>

  </body>
</html>


10.7     āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

         āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ BookOnline
    2.   āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ BookOnline
    3.   āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/BookOnline/selectBooks.jsp āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢ
         āļŦāļ™āļ‡āļŠāļ­ āđāļĨāļ§āļāļ”āļ›16āļĄ Select
    4.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļ url āļ—āļŠāļ­ http://localhost:8080/BookOnline/processSelection āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢ
         āđƒāļ™ Cart āļ”āļ‡āļĢ#āļ›āļ— 10.2
    5.   āļ—āļ”āļĨāļ­āļ‡āļāļĨāļšāđ„āļ›āđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āđ€āļž0āļĄāđ€āļ•0āļĄ āļŦāļĢāļ­āđ€āļĢāļĒāļ url āļ—āļŠāļ­
         http://localhost:8080/BookOnline/viewCart.jsp āđ‚āļ”āļĒāļ•āļĢāļ‡āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5




                                     āļĢāļ›āļ— 10.2 āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™ Cart

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
75


             Exercise 11 āļāļēāļĢāļŠāļĢāļēāļ‡ Custom Tags āļŠ%āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄ JSP

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™

       āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āļŠāļĢāļēāļ‡ custom tag āđ‚āļ”āļĒāļˆāļ°āđ€āļĢ0āļĄāđāļŠāļ”āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
āļ•āļ‡āđāļ•/āļāļēāļĢāđ€āļ‚āļĒāļ™ JSP āđ‚āļ”āļĒāđ„āļĄ/āđƒāļŠ custom tags āđāļĨāļ§āļŠāļĢāļēāļ‡ tag āđ‚āļ”āļĒāđƒāļŠ Tag Handler āđāļĨāļ°āļ‚āļ™āļ•āļ­āļ™āļŠ1āļ”āļ—āļēāļĒāļˆāļ°āđ€āļ›āļ™āļāļēāļĢ
āļŠāļĢāļēāļ‡ tag āđ‚āļ”āļĒāđƒāļŠ Tag File āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡
āđ‚āļ”āļĒāļ— xxxx āļ„āļ­āļŠāļ­āļ—āļŠ/āļ‡āļĄāļēāļ—āļēāļ‡āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļŠāļ­ name

11.1     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ‚āļ”āļĒāđƒāļŠ scriptlet āđ€āļĢāļĒāļāļ„.āļēāļŠāļ‡āļ āļēāļĐāļēāļˆāļēāļ§āļē āđ‚āļ”āļĒāļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđƒāļ™
āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ request āļ—āļŠāļ­ name āđāļĨāļ§āļˆāļ°āļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡ āđ‚āļ”āļĒ
āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ sourcecode āļ”āļ‡ Listing āļ— 11.1 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web
         Application āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Project Name: āđ€āļ›āļ™ JSPDemo āđāļĨāļ§āđ€āļĨāļ­āļ Project Location: āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°
         āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ§āļāļ” Finish
    4.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    5.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
    6.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ hello āđāļĨāļ§āļāļ” Finish
    7.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 hello.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.1
    8.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ JSPDemo
    9.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 hello.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāđƒāļŦāļŠ/āļ‡āļœ/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļēāļ‡ URL
         āđ€āļŠ/āļ™ http://localhost:8080/JSPDemo/hello.jsp?name=Thanisa āđ€āļĢāļēāļˆāļ°āđ„āļ”āļœāļĨāļāļēāļĢāļĢāļ™āļ”āļ‡āļĢ#āļ›āļ— 11.1




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
76




                                   āļĢāļ›āļ— 11.1 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

Listing āļ— 11.1 āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>


<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Demo</title>
  </head>
  <body>

      <h1>JSP Demo</h1>

      <% String name = request.getParameter("name"); %>
      <% for (int i = 0; i < 10; i++) { %>
      Hello <%= name %> <br>
      <% } %>

  </body>
</html>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
77

11.2     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp

      āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āļ—.āļēāļ‡āļēāļ™āđāļšāļšāđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđāļ•/āļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđ€āļ‚āļĒāļ™āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ custom tag āļ—āļŠāļ­ nameTag āļāļēāļĢāļŠāļĢāļēāļ‡ custom Tag āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļ
āļĢāļĄāļŦāļĨāļēāļĒāđ† āļŠ/āļ§āļ™āļ”āļ‡āļ™

11.2.1    āļŠāļĢāļēāļ‡ Tag Library Descriptor

     āđ„āļŸāļĨ5āļ™āļˆāļ°āđƒāļŠāđ€āļāļš āļĢāļēāļĒāļŠāļ­ Tag āļ•/āļēāļ‡āđ† āļ—āļĄāļ­āļĒ#/āđ€āļžāļ­āļŠāļēāļĄāļēāļĢāļ–āļ™.āļē tag āļ•/āļēāļ‡āđ† āļĄāļēāđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡
<%@taglib ...%> āļāļēāļĢāļŠāļĢāļēāļ‡ Tag Library Descriptor āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag Library Descriptor āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” TLD Name: āđ€āļ›āļ™ MyTags āđāļĨāļ°āļ„/āļē Folder āđ€āļ›āļ™ WEB-INFtlds āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ† āđƒāļŦāđ€āļ›āļ™āļ•āļēāļĄāļ—āļ•āļ‡
         āđ„āļ§āļ”āļ‡āļĢ#āļ›āļ— 11.2 āđāļĨāļ§āļāļ” Finish




                                   āļĢāļ›āļ— 11.2 āļāļēāļĢāļ#āļēāļŦāļ™āļ” Tag Library Descriptor

    4.   āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ—āļŠāļ­ MyTags.tld āļ—āļ­āļĒ#/āđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢ5 Web PagesWEB-INFtlds




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
78

11.2.2    āļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 Tag Handler

        āđ„āļŸāļĨ5 Tag Handler āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļēāļ—āļžāļ’āļ™āļēāļ‚,āļ™āđ€āļžāļ­āļĢāļ°āļš1āļ§/āļē āđ€āļĄāļ­āđ€āļĢāļĒāļāđƒāļŠ tag āđāļĨāļ§āļˆāļ°āļ•āļ­āļ‡āļ—.āļēāļ„.āļēāļŠāļ‡
āļ­āļĒ/āļēāļ‡āđ„āļĢ āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āļŠāļ­ Tag āđ€āļ›āļ™ NameTag āđāļĨāļ°āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļēāđ€āļ›āļ™ NameTagHandler āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°
āļ—.āļēāļāļēāļĢāļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5 name āđāļĨāļ°āļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡ āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 Tag Handler āļˆāļ°āļĄ
āļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag Handler āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ NameTagHandler āļ„/āļē Package āđ€āļ›āļ™ tags āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ† āđƒāļŦāđ€āļ›āļ™āļ•āļēāļĄāļ—āļ•āļ‡āđ„āļ§
         āļ”āļ‡āļĢ#āļ›āļ— 11.3 āđāļĨāļ§āļāļ” Next




                                   āļĢāļ›āļ— 11.3 āļāļēāļĢāļ#āļēāļŦāļ™āļ”āļ„āļē Tag Handler

    4.   āļāļ”āļ›16āļĄ Browse āđ€āļĨāļ­āļ TLD File: āđ€āļ›āļ™ MyTags.tld
    5.   āļāļ”āļ›16āļĄ New āđ€āļžāļ­āđ€āļž0āļĄ Attribute
    6.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add New Attribute āļ.āļēāļŦāļ™āļ” Attribute Name: āđ€āļ›āļ™ name āļ„/āļē Attribute Type āđ€āļ›āļ™
         java.lang.String āđāļĨāļ°āđ€āļĨāļ­āļ required Attribute āđāļĨāļ§āļāļ” Next
    7.   āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āļ”āļ‡āļĢ#āļ›āļ— 11.4 āđāļĨāļ§āļāļ” Finish
    8.   āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5 NameTagHandler.java āđƒāļŦāđ€āļ‚āļĒāļ™ source code āļ”āļ‡ Listing āļ— 11.2




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
79




                           āļĢāļ›āļ— 11.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ‚āļ­āļĄāļĨ TLD āļ‚āļ­āļ‡āđ„āļŸāļĨ! NameTagHandler

Listing āļ— 11.2 āđ‚āļ›āļĢāđāļāļĢāļĄ NameTagHandler.java

package tags;

import javax.servlet.jsp.tagext.*;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;


public class NameTagHandler extends SimpleTagSupport {

   /**
    * Initialization of name property.
    */
   private java.lang.String name;

   /**Called by the container to invoke this tag.
    * The implementation of this method is provided by the tag library developer,
    * and handles all tag processing, body iteration, etc.
    */
   public void doTag() throws JspException {

      JspWriter out=getJspContext().getOut();

      try {

         JspFragment f=getJspBody();
         if (f != null) f.invoke(out);

         for (int i = 0; i < 10; i++) {
            out.println("Hello " + name + "<br>");

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
80

             }

         } catch (java.io.IOException ex) {
            throw new JspException(ex.getMessage());
         }

    }

    public void setName(java.lang.String name) {
      this.name = name;
    }
}

11.2.3           āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp

      āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Tag āļ—āļŠāļ­ NameTag āđ‚āļ”āļĒāļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 3 āļāļēāļĢ
āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
             āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
        3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloTag āđāļĨāļ§āļāļ” Finish
        4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloTag.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.3
        5.   āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

Listing āļ— 11.3 āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/tlds/MyTags" prefix="myTags" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>JSP Demo</title>
   </head>
   <body>
   <h1>JSP Demo</h1>

    <myTags:NameTagHandler name="Thanisa" />


  </body>
</html>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
81

11.3     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āļ—.āļēāļ‡āļēāļ™āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļœ/āļēāļ™āļĄāļēāđāļ•/āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļ
āđƒāļŠ JSP Standard Tag Library āđƒāļ™āļāļēāļĢāļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxx āļŠ0āļšāļ„āļĢāļ‡ āđāļ—āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™āļ„.āļēāļŠāļ‡ scriptlet āđ‚āļ”āļĒ
āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 11.4 āđāļĨāļ°āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloJSTL āđāļĨāļ§āļāļ” Finish
    4.   āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” JSP Demo āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” Libraries āļ„āļĨ0;āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add Library
    5.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Library āđ€āļĨāļ­āļāđ„āļŸāļĨ5 JSTL 1.1 āđāļĨāļ§āļāļ”āļ›16āļĄ Add Library
    6.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloJSTL.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.4
    7.   āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄ āļ”āļĒāļ.āļēāļŦāļ™āļ” URL āđ€āļ›āļ™ http://localhost:8080/JSPDemo/helloJSTL.jsp?
         name=Thanisa āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

Listing āļ— 11.4 āđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>JSP Demo</title>
  </head>
  <body>
  <h1>JSP Demo</h1>
  <c:forEach var="i" begin="1" end="10">
   Hello ${param.name} <br>
  </c:forEach>

  </body>
</html>


11.4     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp

         JSP 2.0 āļ­āļ™1āļāļēāļ•āđƒāļŦāđ€āļĢāļēāļŠāļĢāļēāļ‡ custom tag āđ‚āļ”āļĒāļāļēāļĢāđ€āļ‚āļĒāļ™āđ„āļŸāļĨ5 html āļŦāļĢāļ­ JSP āđāļ—āļ™āļ—āļˆāļ°āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ
āļ āļēāļĐāļēāļˆāļēāļ§āļē āļ‹,āļ‡āļ—.āļēāđƒāļŦāļ‡/āļēāļĒāļ•/āļ­āļāļēāļĢāļžāļ’āļ™āļē āđƒāļ™āļ—āļ™āđ€āļĢāļēāļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļ‹,āļ‡āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ
custom tag āļ—āļŠāļ­ nameTagFile āļ—āđ€āļ›āļ™ tag file āļ‹,āļ‡āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
82

11.4.1    āļŠāļĢāļēāļ‡ Tag File

         āđ„āļŸāļĨ5āļ™āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ™āđ€āļ›āļ™āļ•āļ§āļˆāļ”āļāļēāļĢ Tag āđ‚āļ”āļĒāđ€āļ‚āļĒāļ™āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag File āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Tag File Name: āđ€āļ›āļ™ NameTagFile
    4.   āđ€āļĨāļ­āļ Add Tag File to Tag Library Descriptor āđāļĨāļ§āđ€āļĨāļ­āļāđ„āļŸāļĨ5 MyTags.tld āļ”āļ‡āļĢ#āļ›āļ— 11.5 āđāļĨāļ§āļāļ”
         Finish




                                   āļĢāļ›āļ— 11.5 āļāļēāļĢāļ#āļēāļŦāļ™āļ”āļ„āļē Tag File

    5.   āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ—āļŠāļ­ NameTagFile.tag āļ—āļ­āļĒ#/āđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢ5 Web Pages.WEB-INF.tags
    6.   āđ€āļ‚āļĒāļ™ source code āļ”āļ‡ Listing āļ— 11.5

Listing āļ— 11.5 āđ‚āļ›āļĢāđāļāļĢāļĄ NameTagFile.tag

<%@tag description="Tag Name" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

  <c:forEach var="i" begin="1" end="10">
    Hello ${param.name} <br>
  </c:forEach>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
83

11.4.2    āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp

      āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Tag āļ—āļŠāļ­ NameTagFile āđ‚āļ”āļĒāļˆāļ°āļĄ source code āļ”āļ‡ Listing
āļ— āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloTagFile āđāļĨāļ§āļāļ” Finish
    4.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloTagFile.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.6
    5.   āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāļ.āļēāļŦāļ™āļ” URL āđ€āļ›āļ™ http://localhost:8080/JSPDemo/helloTagFile.jsp?
         name=Thanisa āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp

Listing āļ— 11.6 āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="/WEB-INF/tlds/MyTags" prefix="myTags" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>JSP Demo</title>
   </head>
   <body>
   <h1>JSP Demo</h1>

   <myTags:NameTagFile />

  </body>
</html>




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
84


          Exercise 12 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ Strut Framework

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

       āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠ Struts Framework āđ‚āļ”āļĒāļāļēāļĢ
āļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āđƒāļŦāļŠ/āļ§āļ™āļ‚āļ­āļ‡ Web User Interface āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļš
āļ‚āļ­āļĄ#āļĨ (Validate Data) āļ—āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ§0āļ˜āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āđ‚āļ”āļĒāđƒāļŠ Struts Framework

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
   1. āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ StrutDBApp
   2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm
   3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ addBook.jsp
   4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java
   5. āđāļāđ„āļ‚āđ„āļŸāļĨ5 ApplicationResource.properties
   6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html
   7. āđāļāđ„āļ‚āđ„āļŸāļĨ5 Struts-Config.xml

12.1     āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project

     āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ WebBase Database āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄ
āļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web
         Application āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ StrutDBApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°
         āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āļˆāļēāļāļ™āļ™āļāļ” Next
    4.   āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Struts āđāļĨāļ°āđ€āļĨāļ­āļ Add Strut TLDs āļˆāļēāļāļ™āļ™āļāļ” Finish

12.2     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm.java

         Struts Framework āļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļˆāļ°āļ•āļ­āļ‡āļžāļ’āļ™āļēāļ­āļĒ#/āļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ FormBean āđāļĨāļ° Action
Class āđ‚āļ”āļĒāļŠ/āļ§āļ™ FormBean āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļœ#āđƒāļŠāļˆāļ°āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđƒāļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ āļŠ/āļ§āļ™
Action Class āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļ›%āļ­āļ™āļĄāļēāđ€āļžāļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ•/āļ­āđ„āļ›


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                       Thanachart Numnonda / Thanisa Kruawaisayawan
85

        āđ‚āļ›āļĢāđāļāļĢāļĄ FormBean āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļĄāļ„/āļē attribute āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāļŠāļ­āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļˆāļ°āļ›%āļ­āļ™
āđāļĨāļ°āļˆāļ°āļĄāđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš attribute āļ”āļ‡āļāļĨ/āļēāļ§ āļ™āļ­āļāļˆāļēāļāļ™āļ­āļēāļˆāļĄāđ€āļĄāļ˜āļ­āļ”āđƒāļ™āļāļēāļĢ validate
āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āđƒāļŦāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāđ€āļ‡āļ­āļ™āđ„āļ‚āļ‚āļ­āļ‡āļ‚āļ­āļĄ#āļĨāļ—āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āļ.āļēāļŦāļ™āļ”āđ„āļ§

      āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ„āļŸāļĨ5āļŠāļ­ addBook.jsp āđ€āļ›āļ™āđ€āļ§āļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢ5āļĄāļŠ.āļēāļŦāļĢāļšāļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāļŦāļ™āļ‡āļŠāļ­āđƒāļŦāļĄ/āđ€āļ‚āļē
āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ#āļĨ books āļ‹,āļ‡āļĄāļĨāļāļĐāļ“āļ°āļ”āļ‡āļĢ#āļ›āļ— 12.1




                                   āļĢāļ›āļ— 12.1 āđ€āļ§āļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢ!āļĄāļŠāļēāļŦāļĢāļšāļ›+āļ­āļ™āļ‚āļ­āļĄāļĨ

         āđāļĨāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļœ#āđƒāļŠāļ•āļ­āļ‡āļ›%āļ­āļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļĄāļŠāļ­āđāļĨāļ°āđ€āļ‡āļ­āļ™āđ„āļ‚āļ•/āļēāļ‡āđ†āļ”āļ‡āļ™

             ●    isbn āđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļĢāļ°āļŦāļ§/āļēāļ‡ 3-10 āļ•āļ§
             ●    titleāđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļ­āļĒ/āļēāļ‡āļ™āļ­āļĒ 3 āļ•āļ§
             ●    author āđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļ­āļĒ/āļēāļ‡āļ™āļ­āļĒ 5 āļ•āļ§
             ●    price āđ€āļ›āļ™āļŠāļ™0āļ” float āļ—āļĄāļ„/āļēāđ€āļ›āļ™āļĄāļēāļāļāļ§/āļē 0.0

         āđāļšāļšāļāļāļŦāļ”āļ™āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ FormBean āļĄāļŠāļ­āļ§/āļē BookActionForm.java āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļē
āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Struts āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Struts ActionForm Bean āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ BookActionForm āđāļĨāļ° Package āđ€āļ›āļ™ com.myapp.struts āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ#āļ›āļ—
         12.2

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
86




                                   āļĢāļ›āļ— 12.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Struts ActionForm Bean

    4.   āļāļ” Finish āđāļĨāļ§āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļ™
    5.   āđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookActionForm āļ”āļ‡āļ™
                      String isbn;
                      String title;
                      String author;
                      float price;
    6. āļ—.āļēāļāļēāļĢ encapsulate attribute (āļ.āļēāļŦāļ™āļ” attribute āđƒāļŦāđ€āļ›āļ™ private āđāļĨāļ° āļŠāļĢāļēāļ‡āđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter)
         āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ Refactor > Encapsulate Field..
    7.   āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ Fields āļ•/āļēāļ‡āđ†āđƒāļŦāđ€āļĨāļ­āļāļ”āļ‡āļĢ#āļ›āļ— 12.3




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
87




                                   āļĢāļ›āļ— 12.3 āļŦāļ™āļēāđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields

    8.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields āđƒāļŦāļ„āļ‡āļ„/āļēāļ—āđ€āļĨāļ­āļāđ„āļ§āļ—1āļ Field āļ•āļēāļĄāļ—āđ‚āļ›āļĢāđāļāļĢāļĄāļ.āļēāļŦāļ™āļ”āđ„āļ§āđāļĨāļ§āļāļ”āļ›16āļĄ
         Refactor
    9.  āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļž0āļĄ source code āđ‚āļ”āļĒāļ.āļēāļŦāļ™āļ”āđƒāļŦ field āļ•/āļēāļ‡āđ†āļĄ access modifier āđ€āļ›āļ™ private āđāļĨāļ§āđ€āļž0āļĄ
        āđ€āļĄāļ˜āļ­āļ” setter āđāļĨāļ° getter
    10. āđāļāđ„āļ‚āđ‚āļ„āļ”āđƒāļ™āđ€āļĄāļ˜āļ­āļ” validate āļ”āļ‡āļ™

             public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
              ActionErrors errors = new ActionErrors();
              if (getIsbn() == null || getIsbn().length() < 3
                     || getIsbn().length() > 10) {
                  errors.add("isbn", new ActionMessage("error.isbn.required"));
                }
              if (getTitle() == null || getTitle().length() < 3) {
                  errors.add("title", new ActionMessage("error.title.required"));
              }
              if (getAuthor() == null || getAuthor().length() < 5) {
                  errors.add("author", new ActionMessage("error.author.required"));
              }
              if (getPrice() < 0) {
                  errors.add("price", new ActionMessage("error.price.required"));
              }
              return errors;
            }

    11. āļāļ”āļ›16āļĄ Save āļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡ Listing āļ— 12.1



āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
88

Listing āļ— 12.1 āđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm.java

package com.myapp.struts;

import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;


public class BookActionForm extends org.apache.struts.action.ActionForm {

   private String isbn;
   private String title;
   private String author;
   private float price;

   private String name;

   public String getName() {
     return name;
   }

   public void setName(String string) {
     name = string;
   }

   public BookActionForm() {
     super();
     // TODO Auto-generated constructor stub
   }

   public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) {
     ActionErrors errors = new ActionErrors();
     if (getIsbn() == null || getIsbn().length() < 3 || getIsbn().length() > 10) {
         errors.add("isbn", new ActionMessage("error.isbn.required"));
       }
     if (getTitle() == null || getTitle().length() < 3) {
         errors.add("title", new ActionMessage("error.title.required"));
     }
     if (getAuthor() == null || getAuthor().length() < 5) {
         errors.add("author", new ActionMessage("error.author.required"));
     }
     if (getPrice() < 0) {
         errors.add("price", new ActionMessage("error.price.required"));
     }
     return errors;
   }

   public String getIsbn() {
     return isbn;
   }

   public void setIsbn(String isbn) {
     this.isbn = isbn;

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
89

    }

    public String getTitle() {
      return title;
    }

    public void setTitle(String title) {
      this.title = title;
    }

    public String getAuthor() {
      return author;
    }

    public void setAuthor(String author) {
      this.author = author;
    }

    public float getPrice() {
      return price;
    }

    public void setPrice(float price) {
      this.price = price;
    }
}

12.3         āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđƒāļŠ Tags āļ‚āļ­āļ‡ Strut Framework āđ€āļžāļ­āđāļŠāļ”āļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ
āļŠ.āļēāļŦāļĢāļšāļāļēāļĢāļāļĢāļ­āļāļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

        1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other...
        2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ
             āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next
        3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ AddBook āđāļĨāļ§āļāļ” Finish
        4.   āđ€āļ‚āļĒāļ™ Source code āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļ•āļēāļĄ Listing āļ— 12.2 āđāļĨāļ§āļ›16āļĄ Save

Listing āļ— 12.2 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp

<%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %>

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
  "http://www.w3.org/TR/html4/loose.dtd">

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
90

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title><bean:message key="title.message"/> </title>
  </head>
  <body>
  <h1><bean:message key="title.message"/></h1>
  <html:errors/>
  <html:form action="AddBook">
    ISBN : <html:text property="isbn" size="15"/> <BR>
    Title : <html:text property="title" size="50"/> <BR>

       Author : <html:text property="author" size="50"/> <BR>
       Price : <html:text property="price" size="10"/> <BR>

     <html:submit value="Add" />
   </html:form>

  </body>
</html>



12.4     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java

        āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ ActionForm āļ‚āļ­āļ‡ Struts Framework āđ€āļžāļ­āļ­/āļēāļ™āļ‚āļ­āļĄ#āļĨ
āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāļˆāļēāļāļŦāļ™āļē AddBook.jsp āđāļĨāļ§āđ€āļ‚āļĒāļ™āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ table āļ—āļŠāļ­ Books āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New => Other..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Struts āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Struts Action āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ AddBookAction āđ€āļĨāļ­āļ Package: āđ€āļ›āļ™ com.myapp.struts āđāļĨāļ°āļ.āļēāļŦāļ™āļ”
         Action Path : āđ€āļ›āļ™ /AddBook āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļ New Struts Action āļ”āļ‡āļĢ#āļ›āļ— 12.4




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
91




                                     āļĢāļ›āļ— 12.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Struts Action

       4.   āđāļĨāļ§āļāļ” Next āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āļ‚āļ­āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ āđƒāļŦāđ€āļĨāļ­āļ Input Resource : āđ€āļ›āļ™ /AddBook.jsp āđāļĨāļ§āļāļ”
            Finish
       5.   āđƒāļŦāđāļāđ„āļ‚ source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” execute() āļ”āļ‡āļ™
   public ActionForward execute(ActionMapping mapping, ActionForm form,
        HttpServletRequest request, HttpServletResponse response)
        throws Exception {
     BookActionForm bkForm = (BookActionForm) form;
     String isbn = bkForm.getIsbn();
     String title = bkForm.getTitle();
     String author = bkForm.getAuthor();
     float price = bkForm.getPrice();

        try {
           ServletContext context = getServlet().getServletContext();
           Connection conn = (Connection) context.getAttribute("connection");

            Statement stmt = conn.createStatement();

            String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" + author +"',"+price +")";
            stmt.executeUpdate(sql);
            return mapping.findForward(SUCCESS);

        }catch (SQLException ex) {
           System.out.println("Error " + ex);
        }
        return null;
   }

       6.   āļāļ”āļ›16āļĄ Save

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
92

12.5     āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ' ApplicationResource.properties

       āđ„āļŸāļĨ5 ApplicationResource.properties āđ€āļ›āļ™āđ„āļŸāļĨ5āļ—āđ‚āļ›āļĢāđāļāļĢāļĄ Struts āļˆāļ°āļ­/āļēāļ™āļ„/āļēāļ„āļ‡āļ—āļ•/āļēāļ‡āđ†āļ—āđ€āļĢāļēāļ.āļēāļŦāļ™āļ”āļ‚,āļ™
āļ‹,āļ‡āđƒāļ™āļ—āļ™āđ„āļ”āļ.āļēāļŦāļ™āļ”āļ‚āļ­āļ„āļ§āļēāļĄāļ—āđ€āļāļĒāļ§āļāļš error message āđāļĨāļ° title āđ„āļ§ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› StrutDBWeb > Source Packages > com.myapp.struts
    2.   āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāđ€āļĨāļ­āļāđ„āļŸāļĨ5 ApplicationResource.properties
    3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđƒāļŦāđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™
                  error.isbn.required=Please enter correct ISBN
                  error.title.required=Please enter correct Title
                  error.author.required=Please enter correct author
                  error.price.required=Price must greater than zero
                  title.message=Add a new Book

    4.   āļāļ”āļ›16āļĄ Save

12.6     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html

      āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ
āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢ
āđāļāđ„āļ‚āđ„āļŸāļĨ5 context.xml āđāļĨāļ° web.xml āļ”āļ‡āđāļšāļšāļāļāļŦāļ”āļ”āļ‡āļāļĨ/āļēāļ§

       āđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĢāļĒāļšāļĢāļ­āļĒ
āđāļĨāļ§ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

12.7     āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ' Struts-config.xml

       āđ„āļŸāļĨ5 Struts-config.xml āđ€āļ›āļ™āđ„āļŸāļĨ5āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„1āļĄāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Struts āļ‹,āļ‡āđƒāļ™āļ—āļ™āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢ
āļ.āļēāļŦāļ™āļ”āļĨ.āļēāļ”āļšāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āļš (Navigation Rule) āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› StrutDBApp > Configuration Files
    2.   āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāđ€āļĨāļ­āļāđ„āļŸāļĨ5 Struts-config.xml
    3.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļ„āļĨ0;āļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Struts > Add Forward
    4.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Forward āļ.āļēāļŦāļ™āļ” Forward Name: āđ€āļ›āļ™ success āļŠ/āļ§āļ™ Forward To: āđ€āļ›āļ™
         Resource File: /Thankyou.html āđāļĨāļ° Location āđ€āļ›āļ™ Action : /AddBook āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļāļ”āļ‡āļĢ#āļ›
         āļ— 12.5

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
93




                                   āļĢāļ›āļ— 12.5 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Add Forward

    5.   āļāļ”āļ›16āļĄ Add āđāļĨāļ°āļāļ”āļ›16āļĄ Save āļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđƒāļ™ struts-config.xml āđ€āļž0āļĄāļ‚,āļ™āļĄāļēāļ”āļ‡āļ™
   <action-mappings>
     <action input="/AddBook.jsp" name="BookActionForm" path="/AddBook" scope="session"
type="com.myapp.struts.AddBookAction">
        <forward name="success" path="/Thankyou.html"/>
     </action>

   </action-mappings>



12.8     āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

    1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ StrutDBApp
    2.   Run āđ‚āļ›āļĢāđāļāļĢāļĄ StrutDBApp āļ—āļ‡āļ™āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļĢāļ™ MySQL Database Server āļ/āļ­āļ™
    3.   āđ€āļĨāļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/StrutDBApp/AddBook.jsp āđƒāļŦāđ€āļĢāļē
         āļ—āļ”āļĨāļ­āļ‡āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļ”āļ‡āļĢ#āļ›āļ— 12.6




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                          Thanachart Numnonda / Thanisa Kruawaisayawan
94




                                   āļĢāļ›āļ— 12.6 āļ•āļ§āļ­āļĒ-āļēāļ‡āļāļēāļĢāļ›+āļ­āļ™āļ‚āļ­āļĄāļĨāđ€āļ‚āļē Table āļŠāļ­ Books

    4.   āđ€āļĄāļ­āļāļ”āļ›16āļĄ Add āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ Database
    5.   āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļ‚āļ­āļĄ#āļĨāļ—āļ›%āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāđ„āļ›āļ—āļŦāļ™āļēāļ•/āļēāļ‡ Runtime āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļ
         āļ„.āļēāļŠāļ‡ View Data.. āļˆāļēāļ Table āļ—āļŠāļ­ Books




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                                Thanachart Numnonda / Thanisa Kruawaisayawan
95


            Exercise 13 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ JSF Framework

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ

      āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļšāļ—āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āļ—āļ‡āļ™āļˆāļ°
āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āļ›āļĢāļšāļ›āļĢ1āļ‡āļŠ/āļ§āļ™ Web User Interface āđ‚āļ”āļĒāļˆāļ°āļ—.āļēāđƒāļŦāļœ#āđƒāļŠ
āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° Validate Data āļ—āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ§0āļ˜āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āđ‚āļ”āļĒāđƒāļŠ Java Server Faces
(JSF) Framework

āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ
   1. āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ JSFDBApp
   2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean
   3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Validator
   4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp
   5. āļ.āļēāļŦāļ™āļ” Page Navigation
   6. āļ.āļēāļŦāļ™āļ” Error Messages
   7. āļ.āļēāļŦāļ™āļ” JNDI Name
   8. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html
   9. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java



13.1     āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project

       āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project
āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web
         Application āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JSFDBApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°
         āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āļˆāļēāļāļ™āļ™āļāļ” Next
    4.   āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Java Server Faces āļˆāļēāļāļ™āļ™āļāļ” Finish




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                       Thanachart Numnonda / Thanisa Kruawaisayawan
96

13.2     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean

         JSF Framework āļˆāļ°āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ Java Bean āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļŠ.āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļŦāļĢāļ­
Servlet āļ āļēāļĒāđƒāļ™ Framework āđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļĄāļ„/āļē attribute āļŠāļ­āļ”āļ„āļĨāļ­āļ‡
āļāļšāļŠāļ­āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļˆāļ°āļ›%āļ­āļ™ āđāļĨāļ°āļˆāļ°āļĄāđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš attribute āļ”āļ‡āļāļĨ/āļēāļ§ āļ‹,āļ‡āđƒāļ™āđāļšāļš
āļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļœ#āđƒāļŠāļ•āļ­āļ‡āļ›%āļ­āļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļĄāļŠāļ­āļ•/āļēāļ‡āđ† āļ”āļ‡āļ™
         ● isbn āđ€āļ›āļ™āļŠāļ™0āļ” String

         ● title āđ€āļ›āļ™āļŠāļ™0āļ” String

         ● author āđ€āļ›āļ™āļŠāļ™0āļ” String

         ● price āđ€āļ›āļ™āļŠāļ™0āļ” float āļ—āļĄāļ„/āļēāđ€āļ›āļ™āļĄāļēāļāļāļ§/āļē 0.0


         āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ JavaServer Faces āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File
         Types āļ•/āļēāļ‡āđ†āļ āļēāļĒāđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSF Managed Bean āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ BookBean āđāļĨāļ° Package āđ€āļ›āļ™ bean āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ†āđƒāļŦāļ„āļĨāļ•āļēāļĄāļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āļ”āļ‡
         āļĢ#āļ›āļ— 13.1 āđāļĨāļ§āļāļ” Finish




                                   āļĢāļ›āļ— 13.1 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē JSF Managed Bean
āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
97


    4.   āđ€āļ‚āļĒāļ™ source code āđ‚āļ”āļĒāđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookBean āļ”āļ‡āļ™
               String isbn;
               String title;
               String author;
               float price;
    5. āļ—.āļēāļāļēāļĢ encapsulate attribute āđ‚āļ”āļĒāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ
       Refactor > Encapsulate Field..
    6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields āđƒāļŦāļ„āļ‡āļ„/āļēāļ—āđ€āļĨāļ­āļāđ„āļ§āļ—1āļ Field āļ•āļēāļĄāļ—āđ‚āļ›āļĢāđāļāļĢāļĄāļ.āļēāļŦāļ™āļ”āđ„āļ§āđāļĨāļ§āđāļĨāļ§āļāļ”āļ›16āļĄ
       Refactor
    7. āļāļ”āļ›16āļĄ Save āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĄ Source code āļ”āļ‡ Listing āļ— 13.1
    8.   āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āđ€āļŦāļ™āļ„.āļēāļŠāļ‡āļ”āļ‡āļ™
            <managed-bean>
              <managed-bean-name>BookBean</managed-bean-name>
              <managed-bean-class>bean.BookBean</managed-bean-class>
              <managed-bean-scope>request</managed-bean-scope>
            </managed-bean>




Listing āļ— 13.1 āđ‚āļ›āļĢāđāļāļĢāļĄ BookBean.java

package bean;

public class BookBean {
  private String isbn;
  private String title;
  private String author;
  private float price;

   public String getIsbn() {
     return isbn;
   }

   public void setIsbn(String isbn) {
     this.isbn = isbn;
   }

   public String getTitle() {
     return title;
   }

   public void setTitle(String title) {
     this.title = title;
   }

   public String getAuthor() {
     return author;
   }


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                        Thanachart Numnonda / Thanisa Kruawaisayawan
98


    public void setAuthor(String author) {
      this.author = author;
    }

    public float getPrice() {
      return price;
    }

    public void setPrice(float price) {
      this.price = price;
    }

}

13.3      āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ PriceValidator.java

        āđ‚āļ›āļĢāđāļāļĢāļĄ PriceValidator.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSF Validator āļ—āļžāļ’āļ™āļēāļ‚,āļ™āļĄāļēāđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–#āļ
āļ•āļ­āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄ#āļĨāļĢāļēāļ„āļēāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāļ§/āļēāļˆāļ°āļ•āļ­āļ‡āļĄāļ„/āļēāļĄāļēāļāļāļ§/āļē 0.0 āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļ•āļ­āļ‡ implements
āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠāļŠāļ­ javax.faces.validator.Validator āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāļ›āļĢāļšāļ›āļĢ'āļ‡āđ„āļŸāļĨ faces-
config.xml āđ€āļžāļ­āļĢāļ°āļš1āļŠ!āļ­āļ„āļĨāļēāļŠ PriceValidator āļ§"āļēāđ€āļ›6āļ™ Validator āđāļšāļšāļŦāļ™:!āļ‡ āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĄ
āļ”āļ‡āļ™
    1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class...
    2. āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ PriceValidator āđāļĨāļ° Package āđ€āļ›āļ™ validator āđāļĨāļ§āļāļ” Finish
    3. āđƒāļŦāđ€āļž0āļĄāļ„.āļēāļŠāļ‡ implements Validator āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļāļēāļĻāļ„āļĨāļēāļŠ āļ”āļ‡āļ™
                    public class PriceValidator implements Validator
     4.   āļāļ” Alt+Shift+F āđ€āļžāļ­āļāļēāļĢ Fix Imports āđ‚āļ”āļĒāđƒāļŦāđ€āļĨāļ­āļāļ„āļĨāļēāļŠ
          javax.faces.validator.Validator
     5.   āđƒāļŠ Hint āđ€āļžāļ­āļ—āļˆāļ° implements āđ€āļĄāļ˜āļ­āļ”āļ•/āļēāļ‡āđ†āļ‚āļ­āļ‡āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠ Validator āļ”āļ‡āļĢ#āļ›




     6.   āđƒāļŦāđāļāđ„āļ‚ source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” validate() āļ”āļ‡āļ™
    public void validate(FacesContext context, UIComponent component, Object value) throws
          ValidatorException {
       Float priceObj = (Float) value;
       boolean flag = true;
       try {
          float price = priceObj;
          if (price < 0) {


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
99

                flag = false;
            }
        } catch(ArithmeticException ex) {
            flag = false;
        }
        if (!flag) {
            FacesMessage message = new FacesMessage();
            message.setDetail("Price is not valid - The price must greater than 0.0");
            message.setSummary("Email not valid - The price must greater than 0.0");
            message.setSeverity(FacesMessage.SEVERITY_ERROR);
            throw new ValidatorException(message);
        }

   }

       7.   āļāļ”āļ›16āļĄ Save
       8.   āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files āđāļĨāļ§āđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ āļēāļĒāđƒāļ™āđāļ—āļ
            </faces-config> āļ”āļ‡āļ™

   <validator>
     <validator-id>validator.PriceValidator</validator-id>
     <validator-class>validator.PriceValidator</validator-class>
   </validator>

       9.   āļāļ”āļ›16āļĄ Save

13.4        āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp

       āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđƒāļŠ Tags āļ‚āļ­āļ‡ JSF Framework āđ€āļžāļ­āđāļŠāļ”āļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ
āđƒāļŦāļœ#āđƒāļŠāļāļĢāļ­āļāļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ addBook.html āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Database
Application āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ—āļœ/āļēāļ™ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

       1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other..
       2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ JavaServer Faces āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File
            Types āļ•/āļēāļ‡āđ†āļ āļēāļĒāđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSF JSP Page āđāļĨāļ§āļāļ” Next
       3.   āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ AddBook āđāļĨāļ§āļāļ” Finish
       4.   āļ āļēāļĒāđƒāļ™ Source code āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āļˆāļ°āļĄāļāļēāļĢāļ›āļĢāļ°āļāļēāļĻ tag libraries āļ”āļ‡āļ™āđ‚āļ”āļĒāļ­āļ•āđ‚āļ™āļĄāļ•0
            <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>
            <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>

       5.   āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđƒāļ™ tag āļ—āļŠāļ­ <title> āđāļĨāļ° <h1> āđ€āļ›āļ™ Add a new Book
       6.   āđƒāļ™āļŠ/āļ§āļ™āļ‚āļ­āļ‡āļŸāļ­āļĢ5āļĄ āđ€āļĢāļēāļˆāļ°āđƒāļŠ JSF tag āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļ āļ›16āļĄ JSF Form āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ source
            code āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ Insert JSF Form āđƒāļŦāđ€āļĨāļ­āļāļŠ/āļ­āļ‡ Empty Form āđāļĨāļ§āļāļ”

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                              Thanachart Numnonda / Thanisa Kruawaisayawan
100

         OK
    7.   āļŦāļĨāļ‡āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļ‚āļĒāļ™ code āđ‚āļ”āļĒāđƒāļŠ āļ„āļ­āļĄāđ‚āļžāđ€āļ™āļ™āļ—5 inputText āđāļĨāļ° commandButton āđ‚āļ”āļĒāļˆāļ°āđ„āļ” source
         code āļ”āļ‡āļ™

               <f:view>
                 ...
                  <h:form>
                     ISBN : <h:inputText value="#{BookBean.isbn}"
                                   required="true" id="isbn"
                                   size="15"/> <h:message for="isbn" /> <BR>
                     Title : <h:inputText value="#{BookBean.title}"
                                    required="true" id="title"
                                    size="50"/> <h:message for="title" /><BR>

                      Author : <h:inputText value="#{BookBean.author}"
                                     required="true" id="author"
                                     size="50"/> <h:message for="author" /> <BR>
                      Price : <h:inputText value="#{BookBean.price}"
                                    required="true" id="price"
                                    size="10" >
                      <f:validator validatorId="validator.PriceValidator" /></h:inputText>
                      <h:message for="price" /> <BR>

                      <h:commandButton value="Submit" action="submit" />
                  </h:form>
                 ....
               </f:view>

    8.   āļāļ”āļ›16āļĄ Save


13.5     āļāļēāļĢāļ/āļēāļŦāļ™āļ” Page Navigation

         JSF Framework āļˆāļ°āļ.āļēāļŦāļ™āļ”āļĨ.āļēāļ”āļšāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āļšāđ€āļžāļˆāļ•/āļēāļ‡āđ† (Page Navigation) āđ‚āļ”āļĒāļāļēāļĢāļ.āļēāļŦāļ™āļ”
configuration āđƒāļ™āđ„āļŸāļĨ5 faces-config.xml āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļĢāļĒāļ url āļŠāļ­
/addBook.do āđ€āļĄāļ­āļāļ”āļ›16āļĄ Submit āļ‹,āļ‡āļāļēāļĢāđāļāđ„āļ‚āđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files
    2.   āļ„āļĨ0;āļāļ‚āļ§āļēāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļĨāļ­āļāđāļ—āļ› XML āđāļĨāļ§āđ€āļĨāļ­āļ Java ServerFaces > Add Navigation Rule
    3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Navigation Rule āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļē Rule From View: āđ€āļ›āļ™ /AddBook.jsp āđāļĨāļ§āļāļ”āļ›16āļĄ
         Add
    4.    āļ„āļĨ0;āļāļ‚āļ§āļēāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđāļĨāļ§āđ€āļĨāļ­āļ Java ServerFaces > Add Navigation Case
    5.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Navigation Case āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļē From View: āđ€āļ›āļ™ /AddBook.jsp āļ„/āļē From
         Outcome: āđ€āļ›āļ™ submit āđāļĨāļ° To View: āđ€āļ›āļ™ /addBook.do āđāļĨāļ§āļāļ”āļ›16āļĄ Add
    6.   āđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđ€āļž0āļĄāļ”āļ‡āļ™

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
101


                    <navigation-rule>
                       <description>

                         </description>
                         <from-view-id>/AddBook.jsp</from-view-id>
                         <navigation-case>
                            <from-outcome>submit</from-outcome>
                            <to-view-id>/addBook.do</to-view-id>
                         </navigation-case>
                               </navigation-rule>
    7.   āđāļĨāļ°āļ–āļēāđ€āļĨāļ­āļāđāļ—āļ› PageFlow āļˆāļ°āđ€āļŦāļ™āļ„āļ§āļēāļĄāļŠāļĄāļžāļ™āļ˜5āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļĢ#āļ›āļ— 13.2




                                        āļĢāļ›āļ— 13.2 āļāļēāļĢāđāļŠāļ”āļ‡ PageFlow

13.6     āļāļēāļĢāļ/āļēāļŦāļ™āļ” Error Message

         JSF Framework āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ„āļŸāļĨ5 Message.properties āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļĄāļ­āļ‚āļ­āļĄ#āļĨāļ—āļœ#āđƒāļŠ
āļ›%āļ­āļ™āđ„āļĄ/āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāđ€āļ‡āļ­āļ™āđ„āļ‚āļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āđ„āļŸāļĨ5 Message.properties āļˆāļ°āļ­āļĒ#/āđƒāļ™āđāļžāļ„āđ€āļāļˆ javax.faces āļ‹,āļ‡āđ€āļĢāļē
āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”#āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ‚āļĒāļēāļĒāđāļ—āļ› Libraries > jsf-impl.jar > javax.faces āđƒāļ™āļāļĢāļ“āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°
āļ.āļēāļŦāļ™āļ” Error Message āđ€āļ­āļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 property āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New => File/Folder..

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                            Thanachart Numnonda / Thanisa Kruawaisayawan
102

    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Other āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ
         āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Properties File āđāļĨāļ§āļāļ” Next
    3.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Properties File āļ.āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ MyMessage āđāļĨāļ° Folder: āđ€āļ›āļ™
       src/java/properties
    4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚āđ„āļŸāļĨ5 MyMessages.properties āđ‚āļ”āļĒāđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™
           javax.faces.component.UIInput.REQUIRED=Please enter a value for this field.
    5.   āļāļ”āļ›16āļĄ Save
    6.   āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files āđāļĨāļ§āđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™
          <application>
            <message-bundle>properties.MyMessages</message-bundle>
          </application>
    7.   āļāļ”āļ›16āļĄ Save


13.7     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html, error.html āđāļĨāļ° Init.java

       āđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĢāļĒāļšāļĢāļ­āļĒ
āđāļĨāļ§ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ sourcecode āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļŠ/āļ§āļ™ error.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļĄ/āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ/
āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđ‚āļ”āļĒāļĄ sourcecode āļ”āļ‡ Listing āļ— 13.2

Listing āļ— 13.2 āđ‚āļ›āļĢāđāļāļĢāļĄ error.html

<html>
 <head>
  <title>Error!</title>
 </head>
 <body>
 <H1>Cannot Add!!</H1>
 </body>
</html>

       āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ
āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē
āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener

13.8     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java

      āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ— JSF Frameworks āđ€āļĢāļĒāļāđƒāļŠāļŦāļĨāļ‡āļˆāļēāļāļ—āļœ#āđƒāļŠāļāļ”āļ›16āļĄ
Submit āđƒāļ™āļŦāļ™āļē AddBook.jsp āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ url āđ€āļ›āļ™ /addBook.do āđāļĨāļ°āļˆāļ°āļĄ sourcecode āļ„āļĨāļēāļĒāļāļš


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                         Thanachart Numnonda / Thanisa Kruawaisayawan
103

āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļ•/āļˆāļ°āļĄāļ„.āļēāļŠāļ‡
āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāđāļ•āļāļ•/āļēāļ‡āļˆāļēāļāđ€āļ”0āļĄ āđ€āļžāļĢāļēāļ°āļāļĢāļ“āļ™āļˆāļ°āđƒāļŠāļˆāļēāļ attribute āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ JSF
Managed Bean āļ—āļŠāļ­ BookBean āļ‹,āļ‡āđ€āļ›āļ™ attribute āļ—āđ€āļāļšāđ„āļ§āđƒāļ™ request session āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™

         BookBean obj = (BookBean) request.getAttribute("BookBean");
         String isbn = obj.getIsbn();
         String author = obj.getAuthor();
         String title = obj.getTitle();
         float price = obj.getPrice();

       āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļš
āđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ°āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 13.3 āđ‚āļ”āļĒāļˆāļ°āļ•āļ­āļ‡āļ.āļēāļŦāļ™āļ”āđƒāļŦāļĄ URL pattern āđ€āļ›āļ™
/addBook.do

Listing āļ— 13.3 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java

package controller;

import bean.BookBean;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import javax.servlet.*;
import javax.servlet.http.*;

public class AddBookServlet extends HttpServlet {

   private Connection conn;

   public void init() {
     conn = (Connection)
           getServletContext().getAttribute("connection");
   }

   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 {
         BookBean obj = (BookBean) request.getAttribute("BookBean");
         String isbn = obj.getIsbn();
         String author = obj.getAuthor();


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
104

             String title = obj.getTitle();
             float price = obj.getPrice();

             Statement stmt = conn.createStatement();

             String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" + author +"',"+price
+")";
           int row = stmt.executeUpdate(sql);
           if (row == 1) {
           response.sendRedirect(“Thankyou.html”);
           } else {
           response.sendRedirect(“error.html”);
           }
         }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);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
       processRequest(request, response);
    }

    public String getServletInfo() {
      return "Short description";
    }
}

13.9         āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

        1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ JSFDBApp
        2.   Run āđ‚āļ›āļĢāđāļāļĢāļĄ JSFDBApp
        3.   āđ€āļĨāļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/JSFDBApp/AddBook.jsp āđƒāļŦāđ€āļĢāļē
             āļ—āļ”āļĨāļ­āļ‡āđƒāļŠ/āļ‚āļ­āļĄ#āļĨ
        4.   āđ€āļĄāļ­āļāļ”āļ›16āļĄ Add āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ Database
        5.   āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļ‚āļ­āļĄ#āļĨāļ—āļ›%āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāđ„āļ›āļ—āļŦāļ™āļēāļ•/āļēāļ‡ Services āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļ
             āļ„.āļēāļŠāļ‡ View Data.. āļˆāļēāļ Table āļ—āļŠāļ­ books

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                               Thanachart Numnonda / Thanisa Kruawaisayawan
105


                  Exercise 14 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ Visual JSF

āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™           -

       āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Frameworks āđ‚āļ”āļĒāđƒāļŠāđ‚āļĄāļ”#āļĨāļ‚āļ­āļ‡ NetBeans āļ—āļŠāļ­ Visual
Web JavaServer Faces āļ‹,āļ‡āļŠ/āļ§āļĒāļ—.āļēāđƒāļŦāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ„āļ”āđ‚āļ”āļĒāļ‡/āļēāļĒāđƒāļ™āļĢ#āļ›āđāļšāļš
Drag and Drop āđāļĨāļ°āļ—.āļēāđƒāļŦāđ€āļĢāļēāđ€āļ‚āļĒāļ™ source code āļ™āļ­āļĒāļĨāļ‡

14.1     āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project

       āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project
āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™

    1.   āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project..
    2.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web
         Application āđāļĨāļ§āļāļ” Next
    3.   āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ HelloVisualWebApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļē
         āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļˆāļēāļāļ™āļ™āļāļ” Next
    4.   āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Visual Web JavaServer Faces āļˆāļēāļāļ™āļ™āļāļ” Finish [āđƒāļ™āļāļĢāļ“āļ—āđ„āļĄ/āļĄ
         Visual JSF Framework āđƒāļŦāđ€āļĨāļ­āļ āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļ•0āļ”āļ•āļ‡ Visual JSF Plugin āļ‚āļ­āļ‡ NetBeans āļ/āļ­āļ™]

14.2     āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ            HelloWeb

      āđ‚āļ›āļĢāđāļāļĢāļĄ HelloWeb āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚,āļ™āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđ‚āļ”āļĒāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđƒāļŦ
āļĄāļŦāļ™āļēāļˆāļ­āļŠ/āļ§āļ™āļ•0āļ”āļ•/āļ­āļœ#āđƒāļŠāļ”āļ‡āļĢ#āļ›āļ— 14.1 āđ‚āļ”āļĒāļœ#āđƒāļŠāļŠāļēāļĄāļēāļĢāļ–āļ›%āļ­āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđƒāļ™ TextField āđāļĨāļ°āđ€āļĄāļ­āļāļ”āļ›16āļĄ Say
Sawaddee āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļšāļ™āļ•.āļēāđāļŦāļ™/āļ‡ Static Text āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                       Thanachart Numnonda / Thanisa Kruawaisayawan
106




                             āļĢāļ›āļ— 14.1 āļāļēāļĢāļŠāļĢāļēāļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ JSF āđ‚āļ”āļĒāđƒāļŠ Visual Editor

    1.   āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ5          Page1.jsp āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ™āđƒāļ™āđ‚āļŦāļĄāļ”
         Design
    2.   āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Properties āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļēāļ‚āļ­āļ‡      Title āđ€āļ›āļ™ Hello Web āļ”āļ‡āļĢ#āļ›āļ— 14.2




                                   āļĢāļ›āļ— 14.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Properties āļ‚āļ­āļ‡ Page1

    3.   āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Palette āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Label āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡
         Page1.jsp āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Name: āđāļĨāļ§āļāļ” Enter (āļˆāļ°āļŠāļ‡āđ€āļāļ•āđ€āļŦāļ™āļ§"āļēāļ„"āļēāļ‚āļ­āļ‡ text āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡
         Properties āļŠ.āļēāļŦāļĢāļš label1:text āļˆāļ°āļ–/āļāđ€āļ›āļĨ!āļĒāļ™āđ€āļ›6āļ™ Name: āļ”āļ§āļĒ)
    4.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ TextField āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™
         āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—!āđāļŠāļ”āļ‡āļ‚āļēāļ‡āļ•āļ™ āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Enter your name āđāļĨāļ§āļāļ” Enter
    5.   āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš TextField1 āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ textField1 āđ€āļ›6āļ™ nameTf
    6.   āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! nameTf āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ/āļ›āļ—! 14.3



āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                              Thanachart Numnonda / Thanisa Kruawaisayawan
107




                                    āļĢāļ›āļ— 14.3 āļāļēāļĢāđƒāļŠāļ„āļēāļŠāļ‡ Add Binding Attribute

    7.  āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Button āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™āļ•.āļēāđāļŦāļ™"āļ‡
        āļ”āļ‡āļĢ/āļ›āļ—!āđāļŠāļ”āļ‡āļ‚āļēāļ‡āļ•āļ™ āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Say Sawaddee
    8. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Button āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ button1 āđ€āļ›6āļ™ hiButton
    9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Static Text āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™
        āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—! 14.1
    10. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Static Text āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ staticText1 āđ€āļ›6āļ™ hiText
    11. āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! hiText āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute
    12. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Message Group āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp
        āđƒāļ™āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—! 14.1 (Message Group āļŠāļēāļĄāļēāļĢāļ–āđ€āļ­āļēāđ„āļ§āđƒāļŠāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡ Error Message)
    13. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđ€āļĨāļ­āļāđāļ—āļ› JSP āđ€āļĢāļēāļˆāļ°āđ€āļŦāļ™ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Page1.jsp āļ‹,āļ‡āļˆāļ°āļĄ Tags āļ‚āļ­āļ‡
        JSF āļ­āļĒ#/ āđƒāļŦāļŠāļ‡āđ€āļāļ•āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļāļĨ/āļēāļ§

     āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āļĄāļēāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ Source code āđ€āļžāļ­āļ.āļēāļŦāļ™āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļāļ”āļ›16āļĄ Say Sawaddee āđ‚āļ”āļĒāļĄ
āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ”āļ‡āļ™

    14. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāļāļĨāļšāļĄāļēāđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļāļ”āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāļ—āļ›16āļĄ Say Sawaddee
    15. āļŦāļ™āļēāļ•/āļēāļ‡ editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļ› Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āđƒāļ™āļ„.āļēāļŠāļ‡ action āļ‚āļ­āļ‡āļ›16āļĄ Say Sawaddee
         āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™
                      public String hiButton_action() {
                        String name = (String) nameTf.getText();
                        hiText.setText("Sawaddee " +name);
                        return null;
                      }


14.3     āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

    1.   āļ—.āļēāļāļēāļĢ   Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp


āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                             Thanachart Numnonda / Thanisa Kruawaisayawan
108

    2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp
    3.   āļ—āļ”āļĨāļ­āļ‡āļ›>āļ­āļ™āļ‚āļ­āļ„āļ§āļēāļĄāļĨāļ‡āđƒāļ™ Text Field āļˆāļ°āđ„āļ”āļ•āļ§āļ­āļĒ"āļēāļ‡āļœāļĨāļĨāļžāļ˜āļ”āļ‡āļĢ/āļ›āļ—! 14.4




                              āļĢāļ›āļ— 14.4 āļœāļĨāļĨāļžāļ˜!āļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp

14.4     āļāļēāļĢāļ›āļĢāļšāļ›āļĢāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ          HelloWeb

        āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāļĄ Drop-Down List āļ—āļ™.āļēāļŠāļ­āļĄāļēāļˆāļēāļ
table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āļĄāļŦāļ™āļēāļˆāļ­āļŠ/āļ§āļ™āļ•0āļ”āļ•/āļ­āļœ#āđƒāļŠāļ”āļ‡āļĢ#āļ›āļ— 14.5 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™




                   āļĢāļ›āļ— 14.5 āļŠ-āļ§āļ™āļ•āļ”āļ•-āļ­āļāļšāļœāđƒāļŠāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ VisualWebApp āļ—āļˆāļ°āļ›āļĢāļšāļ›āļĢ1āļ‡āđƒāļŦāļĄ-

āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
109


    1.   āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ       Page1.jsp āļŦāļ™āļēāļ•"āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨāļ™&āđƒāļ™āđ‚āļŦāļĄāļ”
       Design
    2. āļĨāļš TextField āļ­āļ­āļ āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Drop Down List āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđāļ—āļ™āļ—!
    3.   āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Drop Down List āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ dropDown1 āđ€āļ›6āļ™
         nameDropDown
    4.   āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! nameDropDown āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute
    5.   āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Services āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Databases āđāļĨāļ§āļ„āļĨ#;āļāļ‚āļ§āļēāļ—!āđ‚āļŦāļ™āļ” jdbc:mysql://localhost:3306/test
         āđāļĨāļ§āđ€āļĨāļ­āļ Connect āđ€āļž!āļ­āđ€āļŠ!āļ­āļĄāļ•"āļ­āļāļēāļ™āļ‚āļ­āļĄ/āļĨ
    6.   āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Tables āļˆāļ°āđ€āļŦāļ™ table āļ—!āļŠ!āļ­ books āļ‹:!āļ‡āļŠāļĢāļēāļ‡āļĄāļēāđƒāļ™āđāļšāļšāļ8āļāļŦāļ”āļāļēāļĢāđ€āļŠ!āļ­āļĄāļ•"āļ­āļāļš MySQL
         Database āļ”āļ‡āļĢ/āļ›āļ—! 14.6




                                   āļĢāļ›āļ— 14.6 āļāļēāļĢāđāļŠāļ”āļ‡ Table āļ—āļŠāļ­ books

    7.   āļĨāļēāļāđ„āļ­āļ„āļ­āļ™āļ‚āļ­āļ‡ table āļ—!āļŠ!āļ­ books āđ„āļ›āļĨāļ‡āđƒāļ™ Drop Down List
    8.   āļ„āļĨ#;āļāļ‚āļ§āļēāļ—! Drop Down List āđāļĨāļ§āđ€āļĨāļ­āļ3 Bind to Data
    9.   āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Bind to Data āđ€āļĨāļ­āļ Value field: āđ€āļ›6āļ™ books.author āđāļĨāļ° Display field: āđ€āļ›6āļ™
         books.author āļ”āļ‡āļĢ/āļ›āļ—! 14.7 āđāļĨāļ§āļāļ”āļ›'<āļĄ OK




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
110




                                 āļĢāļ›āļ— 14.7 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Bind to Data
    10. āļāļ”āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāļ—āļ›16āļĄ Say Sawaddee āļŦāļ™āļēāļ•/āļēāļ‡ editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļ› Java āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™

            public String hiButton_action() {
              String name =(String)nameDropDown.getSelected();
              hiText.setText("Sawaddee " + name);
              return null;
            }

    11. āđƒāļ™āđāļ—āļ› Java āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” prerender() āđ€āļžāļ­āļ.āļēāļŦāļ™āļ”āļ„/āļēāđ€āļĢ0āļĄāļ•āļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Drop
         Down List āļ”āļ‡āļ™

            public void prerender() {
              if (nameDropDown.getSelected() == null) {
                  booksDataProvider.cursorFirst();
                  nameDropDown.setSelected
                       ((String)booksDataProvider.getValue("books.author"));
              }
            }




14.5     āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ

    1.   āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp
    2.   Run āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp
    3.   āļ—āļ”āļĨāļ­āļ‡āđ€āļĨāļ­āļāļŠāļ­āđƒāļ™ Drop Down List āļˆāļ°āđ„āļ”āļ•āļ§āļ­āļĒ/āļēāļ‡āļœāļĨāļĨāļžāļ˜5āļ”āļ‡āļĢ#āļ› 14.8



āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan
111




                             āļĢāļ›āļ— 14.8 āļ•āļ§āļ­āļĒ-āļēāļ‡āļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp




āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP                           Thanachart Numnonda / Thanisa Kruawaisayawan

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
  • 9.
    9 āļŦāļĄāļēāļĒāđ€āļŦāļ•1 āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļžāļ­āļĢ5āļ•āđ‚āļ”āļĒāļžāļ™āļāļēāļ™āļˆāļ°āđ€āļ›āļ™ 8080āļĒāļāđ€āļ§āļ™āļ§/āļēāļˆāļ°āļ.āļēāļŦāļ™āļ”āļŦāļĄāļēāļĒāđ€āļĨāļ‚āļ­āļ™ āļĢāļ›āļ— 1.6 āļœāļĨāļĨāļžāļ˜!āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ addCustomer.html āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ 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> <formaction="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 AddBookServletextends 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
  • 45.
    45 6.2.1 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Session āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ FirstSessionServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ FirstSessionServlet.java āļ”āļ‡ Listing āļ— 6.3 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē āļŠāļ‡ Save 4. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet 5. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ SecondSessionServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish 6. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ SecondSessionServlet.java āļ”āļ‡ Listing āļ— 6.4 āđāļĨāļ§āđ€āļĨāļ­āļ āļ„.āļēāļŠāļ‡ Save 6.2.2 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Session āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo 2. āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo 3. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđ€āļĨāļ­āļ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/FirstSessionServlet 4. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondSessionServlet āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5 5. āļ—āļ”āļĨāļ­āļ‡āļ›@āļ” Web Browser āđāļĨāļ§āđ€āļ›@āļ”āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondSessionServlet āđƒāļŦāļĄ/āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5 6.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜(āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ.āļēāļŦāļ™āļ”āļ‚āļ­āļšāđ€āļ‚āļ•āļāļēāļĢāđƒāļŠāļ‡āļēāļ™āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āđƒāļŦāđ€āļ›āļ™āđāļšāļš Application āļāļĨ/āļēāļ§āļ„āļ­āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļāļš āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļŦāļĢāļ­ JSP āļ—1āļāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­āļĒ#/āļ āļēāļĒāđƒāļ™ Web Application āđ€āļ”āļĒāļ§āļāļ™āļ•āļĢāļēāļšāđƒāļ”āļ— Web Server āļĒāļ‡ deploy āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ”āļ‡āļāļĨ/āļēāļ§āļ­āļĒ#/ āļ–,āļ‡āđāļĄāļ§/āļē Web Browser āļ‚āļ­āļ‡āļABāļ‡ client āļˆāļ°āļ›@āļ”āđ„āļ›āđāļĨāļ§āļāļ•āļēāļĄ āļāļēāļĢāļ.āļēāļŦāļ™āļ”āļ‚āļ­āļšāđ€āļ‚āļ•āđāļšāļš Application āļŠāļēāļĄāļēāļĢāļ–āļ—.āļēāđ„āļ”āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ setAttribute() āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” ServletContext āļ‹,āļ‡āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļ—āđ€āļāļšāļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡ Web Application āļ‹,āļ‡āđƒāļ™āđāļ•/āļĨāļ° Web Application āļˆāļ°āļĄāļ­āļ­āļ›āđ€āļˆ āļ„āļŠāļ™0āļ” ServletContext āļ­āļĒ#/āļŦāļ™,āļ‡āļ•āļ§ āđāļĨāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļĢāļĒāļāļĄāļēāđ„āļ”āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getServletContext() āļ•āļ§āļ­āļĒ/āļēāļ‡āļ„.āļēāļŠāļ‡āđƒāļ™āļāļēāļĢāđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” String āļ—āļŠāļ­ name āđ„āļ§āđƒāļ™ attribute āļ—āļŠāļ­ AppName āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 46.
    46 āļŠāļ™0āļ” ServletContext āļˆāļ°āļĄāļĢ#āļ›āđāļšāļšāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ String name = "Thanisa"; ServletContext context = getServletContext(); context.setAttribute("AppName", name); āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ­āļ™āđ†āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ attribute āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” ServletContext āļ—āļŠāļ­ AppName āđāļĨāļ°āļ”,āļ‡āļ„/āļēāļ‚āļ­āļ‡āļ•āļ§āđāļ›āļĢ name āļ­āļ­āļāļĄāļēāđ„āļ” āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getAttribute() āđ€āļžāļ­āđ€āļĢāļĒāļāļ„/āļēāļˆāļēāļāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” ServletContext āđ‚āļ”āļĒāļĄāļĢ#āļ›āđāļšāļšāļ”āļ‡āļ™ ServletContext context = getServletContext(); String name = (String) context.getAttribute("AppName"); out.println(name); āđƒāļ™āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āļ‚āļ­āļšāđ€āļ‚āļ•āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡ Object āđāļšāļš application āđ‚āļ”āļĒāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ‚,āļ™āļĄāļēāļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ FirstAppServlet āļ—āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢāļŠ/āļ‡āļ­āļ­āļ› āđ€āļˆāļ„āļ‹,āļ‡āļĄ source code āļ•āļēāļĄ Listing āļ— 6.5 āđāļĨāļ° āđ‚āļ›āļĢāđāļāļĢāļĄ SecondAppServlet āļ—āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢāļ­/āļēāļ™āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ āļ—āļŠ/āļ‡āļ­āļ­āļāļĄāļēāđāļĨāļ§āļ™.āļēāļĄāļēāđāļŠāļ”āļ‡āļœāļĨ āļ‹,āļ‡āļĄ source code āļ•āļēāļĄ Listing āļ— 6.6 Listing āļ— 6.5 āđ‚āļ›āļĢāđāļāļĢāļĄ FirstAppServlet.java package servlet; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; package servlet; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class FirstAppServlet 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"; ServletContext context = getServletContext(); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 47.
    47 context.setAttribute("AppName", 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> } Listing āļ— 6.6 āđ‚āļ›āļĢāđāļāļĢāļĄ SecondAppServlet.java package servlet; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class SecondAppServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { ServletContext context = getServletContext(); String name = (String) context.getAttribute("AppName"); out.println(name); } finally { out.close(); } } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 48.
    48 processRequest(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } public String getServletInfo() { return "Short description"; } // </editor-fold> } 6.3.1 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ FirstAppServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ FirstAppServlet.java āļ”āļ‡ Listing āļ— 6.5 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save 4. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” ScopeDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet 5. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ SecondAppServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ servlet āđāļĨāļ§āļāļ” Finish 6. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ SecondAppServlet.java āļ”āļ‡ Listing āļ— 6.6 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē āļŠāļ‡ Save 6.3.2 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļžāļ­āļŠāļēāļ˜0āļ•āļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡ Object āđāļšāļš Application āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo 2. āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ ScopeDemo 3. āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđ€āļĨāļ­āļ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/FirstAppServlet 4. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondAppServlet āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5 5. āļ—āļ”āļĨāļ­āļ‡āļ›@āļ” Web Browser āđāļĨāļ§āđ€āļ›@āļ”āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/ScopeDemo/SecondAppServlet āđƒāļŦāļĄ/āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 49.
    49 Exercise 7 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Web Listener āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ Web Application āļ—āļŠāļ­ WebBaseDB āļ—āđƒāļŠāđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡ āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđāļĨāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡ Table āđ‚āļ”āļĒāđ€āļž0āļĄāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Web Listener āđ€āļžāļ­āļ—.āļēāļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđāļ—āļ™āļ§0āļ˜ āļāļēāļĢāđ€āļ”0āļĄāļ—āđ€āļŠāļ­āļĄāļ•/āļ­āđƒāļ™āđ€āļĄāļ˜āļ­āļ” init() āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java 2. āđāļāđ„āļ‚āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java 7.1 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļ.āļēāļŦāļ™āļ”āļ„.āļēāļŠāļ‡āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āđƒāļ™āđ€āļĄāļ˜āļ­āļ” init() āļ‹,āļ‡āđ€āļ›āļ™āļ§0āļ˜āļāļēāļĢāļ— āđ„āļĄ/āđ€āļŦāļĄāļēāļ°āļŠāļĄāļĄāļēāļāļ™āļ āđ€āļ™āļ­āļ‡āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļ—1āļāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļˆāļ°āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ•āļ­āļ‡āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™ āļŠ/āļ§āļ™āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” init() āļ—āļ‹.āļēāļāļ™ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļŠ/āļ§āļ™āļ™āđ‚āļ”āļĒāļāļēāļĢāđƒāļŠ ContextListener āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āļˆāļ°āļĄ Listener āļ­āļĒ#/āļŠāļ­āļ‡āļŠāļ™0āļ”āļ„āļ­ ContextListener āđāļĨāļ° SessionListener āđ‚āļ”āļĒāļ— ContextListener āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđ€āļĄāļ­ Web Application āđ€āļĢ0āļĄāļ•āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļŦāļĢāļ­āļŠ0āļ™āļŠ1āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— Servlet Listener āđ„āļ”āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļžāļ’āļ™āļēāļ„āļĨāļēāļŠāļ— implements Listener āļ—āļ•āļ­āļ‡āļāļēāļĢāļ­āļēāļ—0āđ€āļŠ/āļ™ ServletContextListener 2. āđ€āļ‚āļĒāļ™āđ€āļĄāļ˜āļ­āļ”āļ—āļ•āļ­āļ‡ implements āđƒāļ™ Listener āļ™āļ™āđ† 3. config āđ„āļŸāļĨ5 web.xml āđ€āļžāļ­āđ€āļž0āļĄāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āđ€āļ›āļ™ ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ Connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļ‚āļĒāļ™āļ„.āļēāļŠāļ‡āđ€āļŦāļĨ/āļēāļ™āļ āļēāļĒāđƒāļ™āđ€āļĄāļ˜āļ­āļ” contextInitialized() āļ‹,āļ‡āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđ€āļĄāļ­ Web Application āđ€āļĢ0āļĄāļ•āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™ āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 50.
    50 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Web Application Listener āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ Init āđāļĨāļ° Package āđ€āļ›āļ™ listener āđāļĨāļ§āļāļ” Finish āļ”āļ‡āļĢ#āļ›āļ— 7.1 āļĢāļ›āļ— 7.1 āļāļēāļĢāļŠāļĢāļēāļ‡āļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Web Listener 4. āđƒāļ™āļŦāļ™āļē Editor āđƒāļŦāļ„āļĨ0;āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Insert Code... > Use Database 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Choose Database āļāļ”āļ›'<āļĄ Add... 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Data Source Reference āđƒāļŦāļ.āļēāļŦāļ™āļ” Reference Name: āđ€āļ›āļ™ jdbc/test āļ”āļ‡āļĢ#āļ›āļ— 7.2 āļĢāļ›āļ— 7.2 āļāļēāļĢāļāļēāļŦāļ™āļ” Reference Name 7. āđ‚āļ›āļĢāđāļāļĄāļˆāļ°āļ›āļĢāļēāļāļ sourcecode āļ”āļ‡āļ™āđƒāļ™āđ„āļŸāļĨ5 Init.java āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 51.
    51 private DataSource getJdbcTest() throws NamingException { Context c = new InitialContext(); return (DataSource) c.lookup("java:comp/env/jdbc/test"); } 8. āđƒāļŦāļ—.āļēāļāļēāļĢāđ€āļž0āļĄ sourcecode āļ”āļ‡āļ•/āļ­āđ„āļ›āļ™āđƒāļ™āđ€āļĄāļ˜āļ­āļ” contextInitialized conn = getJdbcTest().getConnection(); arg0.getServletContext().setAttribute("connection", conn); 9. āļˆāļēāļāļ™āļ™āđƒāļŦāļ—.āļēāļāļēāļĢ Fix Imports āđāļĨāļ° āļˆāļ°āļ—.āļēāđƒāļŦ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Init.java āļ”āļ‡āļ™ private Connection conn; public void contextInitialized(ServletContextEvent arg0) { try { conn = getJdbcTest().getConnection(); arg0.getServletContext().setAttribute("connection", conn); } catch (SQLException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); } catch (NamingException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); } } 10. āļˆāļēāļāļ™āļ™āļ„āļ§āļĢāđ€āļž0āļĄāđ€āļ•0āļĄāļ„.āļēāļŠāļ‡āļ•/āļ­āđ„āļ›āļ™āđƒāļ™āđ€āļĄāļ˜āļ­āļ” contextDestroyed public void contextDestroyed(ServletContextEvent arg0) { try { conn.close(); } catch (SQLException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); } } āđ€āļĢāļēāļˆāļ°āđ„āļ” sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Init.java āļ”āļ‡ Listing āļ— 7.1 Listing āļ— 7.1 āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java public class Init implements ServletContextListener { private Connection conn; public void contextInitialized(ServletContextEvent arg0) { try { conn = getJdbcTest().getConnection(); arg0.getServletContext().setAttribute("connection", conn); } catch (SQLException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); } catch (NamingException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 52.
    52 } } public void contextDestroyed(ServletContextEvent sce) { try { conn.close(); } catch (SQLException ex) { Logger.getLogger(Init.class.getName()).log(Level.SEVERE, null, ex); } } private DataSource getJdbcTest() throws NamingException { Context c = new InitialContext(); return (DataSource) c.lookup("java:comp/env/jdbc/test"); } } 7.2 āļāļēāļĢāļ›āļĢāļšāļ›āļĢāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āļˆāļ°āļĄ.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļ”āļ‡āļ™āļ™āđ€āļĢāļēāļˆ,āļ‡āļ•āļ­āļ‡āđāļāđ„āļ‚āļ„.āļēāļŠāļ‡āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡ āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āđƒāļ™āđ„āļŸāļĨ5 AddBookServlet.java āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđƒāļŦāļĨāļšāļ„.āļēāļŠāļ‡ @Resource(name = "jdbc/test") private DataSource jdbcTest; 2. āđāļāđ„āļ‚āđ€āļĄāļ˜āļ­āļ” init() āđƒāļŦāđ€āļ›āļ™āļ”āļ‡āļ™ public void init() { conn = (Connection) getServletContext().getAttribute("connection"); } āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđƒāļŦāļĄ/āļ”āļ‡ Listing āļ— 7.2 Lisitng āļ— 7.2 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java .... public class AddBookServlet extends HttpServlet { private Connection conn; public void init() { conn = (Connection) getServletContext().getAttribute("connection"); } protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 53.
    53 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(); } .... } 7.3 āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB āļ—āļ‡āļ™āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļĢāļ™ MySQL Database Server āļ/āļ­āļ™ 6. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļŦāļ™āļē addBook.html āđƒāļŦāđ€āļĢāļēāđƒāļŠ/āļ‚āļ­āļĄ#āļĨ :āļ‹āļ‡āđ€āļĄāļ­āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļˆāļ°āđ„āļ”āļœāļĨāļĨāļž5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđāļšāļš āļāļāļŦāļ”āļ/āļ­āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 54.
    54 Exercise 8 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ€āļžāļ­āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5 āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ€āļžāļ­āļ­āļ˜0āļšāļēāļĒāļāļēāļĢāđƒāļŠ Servlet Filter āđƒāļ™āļāļēāļĢ āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢ login āđ€āļ‚āļēāļŠ#/āļĢāļ°āļšāļš āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļšāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­āļĒ#/āđƒāļ™ Web Application āļˆāļ°āļ–#āļ Filter āđ€āļĢāļĒāļāđ€āļžāļ­āļ•āļ§āļŠāļ­āļšāļŠāļ–āļēāļ™āļ°āļāļēāļĢ login āļ/āļ­āļ™āļ—āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļ™āđ„āļ” 8.1 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļ.āļēāļŦāļ™āļ”āļ‚,āļ™āļĄāļēāđƒāļ™ Web Application āļ‹,āļ‡āļˆāļ°āļ”āļāļāļēāļĢāļ—.āļēāļ‡āļēāļ™ āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āđƒāļ”āđ† āđāļĨāļ§āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđāļāđ„āļ‚āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” request āđāļĨāļ° response āļ/āļ­āļ™āļ— āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ™āļ™āļˆāļ°āļ–#āļāđ€āļĢāļĒāļāđƒāļŠāļ•/āļ­āđ„āļ› āļ•āļ§āļ­āļĒ/āļēāļ‡āļ‚āļ­āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āļ„āļ­ â— āļāļēāļĢāļ„āļ§āļšāļ„1āļĄāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet āļŦāļĢāļ­āļāļēāļĢāļ—.āļē Authentication ● āļāļēāļĢāļšāļĨāļ­āļāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet āļŦāļĢāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāđƒāļŠāļ‡āļēāļ™ Servlet ● āļāļēāļĢāđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ request āđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āļˆāļ°āđ€āļ›āļ™ āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ— implements āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠāļ—āļŠāļ­ Filter āđāļĨāļ°āļĄāđ€āļĄāļ˜āļ­āļ” āļŦāļĨāļāļ„āļ­ init(), destroy() āđāļĨāļ° doFilter() āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦ url āđƒāļ”āđ† āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ–#āļ Filter āļˆāļēāļāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet Filter āđƒāļ”āđ† āđ‚āļ”āļĒāļāļēāļĢāļ.āļēāļŦāļ™āļ”āļ„/āļēāđƒāļ™ web.xml āļ­āļēāļ—0āđ€āļŠ/āļ™āļ„.āļēāļŠāļ‡ <filter> <filter-name>LoginFilter</filter-name> <filter-class>LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> āđ€āļ›āļ™āļāļēāļĢāļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ url āļ—1āļāļ•āļ§āļ—āļ­āļĒ#/āđƒāļ™ Web Application āļ™ āļ•āļ­āļ‡āļ–#āļāļ”āļāđ‚āļ”āļĒ Servlet Filter āļ—āļŠāļ­ LoginFilter āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļĄ web form āļ—āļŠāļ­ login.html āļ‹,āļ‡āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet āļ‹,āļ‡ āļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„/āļē username āđāļĨāļ° password āļ—āļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļē āļŦāļēāļāļ–#āļāļ•āļ­āļ‡āļāļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„āļ—āļŠāļ­ loginFlag āđ€āļ›āļ™ true āđāļĨāļ§āļ.āļēāļŦāļ™āļ”āđƒāļŦāļ‚āļ­āļšāđ€āļ‚āļ•āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ loginFlag āđ€āļ›āļ™āđāļšāļš Session āđ‚āļ”āļĒāļāļēāļĢ setAttribute āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 55.
    55 āđƒāļŦāļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession āđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āļ™āļĒāļ‡āļĄ Servlet Filter āļ—āļŠāļ­ LoginFilter āļ‹,āļ‡āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āļ­/āļēāļ™āļ„/āļēāļ‚āļ­āļ‡āļ­āļ­āļ› āđ€āļˆāļ„ LoginFlag āļ—āļ­āļĒ#/āđƒāļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession āļ–āļēāļŦāļēāļāđ„āļĄ/āļžāļšāļŦāļĢāļ­āļĄāļ„/āļēāđ€āļ›āļ™ false āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĢāļ°āļš1 HTTP Error 401 (This request requires HTTP authentication . ) āļŠ1āļ”āļ—āļēāļĒāļˆāļ°āļĄāļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļŠāļ­ ShowServlet āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē HelloWorld āđ€āļžāļ­āđāļŠāļ”āļ‡āđƒāļŦāđ€āļŦāļ™āļ§/āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ–#āļāļ”āļāđ‚āļ”āļĒ LoginFilter 8.2 āļāļēāļĢāđ€āļ‚%āļĒāļ™āļŦāļ™āļē Login āļŦāļ™āļē Login āļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄāļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ login.html āļ‹,āļ‡āļˆāļ°āđ€āļ›āļ™ web page āļ—āļĄāļĨāļāļĐāļ“āļ°āļ”āļ‡āļĢ#āļ› āđāļĨāļ°āļĄ source code āļ•āļēāļĄ Listing āļ— 8.1 āļ™āļ­āļāļˆāļēāļāļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet āļ‹,āļ‡āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ— āļŠāļ­ username āđāļĨāļ° password āļžāļĢāļ­āļĄāļ—āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§/āļēāļĄāļ„/āļēāđ€āļ›āļ™ thana āđāļĨāļ° secret āļŦāļĢāļ­āđ„āļĄ/ āļŦāļēāļāđƒāļŠ/āļāļˆāļ°āļ.āļēāļŦāļ™āļ”āļ„/āļē āļ•āļ§āđāļ›āļĢ loginFlag āđ€āļ›āļ™ true āđāļĨāļ§āđ€āļāļšāļĨāļ‡āđƒāļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” HttpSession āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 8.2 āļĢāļ›āļ— 8.1 āđ€āļ§āļšāļŦāļ™āļē Login Listing āļ— 8.1 āđ‚āļ›āļĢāđāļāļĢāļĄ login.html <html> <head> <title>Login Page</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <form action="LoginServlet" method="POST"> UserName: <input name="username" /> <br> Password: <input type="password" name="password" /> <br> <input type="submit" value="Login" /> </form> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 56.
    56 Listing āļ— 8.2āđ‚āļ›āļĢāđāļāļĢāļĄ LoginServlet.java package controller; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class LoginServlet extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { boolean loginFlag = false; String username = request.getParameter("username"); String password = request.getParameter("password"); if (username.equals("thana") && password.equals("secret")) { loginFlag = true; } HttpSession session = request.getSession(); session.setAttribute("loginFlag", loginFlag); response.sendRedirect("show.do"); } 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"; } } 8.2.1 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 57.
    57 1. āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡āļŠāļĢāļēāļ‡ New Project āļˆāļēāļāđ€āļĄāļ™# āđ€āļĨāļ­āļ Java Web āđāļĨāļ§āđ€āļĨāļ­āļ Web Application āļ.āļēāļŦāļ™āļ”āļŠāļ­ āđ‚āļ›āļĢ āđ€āļˆāļ„āđ€āļ›āļ™ FilterDemo āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ° Java EE Version āđ€āļ›āļ™ Java EE5 āđāļĨāļ§āļāļ” Finish 2. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > HTML.. 3. āļ.āļēāļŦāļ™āļ” HTML File Name: āđ€āļ›āļ™ login āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ login.html āļ”āļ‡ Listing āļ— 8.1 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save 5. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet... 6. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ LoginServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Finish 7. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ LoginServlet.java āļ”āļ‡ Listing āļ— 8.2 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save 8.3 āļāļēāļĢāđ€āļ‚%āļĒāļ™ Servlet Filter āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđ€āļĢāļĒāļ attribute āļ—āļŠāļ­ loginFlag āđāļĨāļ°āļŦāļēāļāđ„āļĄ/āļžāļšāļŦāļĢāļ­āļĄāļ„/āļēāđ€āļ›āļ™ false āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĢāļ°āļš1 HTTP Error 401 āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter āļˆāļ°āļĄ source code āļŦāļĨāļāļ­āļĒ#/āļ— āđ€āļĄāļ˜āļ­āļ” doFilter() āļ”āļ‡ Listing āļ— 8.3 āļ™āļ­āļāļˆāļēāļāļ™āļāļĢāļ“āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦ url āđ€āļ‰āļžāļēāļ°āļŠāļ­ *.do āđ€āļ—/āļēāļ™āļ™āļ—āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Filter āļ—āļŠāļ­ LoginFilter āļ‹,āļ‡ āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāđāļāđ„āļ‚ web.xml āļ”āļ‡āļ™ <filter> <filter-name>LoginFilter</filter-name> <filter-class>filter.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>LoginFilter</filter-name> <url-pattern>*.do</url-pattern> </filter-mapping> Listing āļ— 8.3 āđ€āļĄāļ˜āļ­āļ” doFilter() āļ‚āļ­āļ‡ āđ‚āļ›āļĢāđāļāļĢāļĄ LoginFilter.java public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { if (debug) { log("LoginFilter:doFilter()"); } doBeforeProcessing(request, response); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 58.
    58 HttpServletRequest req = (HttpServletRequest) request; HttpSession session = req.getSession(); Boolean flag = (Boolean) session.getAttribute("loginFlag"); boolean loginFlag; if (flag == null) { loginFlag = false; } else { loginFlag = flag; } if (!loginFlag) { HttpServletResponse res = (HttpServletResponse) response; res.sendError(HttpServletResponse.SC_UNAUTHORIZED); return; } Throwable problem = null; try { chain.doFilter(request, response); } catch (Throwable t) { problem = t; t.printStackTrace(); } doAfterProcessing(request, response); if (problem != null) { if (problem instanceof ServletException) { throw (ServletException) problem; } if (problem instanceof IOException) { throw (IOException) problem; } sendProcessingError(problem, response); } } 8.3.1 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Filter āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ LoginFilter āđāļĨāļ° Package āđ€āļ›āļ™ filter āđāļĨāļ§āļāļ” Next 4. āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ› āđƒāļŦāđƒāļŠāļ„/āļēāļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āļ”āļ‡āļĢ#āļ›āļ— 8.2 āđāļĨāļ§āļāļ” Finish āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 59.
    59 āļĢāļ›āļ— 8.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļēāļ‚āļ­āļ‡ Filter 5. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāđāļāđ„āļ‚āđ„āļŸāļĨ5 web.xml āđ€āļžāļ­āļĢāļ°āļš1 Filter āđƒāļŦāļĄ/āļ—āļŠāļĢāļēāļ‡āļ‚,āļ™ āļ‹,āļ‡āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļāļēāļĢāđāļāđ„āļ‚āļ™ āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” FilterDemo > Web Pages >WEB-INF āđāļĨāļ§āđ€āļĨāļ­āļāđ„āļŸāļĨ5 web.xml āļˆāļ°āđ€āļŦāļ™ āļŦāļ™āļēāļ•/āļēāļ‡āļ”āļ‡āļĢ#āļ›āļ— 8.3 āļĢāļ›āļ— 8.3 āļŦāļ™āļēāļ•-āļēāļ‡āđ„āļŸāļĨ! web.xml 6. āđƒāļ™āļŠ/āļ§āļ™āļ‚āļ­āļ‡ Filter Mappings āđƒāļŦāđ€āļĨāļ­āļ LoginFilter āđāļĨāļ§āļāļ” Edit āđ€āļžāļ­āđāļāđ„āļ‚ Applies To āđ€āļ›āļ™ *.do āļ”āļ‡ āļĢ#āļ›āļ— 8.4 āļĢāļ›āļ— 8.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Filter Mapping āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 60.
    60 7. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” doFilter() āļ‚āļ­āļ‡āđ„āļŸāļĨ5 LoginFilter.java āļ”āļ‡ Listing āļ— 8.3 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save 8.4 āļāļēāļĢāđ€āļ‚%āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē Hello World āđāļĨāļ°āļĄ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” processRequest() āļ”āļ‡ Listing āļ— 8.4 Listing āļ— 8.4 āđ€āļĄāļ˜āļ­āļ” processRequest() āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ ShowServlet.java protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>Servlet ShowServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1> Hello World </h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } 8.4.1 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” FilterDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet.. 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ ShowServlet.java āđāļĨāļ° Package āđ€āļ›āļ™ view āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” URL Pattern(s) āđ€āļ›āļ™ /show.do āļ”āļ‡āļĢ#āļ›āļ— 8.5 āđāļĨāļ§āļāļ” Finish āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 61.
    61 āļĢāļ›āļ— 8.5 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē URL pattern 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ ShowServlet.java āļ”āļ‡ Listing āļ— 8.4 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Save 8.5 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ FilterDemo 2. āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ FilterDemo 3. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/FilterDemo/show.do āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5āļˆāļ°āđ€āļŦāļ™āļ§/āļēāđāļŠāļ”āļ‡āļ‚āļ­ āļœ0āļ”āļžāļĨāļēāļ” HTTP 401 4. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/FilterDemo/login.html āđāļĨāļ§āļ›%āļ­āļ™ username āđ€āļ›āļ™ thana āđāļĨāļ° password āđ€āļ›āļ™ secret āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 62.
    62 Exercise 9 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨāļĨāļžāļ˜ āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļˆāļēāļāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļ­āļ­āļāļ—āļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web Browser āđ‚āļ”āļĒāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WebbaseDB āđ€āļžāļ­āđ€āļ•0āļĄ 9.1 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđāļĨāļ°āļ§āļ™āđ€āļ§āļĨāļēāļ‚āļ­āļ‡ Web Server āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ° āđ€āļ›āļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđāļšāļš dynamic content āļˆ,āļ‡āļ•āļ­āļ‡āļžāļ’āļ™āļēāđ‚āļ”āļĒāđƒāļŠāļ āļēāļĐāļē JSP āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ hello āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 hello.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 9.1 5. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB E 6. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 hello.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄ 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļ”āļ‡āļĢ#āļ›āļ— 1 Listing āļ— 9.1 āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Hello JSP</title> </head> <body> <h1>My First JSP</h1> Hello : Current time is : <%= new java.util.Date() %> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 63.
    63 āļĢāļ›āļ— 9.1 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡ hello.jsp 9.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡ Table āļ—āļŠāļ­ books āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ° āđ€āļĢāļĒāļāđƒāļŠ standard tags āļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§āđƒāļ™ JSTL 1.1 āļ‹,āļ‡āļ—.āļēāđƒāļŦāļœ#āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ„āļĄ/āļ•āļ­āļ‡āđ€āļ‚āļĒāļ™ source code āļ āļēāļĐāļē Java āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ•/āļēāļ‡āđ† āļ—āļŠ.āļēāļ„āļāļ”āļ‡āļ™ 9.2.1 āļāļēāļĢāļ.āļēāļŦāļ™āļ” Tag Library āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ JSTL 1.0 āđ€āļĢāļēāļˆ,āļ‡āļˆ.āļēāđ€āļ›āļ™āļ•āļ­āļ‡āļĄāļ„.āļēāļŠāļ‡ Taglib āđ€āļžāļ­āļ—āļˆāļ°āļ›āļĢāļ°āļāļēāļĻ Library āļ”āļ‡āļ™ <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> 9.2.2 āļāļēāļĢāļ.āļēāļŦāļ™āļ” Datasource āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ™āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āļ•āļ­āļ‡āđƒāļŠ datasource āļ‚āļ­āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ– āļ.āļēāļŦāļ™āļ”āđ„āļ”āļŠāļ­āļ‡āļ§0āļ˜ â— āļāļĢāļ“āļ—āļĄ datasource āļ‹,āļ‡āđ€āļŠāļ­āļĄāļ•/āļ­āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ•āļ­āļ‡āļāļēāļĢāļ­āļĒ#/āđāļĨāļ§ āļāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāļ­āļ™āđ€āļ”0āļĄāđ„āļ”āđ€āļĨāļĒ āļ•āļ§āļ­āļĒ/āļēāļ‡āđ€āļŠ/āļ™ jdbc/test āđ‚āļ”āļĒāđ„āļĄ/āļˆ.āļēāđ€āļ›āļ™āļ•āļ­āļ‡āļŠāļĢāļēāļ‡ dataSource āļ‚,āļ™āđƒāļŦāļĄ/āļ­āļ â— āļāļĢāļ“āļ—āļĒāļ‡āđ„āļĄ/āļĄ datasource āđƒāļŦāđƒāļŠāļ„.āļēāļŠāļ‡ setDataSource āđ€āļ›āļ™ Tag āđ€āļžāļ­āđƒāļŦāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ.āļēāļŦāļ™āļ”āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­ āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ°āļ.āļēāļŦāļ™āļ”āļ„/āļēāđ„āļ§āđƒāļ™āļ•āļ§āđāļ›āļĢāļ•āļēāļĄāļŠāļ­āļ—āļ.āļēāļŦāļ™āļ” āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 64.
    64 āļ–,āļ‡āđāļĄāļ§/āļēāđ‚āļ›āļĢāđ€āļˆāļ„ WebBaseDB āļˆāļ°āļĄ datasource āļ­āļĒ#/āđāļĨāļ§ āđāļ•/āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ” datasource āļ‚,āļ™āļĄāļē āđƒāļŦāļĄ/āļ­āļāļŦāļ™,āļ‡āļŠ1āļ” āļ.āļēāļŦāļ™āļ”āđ€āļ›āļ™āļ•āļ§āđāļ›āļĢāļ—āļŠāļ­ newdatasource āđ‚āļ”āļĒāļˆāļ°āļ.āļēāļŦāļ™āļ”āļ„.āļēāļŠāļ‡āđ€āļ›āļ™ <sql:setDataSource var="newdatasource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql:///test" user="root" password="root" /> āđ€āļžāļ­āđ€āļ›āļ™āļāļēāļĢāđ€āļŠāļ­āļĄāļ•/āļ­āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āļ­āļĒ#/āļ— url āļ—āļŠāļ­ jdbc:mysql:///test 9.2.3 āļāļēāļĢāđƒāļŠāļ„.āļēāļŠāļ‡ sql:query āļ„.āļēāļŠāļ‡ sql:query āđ€āļ›āļ™āļ„.āļēāļŠāļ‡āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”#āļ‚āļ­āļĄ#āļĨāļ‚āļ­āļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāļ—āđ€āļŠāļ­āļĄāļ•/āļ­āđƒāļ™ datasource āļ—āđ€āļ›āļ™ jdbc/test āļŦāļĢāļ­āļ•āļ§āđāļ›āļĢ newdatasource āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp āđ€āļĢāļēāļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠāļ„.āļēāļŠāļ‡ SQL āļ„āļ­ select * from books āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ sql:query āļ”āļ‡āļ™ <sql:query var="db" dataSource="/jdbc/test"> SELECT * FROM books </sql:query> āļŦāļĢāļ­ <sql:query var="db" dataSource="${newdatasource}"> SELECT * FROM books </sql:query> 9.2.4 āļāļēāļĢāđƒāļŠāļ„.āļēāļŠāļ‡ c:forEach āđ€āļžāļ­āđāļŠāļ”āļ‡āļœāļĨ āļāļēāļĢāđāļŠāļ”āļ‡āļ„/āļēāļ‚āļ­āļ‡āļœāļĨāļĨāļžāļ˜5āļ—āđ„āļ”āļˆāļēāļāļāļēāļĢ Query āļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļŠāļēāļĄāļēāļĢāļ–āļ—.āļēāđ„āļ” āļāļēāļĢāđāļˆāļ‡āļ‚āļ­āļĄ#āļĨāļ—āļĨāļ°āđāļ–āļ§āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ c:forEach āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāļŠāļ­āļŦāļ™āļ‡āļŠāļ­ āđāļĨāļ°āļŠāļ­āļœ#āđāļ•/āļ‡ āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ <c:forEach var="row" items="${db.rows}"> ${row.title} : ${row.author} <br> </c:forEach> āļŠ.āļēāļŦāļĢāļšāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™ āļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” WebBaseDB āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ viewBook āđāļĨāļ§āļāļ” Finish 4. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” WebBaseDB āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” Libraries āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ Add Libraries.. āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 65.
    65 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Library āđ€āļĨāļ­āļ JSTL1.1 āđāļĨāļ§āļāļ”āļ›16āļĄ Add Library āļ”āļ‡āļĢ#āļ›āļ— 9.2 āļĢāļ›āļ— 9.2 āļāļēāļĢāđ€āļžāļĄ Library āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ 6. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 viewBook.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 9.2 7. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ WebBaseDB 8. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 viewBook.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄ 9. āļ— Web Browser āđ€āļ›āļĨāļĒāļ™ URL āđ€āļ›āļ™ http://localhost:8080/WebBaseDB/viewBook.jsp āļˆāļ°āđ„āļ” āļœāļĨāļĨāļžāļ˜5āļ”āļ‡āļ•āļ§āļ­āļĒ/āļēāļ‡āđƒāļ™āļĢ#āļ›āļ— 9.3 āļĢāļ›āļ— 9.3 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡ viewBook.jsp Listing āļ— 9.2 āđ‚āļ›āļĢāđāļāļĢāļĄ viewBook.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 66.
    66 <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@tagliburi="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>JSP Page</h1> <sql:setDataSource var="newdatasource" driver="com.mysql.jdbc.Driver" url="jdbc:mysql:///test" user="root" password="root" /> <sql:query var="db" dataSource="${newdatasource}"> SELECT * FROM books </sql:query> <c:forEach var="row" items="${db.rows}"> ${row.title} : ${row.author} <br> </c:forEach> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 67.
    67 Exercise 10 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļš Online Book Store āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ° āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āļŠāļĢāļēāļ‡ Web Form āđƒāļŦāļœ#āđƒāļŠāđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ•/āļēāļ‡āđ† āļ—āļĄ āļ­āļĒ#/āđƒāļ™ table āļ—āļŠāļ­ books āļˆāļēāļāļ™āļ™āļˆāļ°āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļāļ­āļ­āļāļĄāļēāļ—āļēāļ‡āđ€āļ§āļšāđ€āļžāļˆ 10.1 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļĄāļ­āļĒ#/āđƒāļ™ table āļ—āļŠāļ­ books āļ­āļ­āļāļĄāļēāđāļŠāļ”āļ‡āđƒāļ™āļĢ#āļ›āđāļšāļšāļ‚āļ­āļ‡ Web Form āđ€āļžāļ­āđƒāļŦāļœ#āđƒāļŠāđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āđāļĨāļ°āļˆ.āļēāļ™āļ§āļ™āļ”āļ‡āļĢ#āļ›āļ— 10.1 āļ—āļ‡āļ™ Web Form āļ™āļˆāļ°āđ€āļĢāļĒāļ url āļ—āļŠāļ­ processSelection āđ€āļĄāļ­āļĄāļāļēāļĢāļāļ”āļ›16āļĄ Select āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ SQL tags āļ‚āļ­āļ‡ JSTL āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļ‚āļ­āļĄ#āļĨāļĢāļēāļĒāļŠāļ­āļŦāļ™āļ‡āļŠāļ­ āđ‚āļ”āļĒāļĄ source code āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™ Listing āļ— 10.1 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢ āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1) āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project.. 2) āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Application āđāļĨāļ§āļāļ” Next 3) āļ.āļēāļŦāļ™āļ” Project Name: āđ€āļ›āļ™ BookOnline āđāļĨāļ§āđ€āļĨāļ­āļ Project Location: āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ° āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ§āļāļ” Finish 4) āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 5) āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 6) āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ selectBooks āđāļĨāļ§āļāļ” Finish 7) āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 selectBooks.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.1 8) āļāļ”āļ›16āļĄ Save āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 68.
    68 āļĢāļ›āļ— 10.1 āļ•āļ§āļ­āļĒ-āļēāļ‡āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp Listing āļ— 10.1 āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <%@taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <sql:setDataSource var="ds" driver="com.mysql.jdbc.Driver" url="jdbc:mysql:///test" user="root" password="root" /> <sql:query var="rs" dataSource="${ds}"> select * from books </sql:query> <h1>Select Books</h1> <form action="ProcessSelection" method="POST"> <table border="1"> <thead> <tr> <th></th> <th> Title </th> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 69.
    69 <th> Author </th> <th> Price</th> </tr> </thead> <tbody> <c:forEach var="book" items="${rs.rows}"> <tr> <td><input type="checkbox" name="isbn" value="${book.isbn}" /> </td> <td>${book.title}</td> <td>${book.author}</td> <td>${book.price}</td> </tr> </c:forEach> </tbody> </table> <input type="submit" value="Select" /> </form> </body> </html> 10.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1Book.java āđ‚āļ›āļĢāđāļāļĢāļĄ Book.java āđ€āļ›āļ™āļ„āļĨāļēāļŠāļ—āļĄ attribute āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš table āļ—āļŠāļ­ books āđ‚āļ”āļĒāļĄ source code āļ”āļ‡ Listing āļ— 10.2 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class.. 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ Book.java āđāļĨāļ° Package āđ€āļ›āļ™ model āđāļĨāļ§āļāļ” Next 3. āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļ™ āđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookActionForm āļ”āļ‡āļ™ String isbn; String title; String author; double price; 4. āļ—.āļēāļāļēāļĢ encapsulate attribute (āļ.āļēāļŦāļ™āļ” attribute āđƒāļŦāđ€āļ›āļ™ private āđāļĨāļ° āļŠāļĢāļēāļ‡āđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter) āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ Refactor > Encapsulate Field.. 5. āļāļ”āļ›16āļĄ Refactor āđāļĨāļ§āļāļ”āļ›16āļĄ Save Listing āļ— 10.2 āđ‚āļ›āļĢāđāļāļĢāļĄ Book.java package model; public class Book { private String isbn; private String author; private String title; private double price; āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 70.
    70 public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } } 10.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1Cart.java āđ‚āļ›āļĢāđāļāļĢāļĄ Cart.java āđ€āļ›āļ™āļ„āļĨāļēāļŠāļ—āļ—.āļēāļŦāļ™āļēāļ—āļ„āļĨāļēāļĒāļāļš shopping cart āđ€āļžāļ­āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” Book āļ•āļēāļĄ āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļ āđ‚āļ”āļĒāļ­āļēāļ‡āļ­0āļ‡āļˆāļēāļāļŦāļĄāļēāļĒāđ€āļĨāļ‚ isbn āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāļ„āļ™āļĢāļēāļĒāļŠāļ­āļŦāļ™āļ‡āļŠāļ­āļˆāļēāļ table āļ—āļŠāļ­ books āļŦāļĄāļēāļĒāđ€āļĨāļ‚ isbn āļ—āļ­āļēāļ‡āļ­0āļ‡ āđāļĨāļ§āļˆāļ°āđāļ›āļĨāļ‡āđ€āļ›āļ™āļ­āļ­āļ›āđ€āļˆāļ„āļŠāļ™0āļ” books āļ/āļ­āļ™āļˆāļ°āđƒāļŠ/āļĨāļ‡āđƒāļ™ cart āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 10.3 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class.. 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ Cart.java āđāļĨāļ° Package āđ€āļ›āļ™ model āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Cart.java āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.3 4. āļāļ”āļ›16āļĄ Save āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 71.
    71 Listing āļ— 10.3āđ‚āļ›āļĢāđāļāļĢāļĄ Cart.java package model; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.LinkedList; import java.util.List; public class Cart { List <Book> books; Connection conn; public void addItem(String isbn) { try { Statement stmt = conn.createStatement(); String sql = "SELECT * from books where isbn='" + isbn + "'"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()) { Book bk = new Book(); bk.setIsbn(isbn); bk.setAuthor(rs.getString("author")); bk.setTitle(rs.getString("title")); bk.setPrice(rs.getFloat("price")); books.add(bk); } }catch (SQLException ex) { ex.printStackTrace(); } } public List<Book> getBooks() { return books; } public Cart(Connection conn) { this.conn = conn; books = new LinkedList<Book>(); } public void removeItem(String isbn) { books.remove(isbn); } } 10.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java āđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servlet āļ—āļ—.āļēāļŦāļ™āļēāļ—āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļŠāļ­ isbn āļ‹,āļ‡āļŠ/āļ‡āļĄāļēāļˆāļēāļāļŦāļ™āļē Web Form āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ selectBooks.java āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ getParameterValues āļ”āļ‡āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 72.
    72 String[] isbn = request.getParameterValues("isbn"); āļˆāļēāļāļ™āļ™āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļ session āđ€āļžāļ­āđ€āļĢāļĒāļ attribute āļ—āļŠāļ­ cart āļ­āļ­āļāļĄāļēāđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ HttpSession session = request.getSession(true); Cart cart = (Cart) session.getAttribute("cart"); āļāļĢāļ“āļ—āđ„āļĄ/āļžāļš attribute āļ—āļŠāļ­ cart āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļāļš attribute āļ™āļ‚,āļ™āđƒāļŦāļĄ/āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ if (cart == null) { ServletContext ctx = getServletContext(); Connection conn = (Connection) ctx.getAttribute("connection"); cart = new Cart(conn); session.setAttribute("cart", cart); } āđ€āļĄāļ­āđ„āļ”āļ„/āļē attribute āļ—āļŠāļ­ cart āļĄāļēāđāļĨāļ§ āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđ€āļāļšāļĢāļēāļĒāļāļēāļĢāļŠāļ­ isbn āļ‚āļ­āļ‡āļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļāļĨāļ‡āđƒāļ™ āļ­āļ­āļ›āđ€āļˆāļ„āļ‚āļ­āļ‡ cart āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ for (int i = 0; i < isbn.length; i++) { cart.addItem(isbn[i]); } āđ€āļĄāļ­āļŠ0āļ™āļŠ1āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđ„āļ›āđ€āļĢāļĒāļ url āļ—āļŠāļ­ view.cart āļ•/āļ­āđ„āļ› āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ RequestDispatcher pg = request.getRequestDispatcher("viewCart.jsp"); pg.forward(request, response) āļŠ.āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” processRequest āļ”āļ‡ Listing āļ— 10.4 āđāļĨāļ°āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™ āļ”āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Servlet.. 2. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ ProcessSelection.java āđāļĨāļ° Package āđ€āļ›āļ™ controller āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” URL Pattern(s) āđ€āļ›āļ™ /ProcessSelection āļ”āļ‡āļĢ#āļ› āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡ ProcessSelection.java āļ”āļ‡ Listing āļ— 10.4 āđāļĨāļ§āđ€āļĨāļ­āļāļ„.āļē āļŠāļ‡ Save Listing āļ— 10.4 āđ€āļĄāļ˜āļ­āļ” processRequest() āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ ProcessSelection.java protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 73.
    73 String[] isbn = request.getParameterValues("isbn"); HttpSession session = request.getSession(true); Cart cart = (Cart) session.getAttribute("cart"); if (cart == null) { ServletContext ctx = getServletContext(); Connection conn = (Connection) ctx.getAttribute("connection"); cart = new Cart(conn); session.setAttribute("cart", cart); } for (int i = 0; i < isbn.length; i++) { cart.addItem(isbn[i]); } cart = (Cart) session.getAttribute("cart"); RequestDispatcher pg = request.getRequestDispatcher("viewCart.jsp"); pg.forward(request, response); out.close(); } 10.5 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢ āđāļāđ„āļ‚āđ„āļŸāļĨ5 context.xml āđāļĨāļ° web.xml āļ”āļ‡āđāļšāļšāļāļāļŦāļ”āļ”āļ‡āļāļĨ/āļēāļ§ 10.6 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāđ€āļĨāļ­āļ āđāļĨāļ°āđ€āļāļšāđƒāļ™ shopping cart āļ­āļ­āļāļĄāļēāđāļŠāļ”āļ‡ āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđƒāļŠ Expression Language āđ€āļžāļ­āđāļŠāļ”āļ‡āļ‚āļ­āļĄ#āļĨāđƒāļ™ session āļ”āļ‡ Listing āļ— 10.5 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” BookOnline āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > JSP 2. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ viewCart āđāļĨāļ§āļāļ” Finish 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 viewCart.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 10.5 4. āļāļ”āļ›16āļĄ Save Listing āļ— 10.5 āđ‚āļ›āļĢāđāļāļĢāļĄ viewCart.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 74.
    74 <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Cart</title> </head> <body> <h1>Selected Books in Cart</h1> <c:forEach var="book" items="${sessionScope.cart.books}"> ${book.title} <br> </c:forEach> </body> </html> 10.7 āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļēāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđ€āļˆāļ„ BookOnline 2. āļ—.āļēāļāļēāļĢ Run āđ‚āļ›āļĢāđ€āļˆāļ„ BookOnline 3. āļ—āļ”āļĨāļ­āļ‡āļĢāļ™ url āļ—āļŠāļ­ http://localhost:8080/BookOnline/selectBooks.jsp āđāļĨāļ§āļ—āļ”āļĨāļ­āļ‡āđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢ āļŦāļ™āļ‡āļŠāļ­ āđāļĨāļ§āļāļ”āļ›16āļĄ Select 4. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļĢāļĒāļ url āļ—āļŠāļ­ http://localhost:8080/BookOnline/processSelection āđ€āļžāļ­āđāļŠāļ”āļ‡āļĢāļēāļĒāļāļēāļĢ āđƒāļ™ Cart āļ”āļ‡āļĢ#āļ›āļ— 10.2 5. āļ—āļ”āļĨāļ­āļ‡āļāļĨāļšāđ„āļ›āđ€āļĨāļ­āļāļĢāļēāļĒāļāļēāļĢāļŦāļ™āļ‡āļŠāļ­āđ€āļž0āļĄāđ€āļ•0āļĄ āļŦāļĢāļ­āđ€āļĢāļĒāļ url āļ—āļŠāļ­ http://localhost:8080/BookOnline/viewCart.jsp āđ‚āļ”āļĒāļ•āļĢāļ‡āđāļĨāļ§āļŠāļ‡āđ€āļāļ•āļœāļĨāļĨāļžāļ˜5 āļĢāļ›āļ— 10.2 āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āļ­āļĄāļĨāđƒāļ™ Cart āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 75.
    75 Exercise 11 āļāļēāļĢāļŠāļĢāļēāļ‡ Custom Tags āļŠ%āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ€āļžāļ­āļŠāļĢāļēāļ‡ custom tag āđ‚āļ”āļĒāļˆāļ°āđ€āļĢ0āļĄāđāļŠāļ”āļ‡āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ āļ•āļ‡āđāļ•/āļāļēāļĢāđ€āļ‚āļĒāļ™ JSP āđ‚āļ”āļĒāđ„āļĄ/āđƒāļŠ custom tags āđāļĨāļ§āļŠāļĢāļēāļ‡ tag āđ‚āļ”āļĒāđƒāļŠ Tag Handler āđāļĨāļ°āļ‚āļ™āļ•āļ­āļ™āļŠ1āļ”āļ—āļēāļĒāļˆāļ°āđ€āļ›āļ™āļāļēāļĢ āļŠāļĢāļēāļ‡ tag āđ‚āļ”āļĒāđƒāļŠ Tag File āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄāļ§/āļē Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡ āđ‚āļ”āļĒāļ— xxxx āļ„āļ­āļŠāļ­āļ—āļŠ/āļ‡āļĄāļēāļ—āļēāļ‡āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļŠāļ­ name 11.1 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđ€āļ‚āļĒāļ™āđ‚āļ”āļĒāđƒāļŠ scriptlet āđ€āļĢāļĒāļāļ„.āļēāļŠāļ‡āļ āļēāļĐāļēāļˆāļēāļ§āļē āđ‚āļ”āļĒāļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđƒāļ™ āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ‚āļ­āļ‡āļ­āļ­āļ›āđ€āļˆāļ„ request āļ—āļŠāļ­ name āđāļĨāļ§āļˆāļ°āļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡ āđ‚āļ”āļĒ āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ sourcecode āļ”āļ‡ Listing āļ— 11.1 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Project Name: āđ€āļ›āļ™ JSPDemo āđāļĨāļ§āđ€āļĨāļ­āļ Project Location: āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ° āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āđāļĨāļ§āļāļ” Finish 4. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 6. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ hello āđāļĨāļ§āļāļ” Finish 7. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 hello.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.1 8. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ JSPDemo 9. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Projects āđ€āļĨāļ­āļāđ„āļŸāļĨ5 hello.jsp āđāļĨāļ§āđ€āļĨāļ­āļ Run āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāđƒāļŦāļŠ/āļ‡āļœ/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļēāļ‡ URL āđ€āļŠ/āļ™ http://localhost:8080/JSPDemo/hello.jsp?name=Thanisa āđ€āļĢāļēāļˆāļ°āđ„āļ”āļœāļĨāļāļēāļĢāļĢāļ™āļ”āļ‡āļĢ#āļ›āļ— 11.1 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 76.
    76 āļĢāļ›āļ— 11.1 āļœāļĨāļĨāļžāļ˜!āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp Listing āļ— 11.1 āđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Demo</title> </head> <body> <h1>JSP Demo</h1> <% String name = request.getParameter("name"); %> <% for (int i = 0; i < 10; i++) { %> Hello <%= name %> <br> <% } %> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 77.
    77 11.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āļ—.āļēāļ‡āļēāļ™āđāļšāļšāđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp āđāļ•/āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āđ€āļ‚āļĒāļ™āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ custom tag āļ—āļŠāļ­ nameTag āļāļēāļĢāļŠāļĢāļēāļ‡ custom Tag āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļ āļĢāļĄāļŦāļĨāļēāļĒāđ† āļŠ/āļ§āļ™āļ”āļ‡āļ™ 11.2.1 āļŠāļĢāļēāļ‡ Tag Library Descriptor āđ„āļŸāļĨ5āļ™āļˆāļ°āđƒāļŠāđ€āļāļš āļĢāļēāļĒāļŠāļ­ Tag āļ•/āļēāļ‡āđ† āļ—āļĄāļ­āļĒ#/āđ€āļžāļ­āļŠāļēāļĄāļēāļĢāļ–āļ™.āļē tag āļ•/āļēāļ‡āđ† āļĄāļēāđƒāļŠāđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ‚āļ”āļĒāđƒāļŠāļ„.āļēāļŠāļ‡ <%@taglib ...%> āļāļēāļĢāļŠāļĢāļēāļ‡ Tag Library Descriptor āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag Library Descriptor āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” TLD Name: āđ€āļ›āļ™ MyTags āđāļĨāļ°āļ„/āļē Folder āđ€āļ›āļ™ WEB-INFtlds āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ† āđƒāļŦāđ€āļ›āļ™āļ•āļēāļĄāļ—āļ•āļ‡ āđ„āļ§āļ”āļ‡āļĢ#āļ›āļ— 11.2 āđāļĨāļ§āļāļ” Finish āļĢāļ›āļ— 11.2 āļāļēāļĢāļ#āļēāļŦāļ™āļ” Tag Library Descriptor 4. āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ—āļŠāļ­ MyTags.tld āļ—āļ­āļĒ#/āđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢ5 Web PagesWEB-INFtlds āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 78.
    78 11.2.2 āļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 Tag Handler āđ„āļŸāļĨ5 Tag Handler āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļēāļ—āļžāļ’āļ™āļēāļ‚,āļ™āđ€āļžāļ­āļĢāļ°āļš1āļ§/āļē āđ€āļĄāļ­āđ€āļĢāļĒāļāđƒāļŠ tag āđāļĨāļ§āļˆāļ°āļ•āļ­āļ‡āļ—.āļēāļ„.āļēāļŠāļ‡ āļ­āļĒ/āļēāļ‡āđ„āļĢ āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āļŠāļ­ Tag āđ€āļ›āļ™ NameTag āđāļĨāļ°āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļēāļ§āļēāđ€āļ›āļ™ NameTagHandler āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ° āļ—.āļēāļāļēāļĢāļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5 name āđāļĨāļ°āļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxxx āļˆ.āļēāļ™āļ§āļ™āļŠ0āļšāļ„āļĢāļ‡ āļāļēāļĢāļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 Tag Handler āļˆāļ°āļĄ āļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag Handler āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ NameTagHandler āļ„/āļē Package āđ€āļ›āļ™ tags āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ† āđƒāļŦāđ€āļ›āļ™āļ•āļēāļĄāļ—āļ•āļ‡āđ„āļ§ āļ”āļ‡āļĢ#āļ›āļ— 11.3 āđāļĨāļ§āļāļ” Next āļĢāļ›āļ— 11.3 āļāļēāļĢāļ#āļēāļŦāļ™āļ”āļ„āļē Tag Handler 4. āļāļ”āļ›16āļĄ Browse āđ€āļĨāļ­āļ TLD File: āđ€āļ›āļ™ MyTags.tld 5. āļāļ”āļ›16āļĄ New āđ€āļžāļ­āđ€āļž0āļĄ Attribute 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add New Attribute āļ.āļēāļŦāļ™āļ” Attribute Name: āđ€āļ›āļ™ name āļ„/āļē Attribute Type āđ€āļ›āļ™ java.lang.String āđāļĨāļ°āđ€āļĨāļ­āļ required Attribute āđāļĨāļ§āļāļ” Next 7. āđ€āļĢāļēāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āļ”āļ‡āļĢ#āļ›āļ— 11.4 āđāļĨāļ§āļāļ” Finish 8. āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5 NameTagHandler.java āđƒāļŦāđ€āļ‚āļĒāļ™ source code āļ”āļ‡ Listing āļ— 11.2 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 79.
    79 āļĢāļ›āļ— 11.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ‚āļ­āļĄāļĨ TLD āļ‚āļ­āļ‡āđ„āļŸāļĨ! NameTagHandler Listing āļ— 11.2 āđ‚āļ›āļĢāđāļāļĢāļĄ NameTagHandler.java package tags; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.JspWriter; import javax.servlet.jsp.JspException; public class NameTagHandler extends SimpleTagSupport { /** * Initialization of name property. */ private java.lang.String name; /**Called by the container to invoke this tag. * The implementation of this method is provided by the tag library developer, * and handles all tag processing, body iteration, etc. */ public void doTag() throws JspException { JspWriter out=getJspContext().getOut(); try { JspFragment f=getJspBody(); if (f != null) f.invoke(out); for (int i = 0; i < 10; i++) { out.println("Hello " + name + "<br>"); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 80.
    80 } } catch (java.io.IOException ex) { throw new JspException(ex.getMessage()); } } public void setName(java.lang.String name) { this.name = name; } } 11.2.3 āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Tag āļ—āļŠāļ­ NameTag āđ‚āļ”āļĒāļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 3 āļāļēāļĢ āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloTag āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloTag.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.3 5. āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄ āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp Listing āļ— 11.3 āđ‚āļ›āļĢāđāļāļĢāļĄ helloTag.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="/WEB-INF/tlds/MyTags" prefix="myTags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Demo</title> </head> <body> <h1>JSP Demo</h1> <myTags:NameTagHandler name="Thanisa" /> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 81.
    81 11.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āļ—.āļēāļ‡āļēāļ™āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļœ/āļēāļ™āļĄāļēāđāļ•/āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļ āđƒāļŠ JSP Standard Tag Library āđƒāļ™āļāļēāļĢāļž0āļĄāļž5āļ‚āļ­āļ„āļ§āļēāļĄ Hello xxx āļŠ0āļšāļ„āļĢāļ‡ āđāļ—āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™āļ„.āļēāļŠāļ‡ scriptlet āđ‚āļ”āļĒ āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 11.4 āđāļĨāļ°āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloJSTL āđāļĨāļ§āļāļ” Finish 4. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” JSP Demo āđāļĨāļ§āđ€āļĨāļ­āļāđ‚āļŦāļ™āļ” Libraries āļ„āļĨ0;āļāļ‚āļ§āļēāđ€āļĨāļ­āļ Add Library 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Library āđ€āļĨāļ­āļāđ„āļŸāļĨ5 JSTL 1.1 āđāļĨāļ§āļāļ”āļ›16āļĄ Add Library 6. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloJSTL.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.4 7. āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄ āļ”āļĒāļ.āļēāļŦāļ™āļ” URL āđ€āļ›āļ™ http://localhost:8080/JSPDemo/helloJSTL.jsp? name=Thanisa āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp Listing āļ— 11.4 āđ‚āļ›āļĢāđāļāļĢāļĄ helloJSTL.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Demo</title> </head> <body> <h1>JSP Demo</h1> <c:forEach var="i" begin="1" end="10"> Hello ${param.name} <br> </c:forEach> </body> </html> 11.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp JSP 2.0 āļ­āļ™1āļāļēāļ•āđƒāļŦāđ€āļĢāļēāļŠāļĢāļēāļ‡ custom tag āđ‚āļ”āļĒāļāļēāļĢāđ€āļ‚āļĒāļ™āđ„āļŸāļĨ5 html āļŦāļĢāļ­ JSP āđāļ—āļ™āļ—āļˆāļ°āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ āļ āļēāļĐāļēāļˆāļēāļ§āļē āļ‹,āļ‡āļ—.āļēāđƒāļŦāļ‡/āļēāļĒāļ•/āļ­āļāļēāļĢāļžāļ’āļ™āļē āđƒāļ™āļ—āļ™āđ€āļĢāļēāļˆāļ°āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļ‹,āļ‡āļˆāļ°āļ—.āļēāļāļēāļĢāđ€āļĢāļĒāļāđƒāļŠ custom tag āļ—āļŠāļ­ nameTagFile āļ—āđ€āļ›āļ™ tag file āļ‹,āļ‡āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 82.
    82 11.4.1 āļŠāļĢāļēāļ‡ Tag File āđ„āļŸāļĨ5āļ™āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ™āđ€āļ›āļ™āļ•āļ§āļˆāļ”āļāļēāļĢ Tag āđ‚āļ”āļĒāđ€āļ‚āļĒāļ™āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Tag File āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Tag File Name: āđ€āļ›āļ™ NameTagFile 4. āđ€āļĨāļ­āļ Add Tag File to Tag Library Descriptor āđāļĨāļ§āđ€āļĨāļ­āļāđ„āļŸāļĨ5 MyTags.tld āļ”āļ‡āļĢ#āļ›āļ— 11.5 āđāļĨāļ§āļāļ” Finish āļĢāļ›āļ— 11.5 āļāļēāļĢāļ#āļēāļŦāļ™āļ”āļ„āļē Tag File 5. āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ—āļŠāļ­ NameTagFile.tag āļ—āļ­āļĒ#/āđƒāļ™āđ‚āļŸāļĨāđ€āļ”āļ­āļĢ5 Web Pages.WEB-INF.tags 6. āđ€āļ‚āļĒāļ™ source code āļ”āļ‡ Listing āļ— 11.5 Listing āļ— 11.5 āđ‚āļ›āļĢāđāļāļĢāļĄ NameTagFile.tag <%@tag description="Tag Name" pageEncoding="UTF-8"%> <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <c:forEach var="i" begin="1" end="10"> Hello ${param.name} <br> </c:forEach> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 83.
    83 11.4.2 āđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļˆāļ°āđ€āļĢāļĒāļāđƒāļŠ Tag āļ—āļŠāļ­ NameTagFile āđ‚āļ”āļĒāļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— āļāļēāļĢāļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSPDemo āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ helloTagFile āđāļĨāļ§āļāļ” Finish 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5 helloTagFile.jsp āđƒāļŦāđ€āļ›āļ™āđ„āļ›āļ•āļēāļĄ Listing āļ— 11.6 5. āļ—.āļēāļāļēāļĢ run āđ‚āļ›āļĢāđāļāļĢāļĄāđ‚āļ”āļĒāļ.āļēāļŦāļ™āļ” URL āđ€āļ›āļ™ http://localhost:8080/JSPDemo/helloTagFile.jsp? name=Thanisa āļˆāļ°āđ„āļ”āļœāļĨāļĨāļžāļ˜5āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ hello.jsp Listing āļ— 11.6 āđ‚āļ›āļĢāđāļāļĢāļĄ helloTagFile.jsp <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <%@taglib uri="/WEB-INF/tlds/MyTags" prefix="myTags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Demo</title> </head> <body> <h1>JSP Demo</h1> <myTags:NameTagFile /> </body> </html> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 84.
    84 Exercise 12 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ Strut Framework āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠ Struts Framework āđ‚āļ”āļĒāļāļēāļĢ āļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āđƒāļŦāļŠ/āļ§āļ™āļ‚āļ­āļ‡ Web User Interface āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļš āļ‚āļ­āļĄ#āļĨ (Validate Data) āļ—āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ§0āļ˜āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āđ‚āļ”āļĒāđƒāļŠ Struts Framework āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ StrutDBApp 2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm 3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ addBook.jsp 4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java 5. āđāļāđ„āļ‚āđ„āļŸāļĨ5 ApplicationResource.properties 6. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html 7. āđāļāđ„āļ‚āđ„āļŸāļĨ5 Struts-Config.xml 12.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ WebBase Database āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄ āļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ StrutDBApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ° āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āļˆāļēāļāļ™āļ™āļāļ” Next 4. āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Struts āđāļĨāļ°āđ€āļĨāļ­āļ Add Strut TLDs āļˆāļēāļāļ™āļ™āļāļ” Finish 12.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm.java Struts Framework āļˆāļ°āļĄāđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļˆāļ°āļ•āļ­āļ‡āļžāļ’āļ™āļēāļ­āļĒ#/āļŠāļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļ„āļ­ FormBean āđāļĨāļ° Action Class āđ‚āļ”āļĒāļŠ/āļ§āļ™ FormBean āļˆāļ°āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļœ#āđƒāļŠāļˆāļ°āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđƒāļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ āļŠ/āļ§āļ™ Action Class āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļ›%āļ­āļ™āļĄāļēāđ€āļžāļ­āļ›āļĢāļ°āļĄāļ§āļĨāļœāļĨāļ•/āļ­āđ„āļ› āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 85.
    85 āđ‚āļ›āļĢāđāļāļĢāļĄ FormBean āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļĄāļ„/āļē attribute āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāļŠāļ­āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļˆāļ°āļ›%āļ­āļ™ āđāļĨāļ°āļˆāļ°āļĄāđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš attribute āļ”āļ‡āļāļĨ/āļēāļ§ āļ™āļ­āļāļˆāļēāļāļ™āļ­āļēāļˆāļĄāđ€āļĄāļ˜āļ­āļ”āđƒāļ™āļāļēāļĢ validate āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āđƒāļŦāļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāđ€āļ‡āļ­āļ™āđ„āļ‚āļ‚āļ­āļ‡āļ‚āļ­āļĄ#āļĨāļ—āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āļ.āļēāļŦāļ™āļ”āđ„āļ§ āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ„āļŸāļĨ5āļŠāļ­ addBook.jsp āđ€āļ›āļ™āđ€āļ§āļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢ5āļĄāļŠ.āļēāļŦāļĢāļšāļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāļŦāļ™āļ‡āļŠāļ­āđƒāļŦāļĄ/āđ€āļ‚āļē āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ#āļĨ books āļ‹,āļ‡āļĄāļĨāļāļĐāļ“āļ°āļ”āļ‡āļĢ#āļ›āļ— 12.1 āļĢāļ›āļ— 12.1 āđ€āļ§āļšāđ€āļžāļˆāļ—āđƒāļŠāđāļŠāļ”āļ‡āļŸāļ­āļĢ!āļĄāļŠāļēāļŦāļĢāļšāļ›+āļ­āļ™āļ‚āļ­āļĄāļĨ āđāļĨāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļœ#āđƒāļŠāļ•āļ­āļ‡āļ›%āļ­āļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļĄāļŠāļ­āđāļĨāļ°āđ€āļ‡āļ­āļ™āđ„āļ‚āļ•/āļēāļ‡āđ†āļ”āļ‡āļ™ â— isbn āđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļĢāļ°āļŦāļ§/āļēāļ‡ 3-10 āļ•āļ§ â— titleāđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļ­āļĒ/āļēāļ‡āļ™āļ­āļĒ 3 āļ•āļ§ â— author āđ€āļ›āļ™āļŠāļ™0āļ” String āļ—āļĄāļ•āļ§āļ­āļāļĐāļĢāļ­āļĒ/āļēāļ‡āļ™āļ­āļĒ 5 āļ•āļ§ â— price āđ€āļ›āļ™āļŠāļ™0āļ” float āļ—āļĄāļ„/āļēāđ€āļ›āļ™āļĄāļēāļāļāļ§/āļē 0.0 āđāļšāļšāļāļāļŦāļ”āļ™āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ FormBean āļĄāļŠāļ­āļ§/āļē BookActionForm.java āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļē āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Struts āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Struts ActionForm Bean āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ BookActionForm āđāļĨāļ° Package āđ€āļ›āļ™ com.myapp.struts āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ#āļ›āļ— 12.2 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 86.
    86 āļĢāļ›āļ— 12.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Struts ActionForm Bean 4. āļāļ” Finish āđāļĨāļ§āđ€āļ‚āļĒāļ™ Source code āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļ™ 5. āđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookActionForm āļ”āļ‡āļ™ String isbn; String title; String author; float price; 6. āļ—.āļēāļāļēāļĢ encapsulate attribute (āļ.āļēāļŦāļ™āļ” attribute āđƒāļŦāđ€āļ›āļ™ private āđāļĨāļ° āļŠāļĢāļēāļ‡āđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter) āđ‚āļ”āļĒāļāļēāļĢāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ Refactor > Encapsulate Field.. 7. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡ Fields āļ•/āļēāļ‡āđ†āđƒāļŦāđ€āļĨāļ­āļāļ”āļ‡āļĢ#āļ›āļ— 12.3 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 87.
    87 āļĢāļ›āļ— 12.3 āļŦāļ™āļēāđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields 8. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields āđƒāļŦāļ„āļ‡āļ„/āļēāļ—āđ€āļĨāļ­āļāđ„āļ§āļ—1āļ Field āļ•āļēāļĄāļ—āđ‚āļ›āļĢāđāļāļĢāļĄāļ.āļēāļŦāļ™āļ”āđ„āļ§āđāļĨāļ§āļāļ”āļ›16āļĄ Refactor 9. āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđ€āļž0āļĄ source code āđ‚āļ”āļĒāļ.āļēāļŦāļ™āļ”āđƒāļŦ field āļ•/āļēāļ‡āđ†āļĄ access modifier āđ€āļ›āļ™ private āđāļĨāļ§āđ€āļž0āļĄ āđ€āļĄāļ˜āļ­āļ” setter āđāļĨāļ° getter 10. āđāļāđ„āļ‚āđ‚āļ„āļ”āđƒāļ™āđ€āļĄāļ˜āļ­āļ” validate āļ”āļ‡āļ™ public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (getIsbn() == null || getIsbn().length() < 3 || getIsbn().length() > 10) { errors.add("isbn", new ActionMessage("error.isbn.required")); } if (getTitle() == null || getTitle().length() < 3) { errors.add("title", new ActionMessage("error.title.required")); } if (getAuthor() == null || getAuthor().length() < 5) { errors.add("author", new ActionMessage("error.author.required")); } if (getPrice() < 0) { errors.add("price", new ActionMessage("error.price.required")); } return errors; } 11. āļāļ”āļ›16āļĄ Save āļˆāļ°āđ„āļ”āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡ Listing āļ— 12.1 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 88.
    88 Listing āļ— 12.1āđ‚āļ›āļĢāđāļāļĢāļĄ BookActionForm.java package com.myapp.struts; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionMapping; import org.apache.struts.action.ActionMessage; public class BookActionForm extends org.apache.struts.action.ActionForm { private String isbn; private String title; private String author; private float price; private String name; public String getName() { return name; } public void setName(String string) { name = string; } public BookActionForm() { super(); // TODO Auto-generated constructor stub } public ActionErrors validate(ActionMapping mapping, HttpServletRequest request) { ActionErrors errors = new ActionErrors(); if (getIsbn() == null || getIsbn().length() < 3 || getIsbn().length() > 10) { errors.add("isbn", new ActionMessage("error.isbn.required")); } if (getTitle() == null || getTitle().length() < 3) { errors.add("title", new ActionMessage("error.title.required")); } if (getAuthor() == null || getAuthor().length() < 5) { errors.add("author", new ActionMessage("error.author.required")); } if (getPrice() < 0) { errors.add("price", new ActionMessage("error.price.required")); } return errors; } public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 89.
    89 } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } } 12.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđƒāļŠ Tags āļ‚āļ­āļ‡ Strut Framework āđ€āļžāļ­āđāļŠāļ”āļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ āļŠ.āļēāļŦāļĢāļšāļāļēāļĢāļāļĢāļ­āļāļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other... 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Web āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ† āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSP āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ AddBook āđāļĨāļ§āļāļ” Finish 4. āđ€āļ‚āļĒāļ™ Source code āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļ•āļēāļĄ Listing āļ— 12.2 āđāļĨāļ§āļ›16āļĄ Save Listing āļ— 12.2 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp <%@taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %> <%@taglib uri="http://struts.apache.org/tags-html" prefix="html" %> <%@page contentType="text/html"%> <%@page pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 90.
    90 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title><bean:message key="title.message"/> </title> </head> <body> <h1><bean:message key="title.message"/></h1> <html:errors/> <html:form action="AddBook"> ISBN : <html:text property="isbn" size="15"/> <BR> Title : <html:text property="title" size="50"/> <BR> Author : <html:text property="author" size="50"/> <BR> Price : <html:text property="price" size="10"/> <BR> <html:submit value="Add" /> </html:form> </body> </html> 12.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookAction.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ ActionForm āļ‚āļ­āļ‡ Struts Framework āđ€āļžāļ­āļ­/āļēāļ™āļ‚āļ­āļĄ#āļĨ āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāļˆāļēāļāļŦāļ™āļē AddBook.jsp āđāļĨāļ§āđ€āļ‚āļĒāļ™āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ table āļ—āļŠāļ­ Books āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” StrutDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New => Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Struts āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Struts Action āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name: āđ€āļ›āļ™ AddBookAction āđ€āļĨāļ­āļ Package: āđ€āļ›āļ™ com.myapp.struts āđāļĨāļ°āļ.āļēāļŦāļ™āļ” Action Path : āđ€āļ›āļ™ /AddBook āļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļ New Struts Action āļ”āļ‡āļĢ#āļ›āļ— 12.4 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 91.
    91 āļĢāļ›āļ— 12.4 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Struts Action 4. āđāļĨāļ§āļāļ” Next āđƒāļ™āļŦāļ™āļēāļ–āļ”āđ„āļ›āļ‚āļ­āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ āđƒāļŦāđ€āļĨāļ­āļ Input Resource : āđ€āļ›āļ™ /AddBook.jsp āđāļĨāļ§āļāļ” Finish 5. āđƒāļŦāđāļāđ„āļ‚ source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” execute() āļ”āļ‡āļ™ public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { BookActionForm bkForm = (BookActionForm) form; String isbn = bkForm.getIsbn(); String title = bkForm.getTitle(); String author = bkForm.getAuthor(); float price = bkForm.getPrice(); try { ServletContext context = getServlet().getServletContext(); Connection conn = (Connection) context.getAttribute("connection"); Statement stmt = conn.createStatement(); String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" + author +"',"+price +")"; stmt.executeUpdate(sql); return mapping.findForward(SUCCESS); }catch (SQLException ex) { System.out.println("Error " + ex); } return null; } 6. āļāļ”āļ›16āļĄ Save āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 92.
    92 12.5 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ' ApplicationResource.properties āđ„āļŸāļĨ5 ApplicationResource.properties āđ€āļ›āļ™āđ„āļŸāļĨ5āļ—āđ‚āļ›āļĢāđāļāļĢāļĄ Struts āļˆāļ°āļ­/āļēāļ™āļ„/āļēāļ„āļ‡āļ—āļ•/āļēāļ‡āđ†āļ—āđ€āļĢāļēāļ.āļēāļŦāļ™āļ”āļ‚,āļ™ āļ‹,āļ‡āđƒāļ™āļ—āļ™āđ„āļ”āļ.āļēāļŦāļ™āļ”āļ‚āļ­āļ„āļ§āļēāļĄāļ—āđ€āļāļĒāļ§āļāļš error message āđāļĨāļ° title āđ„āļ§ āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› StrutDBWeb > Source Packages > com.myapp.struts 2. āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāđ€āļĨāļ­āļāđ„āļŸāļĨ5 ApplicationResource.properties 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđƒāļŦāđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™ error.isbn.required=Please enter correct ISBN error.title.required=Please enter correct Title error.author.required=Please enter correct author error.price.required=Price must greater than zero title.message=Add a new Book 4. āļāļ”āļ›16āļĄ Save 12.6 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢ āđāļāđ„āļ‚āđ„āļŸāļĨ5 context.xml āđāļĨāļ° web.xml āļ”āļ‡āđāļšāļšāļāļāļŦāļ”āļ”āļ‡āļāļĨ/āļēāļ§ āđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĢāļĒāļšāļĢāļ­āļĒ āđāļĨāļ§ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ source code āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ 12.7 āļāļēāļĢāļžāļ’āļ™āļēāđ„āļŸāļĨ' Struts-config.xml āđ„āļŸāļĨ5 Struts-config.xml āđ€āļ›āļ™āđ„āļŸāļĨ5āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„1āļĄāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Struts āļ‹,āļ‡āđƒāļ™āļ—āļ™āļˆāļ°āđƒāļŠāđƒāļ™āļāļēāļĢ āļ.āļēāļŦāļ™āļ”āļĨ.āļēāļ”āļšāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āļš (Navigation Rule) āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ‚āļĒāļēāļĒāđāļ—āļ› StrutDBApp > Configuration Files 2. āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāđ€āļĨāļ­āļāđ„āļŸāļĨ5 Struts-config.xml 3. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļ„āļĨ0;āļāļ‚āļ§āļēāđāļĨāļ§āđ€āļĨāļ­āļ Struts > Add Forward 4. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Forward āļ.āļēāļŦāļ™āļ” Forward Name: āđ€āļ›āļ™ success āļŠ/āļ§āļ™ Forward To: āđ€āļ›āļ™ Resource File: /Thankyou.html āđāļĨāļ° Location āđ€āļ›āļ™ Action : /AddBook āđ‚āļ”āļĒāļˆāļ°āđ„āļ”āđ„āļ”āļ­āļ°āļĨāļ­āļāļ”āļ‡āļĢ#āļ› āļ— 12.5 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 93.
    93 āļĢāļ›āļ— 12.5 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Add Forward 5. āļāļ”āļ›16āļĄ Add āđāļĨāļ°āļāļ”āļ›16āļĄ Save āļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđƒāļ™ struts-config.xml āđ€āļž0āļĄāļ‚,āļ™āļĄāļēāļ”āļ‡āļ™ <action-mappings> <action input="/AddBook.jsp" name="BookActionForm" path="/AddBook" scope="session" type="com.myapp.struts.AddBookAction"> <forward name="success" path="/Thankyou.html"/> </action> </action-mappings> 12.8 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ StrutDBApp 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ StrutDBApp āļ—āļ‡āļ™āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļĢāļ™ MySQL Database Server āļ/āļ­āļ™ 3. āđ€āļĨāļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/StrutDBApp/AddBook.jsp āđƒāļŦāđ€āļĢāļē āļ—āļ”āļĨāļ­āļ‡āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļ”āļ‡āļĢ#āļ›āļ— 12.6 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 94.
    94 āļĢāļ›āļ— 12.6 āļ•āļ§āļ­āļĒ-āļēāļ‡āļāļēāļĢāļ›+āļ­āļ™āļ‚āļ­āļĄāļĨāđ€āļ‚āļē Table āļŠāļ­ Books 4. āđ€āļĄāļ­āļāļ”āļ›16āļĄ Add āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ Database 5. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļ‚āļ­āļĄ#āļĨāļ—āļ›%āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāđ„āļ›āļ—āļŦāļ™āļēāļ•/āļēāļ‡ Runtime āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļ āļ„.āļēāļŠāļ‡ View Data.. āļˆāļēāļ Table āļ—āļŠāļ­ Books āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 95.
    95 Exercise 13 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ JSF Framework āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ‚āļ›āļĢāđāļāļĢāļĄāđƒāļ™āļšāļ—āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āļ—āļ‡āļ™āļˆāļ° āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ€āļžāļ­āļ›āļĢāļšāļ›āļĢ1āļ‡āļŠ/āļ§āļ™ Web User Interface āđ‚āļ”āļĒāļˆāļ°āļ—.āļēāđƒāļŦāļœ#āđƒāļŠ āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ° Validate Data āļ—āļ›%āļ­āļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđāļĨāļ°āđ€āļ›āļĨāļĒāļ™āđāļ›āļĨāļ‡āļ§0āļ˜āļāļēāļĢāļ­/āļēāļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āđ‚āļ”āļĒāđƒāļŠ Java Server Faces (JSF) Framework āļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ JSFDBApp 2. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean 3. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Validator 4. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp 5. āļ.āļēāļŦāļ™āļ” Page Navigation 6. āļ.āļēāļŦāļ™āļ” Error Messages 7. āļ.āļēāļŦāļ™āļ” JNDI Name 8. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđāļĨāļ° Thankyou.html 9. āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java 13.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ JSFDBApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ° āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ Apache Tomcat 6.0.18 āļˆāļēāļāļ™āļ™āļāļ” Next 4. āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Java Server Faces āļˆāļēāļāļ™āļ™āļāļ” Finish āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 96.
    96 13.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean JSF Framework āļˆāļ°āđƒāļŠāđ‚āļ›āļĢāđāļāļĢāļĄ Java Bean āđƒāļ™āļāļēāļĢāđ€āļŠāļ­āļĄāđ‚āļĒāļ‡āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļŠ.āļēāļŦāļĢāļšāđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļŦāļĢāļ­ Servlet āļ āļēāļĒāđƒāļ™ Framework āđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java āļ—āļĄāļ„/āļē attribute āļŠāļ­āļ”āļ„āļĨāļ­āļ‡ āļāļšāļŠāļ­āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļˆāļ°āļ›%āļ­āļ™ āđāļĨāļ°āļˆāļ°āļĄāđ€āļĄāļ˜āļ­āļ” getter āđāļĨāļ° setter āļ—āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļš attribute āļ”āļ‡āļāļĨ/āļēāļ§ āļ‹,āļ‡āđƒāļ™āđāļšāļš āļāļāļŦāļ”āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāļœ#āđƒāļŠāļ•āļ­āļ‡āļ›%āļ­āļ™āļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļĄāļŠāļ­āļ•/āļēāļ‡āđ† āļ”āļ‡āļ™ â— isbn āđ€āļ›āļ™āļŠāļ™0āļ” String ● title āđ€āļ›āļ™āļŠāļ™0āļ” String ● author āđ€āļ›āļ™āļŠāļ™0āļ” String ● price āđ€āļ›āļ™āļŠāļ™0āļ” float āļ—āļĄāļ„/āļēāđ€āļ›āļ™āļĄāļēāļāļāļ§/āļē 0.0 āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ JavaServer Faces āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒāđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSF Managed Bean āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ BookBean āđāļĨāļ° Package āđ€āļ›āļ™ bean āļŠ/āļ§āļ™āļ„/āļēāļ­āļ™āđ†āđƒāļŦāļ„āļĨāļ•āļēāļĄāļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āļ”āļ‡ āļĢ#āļ›āļ— 13.1 āđāļĨāļ§āļāļ” Finish āļĢāļ›āļ— 13.1 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē JSF Managed Bean āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 97.
    97 4. āđ€āļ‚āļĒāļ™ source code āđ‚āļ”āļĒāđ€āļž0āļĄ attribute āļ āļēāļĒāđƒāļ™āļ„āļĨāļēāļŠ BookBean āļ”āļ‡āļ™ String isbn; String title; String author; float price; 5. āļ—.āļēāļāļēāļĢ encapsulate attribute āđ‚āļ”āļĒāļ„āļĨ0;āļāļ‚āļ§āļēāļ āļēāļĒāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āļ‚āļ­āļ‡ source code āđāļĨāļ§āđ€āļĨāļ­āļ Refactor > Encapsulate Field.. 6. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Encapsulate Fields āđƒāļŦāļ„āļ‡āļ„/āļēāļ—āđ€āļĨāļ­āļāđ„āļ§āļ—1āļ Field āļ•āļēāļĄāļ—āđ‚āļ›āļĢāđāļāļĢāļĄāļ.āļēāļŦāļ™āļ”āđ„āļ§āđāļĨāļ§āđāļĨāļ§āļāļ”āļ›16āļĄ Refactor 7. āļāļ”āļ›16āļĄ Save āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āļĄ Source code āļ”āļ‡ Listing āļ— 13.1 8. āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āđ€āļŦāļ™āļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ <managed-bean> <managed-bean-name>BookBean</managed-bean-name> <managed-bean-class>bean.BookBean</managed-bean-class> <managed-bean-scope>request</managed-bean-scope> </managed-bean> Listing āļ— 13.1 āđ‚āļ›āļĢāđāļāļĢāļĄ BookBean.java package bean; public class BookBean { private String isbn; private String title; private String author; private float price; public String getIsbn() { return isbn; } public void setIsbn(String isbn) { this.isbn = isbn; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 98.
    98 public void setAuthor(String author) { this.author = author; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } } 13.3 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ PriceValidator.java āđ‚āļ›āļĢāđāļāļĢāļĄ PriceValidator.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSF Validator āļ—āļžāļ’āļ™āļēāļ‚,āļ™āļĄāļēāđ€āļžāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āļ§āļēāļĄāļ–#āļ āļ•āļ­āļ‡āļ‚āļ­āļ‡āļ‚āļ­āļĄ#āļĨāļĢāļēāļ„āļēāļŦāļ™āļ‡āļŠāļ­āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāļ§/āļēāļˆāļ°āļ•āļ­āļ‡āļĄāļ„/āļēāļĄāļēāļāļāļ§/āļē 0.0 āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļ•āļ­āļ‡ implements āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠāļŠāļ­ javax.faces.validator.Validator āđāļĨāļ°āļˆāļ°āļ•āļ­āļ‡āļĄāļāļēāļĢāļ›āļĢāļšāļ›āļĢ'āļ‡āđ„āļŸāļĨ faces- config.xml āđ€āļžāļ­āļĢāļ°āļš1āļŠ!āļ­āļ„āļĨāļēāļŠ PriceValidator āļ§"āļēāđ€āļ›6āļ™ Validator āđāļšāļšāļŦāļ™:!āļ‡ āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļĄ āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Java Class... 2. āļ.āļēāļŦāļ™āļ” Class Name āđ€āļ›āļ™ PriceValidator āđāļĨāļ° Package āđ€āļ›āļ™ validator āđāļĨāļ§āļāļ” Finish 3. āđƒāļŦāđ€āļž0āļĄāļ„.āļēāļŠāļ‡ implements Validator āđƒāļ™āļāļēāļĢāļ›āļĢāļ°āļāļēāļĻāļ„āļĨāļēāļŠ āļ”āļ‡āļ™ public class PriceValidator implements Validator 4. āļāļ” Alt+Shift+F āđ€āļžāļ­āļāļēāļĢ Fix Imports āđ‚āļ”āļĒāđƒāļŦāđ€āļĨāļ­āļāļ„āļĨāļēāļŠ javax.faces.validator.Validator 5. āđƒāļŠ Hint āđ€āļžāļ­āļ—āļˆāļ° implements āđ€āļĄāļ˜āļ­āļ”āļ•/āļēāļ‡āđ†āļ‚āļ­āļ‡āļ­0āļ™āđ€āļ•āļ­āļĢ5āđ€āļŸāļŠ Validator āļ”āļ‡āļĢ#āļ› 6. āđƒāļŦāđāļāđ„āļ‚ source code āđƒāļ™āđ€āļĄāļ˜āļ­āļ” validate() āļ”āļ‡āļ™ public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException { Float priceObj = (Float) value; boolean flag = true; try { float price = priceObj; if (price < 0) { āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 99.
    99 flag = false; } } catch(ArithmeticException ex) { flag = false; } if (!flag) { FacesMessage message = new FacesMessage(); message.setDetail("Price is not valid - The price must greater than 0.0"); message.setSummary("Email not valid - The price must greater than 0.0"); message.setSeverity(FacesMessage.SEVERITY_ERROR); throw new ValidatorException(message); } } 7. āļāļ”āļ›16āļĄ Save 8. āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files āđāļĨāļ§āđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ āļēāļĒāđƒāļ™āđāļ—āļ </faces-config> āļ”āļ‡āļ™ <validator> <validator-id>validator.PriceValidator</validator-id> <validator-class>validator.PriceValidator</validator-class> </validator> 9. āļāļ”āļ›16āļĄ Save 13.4 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄ JSP āļ—āđƒāļŠ Tags āļ‚āļ­āļ‡ JSF Framework āđ€āļžāļ­āđāļŠāļ”āļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ āđƒāļŦāļœ#āđƒāļŠāļāļĢāļ­āļāļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ addBook.html āđƒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Database Application āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļ—āļœ/āļēāļ™ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New > Other.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ JavaServer Faces āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒāđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ JSF JSP Page āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” JSP File Name: āđ€āļ›āļ™ AddBook āđāļĨāļ§āļāļ” Finish 4. āļ āļēāļĒāđƒāļ™ Source code āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āļˆāļ°āļĄāļāļēāļĢāļ›āļĢāļ°āļāļēāļĻ tag libraries āļ”āļ‡āļ™āđ‚āļ”āļĒāļ­āļ•āđ‚āļ™āļĄāļ•0 <%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %> <%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %> 5. āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđƒāļ™ tag āļ—āļŠāļ­ <title> āđāļĨāļ° <h1> āđ€āļ›āļ™ Add a new Book 6. āđƒāļ™āļŠ/āļ§āļ™āļ‚āļ­āļ‡āļŸāļ­āļĢ5āļĄ āđ€āļĢāļēāļˆāļ°āđƒāļŠ JSF tag āđ‚āļ”āļĒāđƒāļŦāļĨāļēāļ āļ›16āļĄ JSF Form āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Palette āļĄāļēāđ„āļ§āđƒāļ™ source code āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āļˆāļ°āđāļŠāļ”āļ‡āđ„āļ”āļ­āļ°āļĨāļ­āļ Insert JSF Form āđƒāļŦāđ€āļĨāļ­āļāļŠ/āļ­āļ‡ Empty Form āđāļĨāļ§āļāļ” āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 100.
    100 OK 7. āļŦāļĨāļ‡āļˆāļēāļāļ™āļ™āđƒāļŦāđ€āļ‚āļĒāļ™ code āđ‚āļ”āļĒāđƒāļŠ āļ„āļ­āļĄāđ‚āļžāđ€āļ™āļ™āļ—5 inputText āđāļĨāļ° commandButton āđ‚āļ”āļĒāļˆāļ°āđ„āļ” source code āļ”āļ‡āļ™ <f:view> ... <h:form> ISBN : <h:inputText value="#{BookBean.isbn}" required="true" id="isbn" size="15"/> <h:message for="isbn" /> <BR> Title : <h:inputText value="#{BookBean.title}" required="true" id="title" size="50"/> <h:message for="title" /><BR> Author : <h:inputText value="#{BookBean.author}" required="true" id="author" size="50"/> <h:message for="author" /> <BR> Price : <h:inputText value="#{BookBean.price}" required="true" id="price" size="10" > <f:validator validatorId="validator.PriceValidator" /></h:inputText> <h:message for="price" /> <BR> <h:commandButton value="Submit" action="submit" /> </h:form> .... </f:view> 8. āļāļ”āļ›16āļĄ Save 13.5 āļāļēāļĢāļ/āļēāļŦāļ™āļ” Page Navigation JSF Framework āļˆāļ°āļ.āļēāļŦāļ™āļ”āļĨ.āļēāļ”āļšāļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āđ€āļ§āļšāđ€āļžāļˆāļ•/āļēāļ‡āđ† (Page Navigation) āđ‚āļ”āļĒāļāļēāļĢāļ.āļēāļŦāļ™āļ” configuration āđƒāļ™āđ„āļŸāļĨ5 faces-config.xml āđƒāļ™āļ—āļ™āļˆāļ°āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ‚āļ›āļĢāđāļāļĢāļĄ AddBook.jsp āđ€āļĢāļĒāļ url āļŠāļ­ /addBook.do āđ€āļĄāļ­āļāļ”āļ›16āļĄ Submit āļ‹,āļ‡āļāļēāļĢāđāļāđ„āļ‚āđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files 2. āļ„āļĨ0;āļāļ‚āļ§āļēāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđ€āļĨāļ­āļāđāļ—āļ› XML āđāļĨāļ§āđ€āļĨāļ­āļ Java ServerFaces > Add Navigation Rule 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Navigation Rule āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļē Rule From View: āđ€āļ›āļ™ /AddBook.jsp āđāļĨāļ§āļāļ”āļ›16āļĄ Add 4. āļ„āļĨ0;āļāļ‚āļ§āļēāđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Editor āđāļĨāļ§āđ€āļĨāļ­āļ Java ServerFaces > Add Navigation Case 5. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Add Navigation Case āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļē From View: āđ€āļ›āļ™ /AddBook.jsp āļ„/āļē From Outcome: āđ€āļ›āļ™ submit āđāļĨāļ° To View: āđ€āļ›āļ™ /addBook.do āđāļĨāļ§āļāļ”āļ›16āļĄ Add 6. āđ„āļŸāļĨ5 faces-config.xml āļˆāļ°āļĄāļ„.āļēāļŠāļ‡āđ€āļž0āļĄāļ”āļ‡āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 101.
    101 <navigation-rule> <description> </description> <from-view-id>/AddBook.jsp</from-view-id> <navigation-case> <from-outcome>submit</from-outcome> <to-view-id>/addBook.do</to-view-id> </navigation-case> </navigation-rule> 7. āđāļĨāļ°āļ–āļēāđ€āļĨāļ­āļāđāļ—āļ› PageFlow āļˆāļ°āđ€āļŦāļ™āļ„āļ§āļēāļĄāļŠāļĄāļžāļ™āļ˜5āļ‚āļ­āļ‡āđ„āļŸāļĨ5āļ”āļ‡āļĢ#āļ›āļ— 13.2 āļĢāļ›āļ— 13.2 āļāļēāļĢāđāļŠāļ”āļ‡ PageFlow 13.6 āļāļēāļĢāļ/āļēāļŦāļ™āļ” Error Message JSF Framework āļ.āļēāļŦāļ™āļ”āđƒāļŦāđ„āļŸāļĨ5 Message.properties āļ—.āļēāļŦāļ™āļēāļ—āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļĄāļ­āļ‚āļ­āļĄ#āļĨāļ—āļœ#āđƒāļŠ āļ›%āļ­āļ™āđ„āļĄ/āļŠāļ­āļ”āļ„āļĨāļ­āļ‡āļāļšāđ€āļ‡āļ­āļ™āđ„āļ‚āļ—āļ.āļēāļŦāļ™āļ”āđ„āļ§ āđ„āļŸāļĨ5 Message.properties āļˆāļ°āļ­āļĒ#/āđƒāļ™āđāļžāļ„āđ€āļāļˆ javax.faces āļ‹,āļ‡āđ€āļĢāļē āļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āđ€āļĢāļĒāļāļ”#āđ„āļ”āđ‚āļ”āļĒāļāļēāļĢāļ‚āļĒāļēāļĒāđāļ—āļ› Libraries > jsf-impl.jar > javax.faces āđƒāļ™āļāļĢāļ“āļ—āđ€āļĢāļēāļ•āļ­āļ‡āļāļēāļĢāļˆāļ° āļ.āļēāļŦāļ™āļ” Error Message āđ€āļ­āļ‡āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļŠāļĢāļēāļ‡āđ„āļŸāļĨ5 property āļ‚,āļ™āļĄāļēāđƒāļŦāļĄ/ āđ‚āļ”āļĒāļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāļŦāļ™āļēāļ•/āļēāļ‡ Projects āđāļĨāļ§āļ„āļĨ0;āļāļ‚āļ§āļēāļ—āđ‚āļŦāļ™āļ” JSFDBApp āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļāļ„.āļēāļŠāļ‡ New => File/Folder.. āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 102.
    102 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New File āđƒāļŦāđ€āļĨāļ­āļ Categories āļ—āļŠāļ­ Other āļ‹,āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđāļŠāļ”āļ‡ File Types āļ•/āļēāļ‡āđ†āļ āļēāļĒ āđƒāļ• Category āļ™ āđƒāļŦāđ€āļĢāļēāđ€āļĨāļ­āļ Properties File āđāļĨāļ§āļāļ” Next 3. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Properties File āļ.āļēāļŦāļ™āļ” File Name: āđ€āļ›āļ™ MyMessage āđāļĨāļ° Folder: āđ€āļ›āļ™ src/java/properties 4. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđāļāđ„āļ‚āđ„āļŸāļĨ5 MyMessages.properties āđ‚āļ”āļĒāđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™ javax.faces.component.UIInput.REQUIRED=Please enter a value for this field. 5. āļāļ”āļ›16āļĄ Save 6. āđ€āļĨāļ­āļāđ„āļŸāļĨ5 faces-config.xml āļ‹,āļ‡āļ­āļĒ#/āļ āļēāļĒāđƒāļ•āđāļ—āļ› Configuration Files āđāļĨāļ§āđ€āļž0āļĄāļ‚āļ­āļ„āļ§āļēāļĄāļ”āļ‡āļ™ <application> <message-bundle>properties.MyMessages</message-bundle> </application> 7. āļāļ”āļ›16āļĄ Save 13.7 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html, error.html āđāļĨāļ° Init.java āđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļ”āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĢāļĒāļšāļĢāļ­āļĒ āđāļĨāļ§ āđ‚āļ”āļĒāđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ sourcecode āđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđ‚āļ›āļĢāđāļāļĢāļĄ Thankyou.html āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āļŠ/āļ§āļ™ error.html āđ€āļ›āļ™āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆāļ—āļˆāļ°āđāļŠāļ”āļ‡āđ€āļĄāļ­ āđ‚āļ›āļĢāđāļāļĢāļĄāđ„āļĄ/āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠ/ āļ‚āļ­āļĄ#āļĨāļĨāļ‡āļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ„āļ” āđ‚āļ”āļĒāļĄ sourcecode āļ”āļ‡ Listing āļ— 13.2 Listing āļ— 13.2 āđ‚āļ›āļĢāđāļāļĢāļĄ error.html <html> <head> <title>Error!</title> </head> <body> <H1>Cannot Add!!</H1> </body> </html> āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ›āļĢāļ°āđ€āļ āļ— ServletContextListener āđ€āļžāļ­āđ€āļŠāļ­āļĄāļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨāđ€āļĄāļ­āđ€āļĢ0āļĄ āļ•āļ™ āđāļĨāļ§āđ€āļāļšāļ­āļ­āļ›āđ€āļˆāļ„ connection āđ„āļ§āļ āļēāļĒāđƒāļ™ ServletContext āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄ Init.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Servlet āđ‚āļ”āļĒāđƒāļŠāļ„āļĨāļēāļŠāļ›āļĢāļ°āđ€āļ āļ— Listener 13.8 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļˆāļ°āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ— JSF Frameworks āđ€āļĢāļĒāļāđƒāļŠāļŦāļĨāļ‡āļˆāļēāļāļ—āļœ#āđƒāļŠāļāļ”āļ›16āļĄ Submit āđƒāļ™āļŦāļ™āļē AddBook.jsp āđ‚āļ›āļĢāđāļāļĢāļĄāļ™āļˆāļ°āļĄ url āđ€āļ›āļ™ /addBook.do āđāļĨāļ°āļˆāļ°āļĄ sourcecode āļ„āļĨāļēāļĒāļāļš āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 103.
    103 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java āđƒāļ™āđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļ•/āļˆāļ°āļĄāļ„.āļēāļŠāļ‡ āļ­/āļēāļ™āļ„/āļēāļžāļēāļĢāļēāļĄ0āđ€āļ•āļ­āļĢ5āļ—āļœ#āđƒāļŠāļ›%āļ­āļ™āđ€āļ‚āļēāļĄāļēāđāļ•āļāļ•/āļēāļ‡āļˆāļēāļāđ€āļ”0āļĄ āđ€āļžāļĢāļēāļ°āļāļĢāļ“āļ™āļˆāļ°āđƒāļŠāļˆāļēāļ attribute āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ JSF Managed Bean āļ—āļŠāļ­ BookBean āļ‹,āļ‡āđ€āļ›āļ™ attribute āļ—āđ€āļāļšāđ„āļ§āđƒāļ™ request session āđ‚āļ”āļĒāļĄāļ„.āļēāļŠāļ‡āļ”āļ‡āļ™ BookBean obj = (BookBean) request.getAttribute("BookBean"); String isbn = obj.getIsbn(); String author = obj.getAuthor(); String title = obj.getTitle(); float price = obj.getPrice(); āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet āļˆāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āđƒāļ™āļāļēāļĢāļžāļ’āļ™āļēāđ€āļŠ/āļ™āđ€āļ”āļĒāļ§āļāļšāđāļšāļšāļāļāļŦāļ”āļāļēāļĢāļžāļ’āļ™āļē āđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļš āđ€āļžāļ­āļ•0āļ”āļ•/āļ­āļāļšāļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđāļĨāļ°āļˆāļ°āļĄ source code āļ”āļ‡ Listing āļ— 13.3 āđ‚āļ”āļĒāļˆāļ°āļ•āļ­āļ‡āļ.āļēāļŦāļ™āļ”āđƒāļŦāļĄ URL pattern āđ€āļ›āļ™ /addBook.do Listing āļ— 13.3 āđ‚āļ›āļĢāđāļāļĢāļĄ AddBookServlet.java package controller; import bean.BookBean; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import javax.servlet.*; import javax.servlet.http.*; public class AddBookServlet extends HttpServlet { private Connection conn; public void init() { conn = (Connection) getServletContext().getAttribute("connection"); } 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 { BookBean obj = (BookBean) request.getAttribute("BookBean"); String isbn = obj.getIsbn(); String author = obj.getAuthor(); āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 104.
    104 String title = obj.getTitle(); float price = obj.getPrice(); Statement stmt = conn.createStatement(); String sql = "INSERT INTO books VALUES('"+isbn+"','" + title +"','" + author +"',"+price +")"; int row = stmt.executeUpdate(sql); if (row == 1) { response.sendRedirect(“Thankyou.html”); } else { response.sendRedirect(“error.html”); } }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); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } public String getServletInfo() { return "Short description"; } } 13.9 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ JSFDBApp 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ JSFDBApp 3. āđ€āļĨāļ­āļ URL āļ‚āļ­āļ‡ Web Browser āđ€āļ›āļ™ http://localhost:8080/JSFDBApp/AddBook.jsp āđƒāļŦāđ€āļĢāļē āļ—āļ”āļĨāļ­āļ‡āđƒāļŠ/āļ‚āļ­āļĄ#āļĨ 4. āđ€āļĄāļ­āļāļ”āļ›16āļĄ Add āđ‚āļ›āļĢāđāļāļĢāļĄāļāļˆāļ°āđƒāļŠ/āļ‚āļ­āļĄ#āļĨāļĨāļ‡āđƒāļ™ Database 5. āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļ—āļˆāļ°āļ”#āļ‚āļ­āļĄ#āļĨāļ—āļ›%āļ­āļ™āđ€āļ‚āļēāđ„āļ›āđ„āļ” āđ‚āļ”āļĒāđ„āļ›āļ—āļŦāļ™āļēāļ•/āļēāļ‡ Services āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ NetBeans āđāļĨāļ§āđ€āļĨāļ­āļ āļ„.āļēāļŠāļ‡ View Data.. āļˆāļēāļ Table āļ—āļŠāļ­ books āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 105.
    105 Exercise 14 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāđ€āļ§āļšāđ‚āļ”āļĒāđƒāļŠ Visual JSF āđ€āļ™āļ­āļŦāļēāļ—āļ•āļ­āļ‡āļĻāļāļĐāļēāļāļ­āļ™ - āđāļšāļšāļāļāļŦāļ”āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ JSF Frameworks āđ‚āļ”āļĒāđƒāļŠāđ‚āļĄāļ”#āļĨāļ‚āļ­āļ‡ NetBeans āļ—āļŠāļ­ Visual Web JavaServer Faces āļ‹,āļ‡āļŠ/āļ§āļĒāļ—.āļēāđƒāļŦāđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ Web Application āđ„āļ”āđ‚āļ”āļĒāļ‡/āļēāļĒāđƒāļ™āļĢ#āļ›āđāļšāļš Drag and Drop āđāļĨāļ°āļ—.āļēāđƒāļŦāđ€āļĢāļēāđ€āļ‚āļĒāļ™ source code āļ™āļ­āļĒāļĨāļ‡ 14.1 āļāļēāļĢāļŠāļĢāļēāļ‡ Web Application Project āđ€āļĢāļēāļˆāļ°āđ€āļĢ0āļĄāļ•āļ™āļŠāļĢāļēāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ Web Base Application āđ‚āļ”āļĒāđƒāļŠ JSF Framework āđ‚āļ”āļĒāļāļēāļĢāļŠāļĢāļēāļ‡ Project āđƒāļŦāļĄ/āļ‚,āļ™āļĄāļēāđƒāļ™ NetBeans āļ‹,āļ‡āļĄāļ‚āļ™āļ•āļ­āļ™āļ”āļ‡āļ™ 1. āđ€āļĨāļ­āļāđ€āļĄāļ™# File > New Project.. 2. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ New Project āđƒāļŦāđ€āļĨāļ­āļ Categories āđ€āļ›āļ™ Java Web āđāļĨāļ°āđ€āļĨāļ­āļ Projects āđ€āļ›āļ™ Web Application āđāļĨāļ§āļāļ” Next 3. āļ.āļēāļŦāļ™āļ” Project Name āđ€āļ›āļ™ HelloVisualWebApp āđāļĨāļ§āđ€āļĨāļ­āļ Project Location āđ€āļ›āļ™ Director āļ—āđ€āļĢāļē āļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđ€āļāļšāđ„āļŸāļĨ5āđ„āļ§ āļˆāļēāļāļ™āļ™āđ€āļĨāļ­āļ Server āđ€āļ›āļ™ GlassFish V2 āļˆāļēāļāļ™āļ™āļāļ” Next 4. āđƒāļ™āļŠ/āļ­āļ‡ Frameworks āđƒāļŦāđ€āļĨāļ­āļ Visual Web JavaServer Faces āļˆāļēāļāļ™āļ™āļāļ” Finish [āđƒāļ™āļāļĢāļ“āļ—āđ„āļĄ/āļĄ Visual JSF Framework āđƒāļŦāđ€āļĨāļ­āļ āđ€āļĢāļēāļˆāļ°āļ•āļ­āļ‡āļ—.āļēāļāļēāļĢāļ•0āļ”āļ•āļ‡ Visual JSF Plugin āļ‚āļ­āļ‡ NetBeans āļ/āļ­āļ™] 14.2 āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄ HelloWeb āđ‚āļ›āļĢāđāļāļĢāļĄ HelloWeb āđ€āļ›āļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ—āļˆāļ°āļžāļ’āļ™āļēāļ‚,āļ™āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđ‚āļ”āļĒāļ•āļ­āļ‡āļāļēāļĢāļˆāļ°āđƒāļŦ āļĄāļŦāļ™āļēāļˆāļ­āļŠ/āļ§āļ™āļ•0āļ”āļ•/āļ­āļœ#āđƒāļŠāļ”āļ‡āļĢ#āļ›āļ— 14.1 āđ‚āļ”āļĒāļœ#āđƒāļŠāļŠāļēāļĄāļēāļĢāļ–āļ›%āļ­āļ™āļ‚āļ­āļ„āļ§āļēāļĄāđƒāļ™ TextField āđāļĨāļ°āđ€āļĄāļ­āļāļ”āļ›16āļĄ Say Sawaddee āđ‚āļ›āļĢāđāļāļĢāļĄāļˆāļ°āđāļŠāļ”āļ‡āļ‚āļ­āļ„āļ§āļēāļĄāļšāļ™āļ•.āļēāđāļŦāļ™/āļ‡ Static Text āđ‚āļ”āļĒāļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 106.
    106 āļĢāļ›āļ— 14.1 āļāļēāļĢāļŠāļĢāļēāļ‡āļŦāļ™āļēāđ€āļ§āļšāđ€āļžāļˆ JSF āđ‚āļ”āļĒāđƒāļŠ Visual Editor 1. āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ5 Page1.jsp āļŦāļ™āļēāļ•/āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨ5āļ™āđƒāļ™āđ‚āļŦāļĄāļ” Design 2. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ Properties āđƒāļŦāļ.āļēāļŦāļ™āļ”āļ„/āļēāļ‚āļ­āļ‡ Title āđ€āļ›āļ™ Hello Web āļ”āļ‡āļĢ#āļ›āļ— 14.2 āļĢāļ›āļ— 14.2 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Properties āļ‚āļ­āļ‡ Page1 3. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Palette āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Label āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Name: āđāļĨāļ§āļāļ” Enter (āļˆāļ°āļŠāļ‡āđ€āļāļ•āđ€āļŦāļ™āļ§"āļēāļ„"āļēāļ‚āļ­āļ‡ text āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš label1:text āļˆāļ°āļ–/āļāđ€āļ›āļĨ!āļĒāļ™āđ€āļ›6āļ™ Name: āļ”āļ§āļĒ) 4. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ TextField āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™ āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—!āđāļŠāļ”āļ‡āļ‚āļēāļ‡āļ•āļ™ āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Enter your name āđāļĨāļ§āļāļ” Enter 5. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš TextField1 āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ textField1 āđ€āļ›6āļ™ nameTf 6. āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! nameTf āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute āļ”āļ‡āđāļŠāļ”āļ‡āđƒāļ™āļĢ/āļ›āļ—! 14.3 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 107.
    107 āļĢāļ›āļ— 14.3 āļāļēāļĢāđƒāļŠāļ„āļēāļŠāļ‡ Add Binding Attribute 7. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Button āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™āļ•.āļēāđāļŦāļ™"āļ‡ āļ”āļ‡āļĢ/āļ›āļ—!āđāļŠāļ”āļ‡āļ‚āļēāļ‡āļ•āļ™ āđāļĨāļ§āđāļāđ„āļ‚āļ‚āļ­āļ„āļ§āļēāļĄāđ€āļ›6āļ™ Say Sawaddee 8. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Button āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ button1 āđ€āļ›6āļ™ hiButton 9. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Static Text āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™ āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—! 14.1 10. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Static Text āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ staticText1 āđ€āļ›6āļ™ hiText 11. āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! hiText āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute 12. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Message Group āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđ„āļ§āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡āļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ­āļ‡ Page1.jsp āđƒāļ™āļ•.āļēāđāļŦāļ™"āļ‡āļ”āļ‡āļĢ/āļ›āļ—! 14.1 (Message Group āļŠāļēāļĄāļēāļĢāļ–āđ€āļ­āļēāđ„āļ§āđƒāļŠāđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡ Error Message) 13. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāđ€āļĨāļ­āļāđāļ—āļ› JSP āđ€āļĢāļēāļˆāļ°āđ€āļŦāļ™ sourcecode āļ‚āļ­āļ‡āđ„āļŸāļĨ5 Page1.jsp āļ‹,āļ‡āļˆāļ°āļĄ Tags āļ‚āļ­āļ‡ JSF āļ­āļĒ#/ āđƒāļŦāļŠāļ‡āđ€āļāļ•āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļāļĨ/āļēāļ§ āļ‚āļ™āļ•āļ­āļ™āļ–āļ”āļĄāļēāļˆāļ°āđ€āļ›āļ™āļāļēāļĢāđ€āļ‚āļĒāļ™ Source code āđ€āļžāļ­āļ.āļēāļŦāļ™āļ”āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļāļ”āļ›16āļĄ Say Sawaddee āđ‚āļ”āļĒāļĄ āļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļ—.āļēāļ‡āļēāļ™āļ”āļ‡āļ™ 14. āđƒāļ™āļŦāļ™āļēāļ•/āļēāļ‡ editor āđƒāļŦāļāļĨāļšāļĄāļēāđ€āļĨāļ­āļāđāļ—āļ› Design āđāļĨāļ§āļāļ”āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāļ—āļ›16āļĄ Say Sawaddee 15. āļŦāļ™āļēāļ•/āļēāļ‡ editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļ› Java āđāļĨāļ°āđāļŠāļ”āļ‡ source code āđƒāļ™āļ„.āļēāļŠāļ‡ action āļ‚āļ­āļ‡āļ›16āļĄ Say Sawaddee āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™ public String hiButton_action() { String name = (String) nameTf.getText(); hiText.setText("Sawaddee " +name); return null; } 14.3 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 108.
    108 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp 3. āļ—āļ”āļĨāļ­āļ‡āļ›>āļ­āļ™āļ‚āļ­āļ„āļ§āļēāļĄāļĨāļ‡āđƒāļ™ Text Field āļˆāļ°āđ„āļ”āļ•āļ§āļ­āļĒ"āļēāļ‡āļœāļĨāļĨāļžāļ˜āļ”āļ‡āļĢ/āļ›āļ—! 14.4 āļĢāļ›āļ— 14.4 āļœāļĨāļĨāļžāļ˜!āļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp 14.4 āļāļēāļĢāļ›āļĢāļšāļ›āļĢāļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ HelloWeb āļ‚āļ™āļ•āļ­āļ™āļ™āļˆāļ°āđ€āļ›āļ™āļāļēāļĢāļ›āļĢāļšāļ›āļĢ1āļ‡āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāļĄ Drop-Down List āļ—āļ™.āļēāļŠāļ­āļĄāļēāļˆāļēāļ table āđƒāļ™āļāļēāļ™āļ‚āļ­āļĄ#āļĨ āđ‚āļ”āļĒāļˆāļ°āļĄāļŦāļ™āļēāļˆāļ­āļŠ/āļ§āļ™āļ•0āļ”āļ•/āļ­āļœ#āđƒāļŠāļ”āļ‡āļĢ#āļ›āļ— 14.5 āđāļĨāļ°āļĄāļ‚āļ™āļ•āļ­āļ™āļāļēāļĢāļžāļ’āļ™āļēāđ‚āļ›āļĢāđāļāļĢāļĄāļ”āļ‡āļ™ āļĢāļ›āļ— 14.5 āļŠ-āļ§āļ™āļ•āļ”āļ•-āļ­āļāļšāļœāđƒāļŠāļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄ VisualWebApp āļ—āļˆāļ°āļ›āļĢāļšāļ›āļĢ1āļ‡āđƒāļŦāļĄ- āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 109.
    109 1. āđƒāļ™āđ‚āļ›āļĢāđ€āļˆāļ„ HelloVisualWebApp āđƒāļŦāđ€āļĨāļ­āļāđ„āļŸāļĨ Page1.jsp āļŦāļ™āļēāļ•"āļēāļ‡ Editor āļˆāļ°āđāļŠāļ”āļ‡āđ„āļŸāļĨāļ™&āđƒāļ™āđ‚āļŦāļĄāļ” Design 2. āļĨāļš TextField āļ­āļ­āļ āđāļĨāļ§āļĨāļēāļāđ„āļ­āļ„āļ­āļ™ Drop Down List āļ—!āļ­āļĒ/"āļ āļēāļĒāđƒāļ™āđ‚āļŦāļ™āļ” Basic āļĄāļēāđāļ—āļ™āļ—! 3. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Properties āļŠ.āļēāļŦāļĢāļš Drop Down List āđƒāļŦāđ€āļ›āļĨ!āļĒāļ™āļ„"āļē id āļˆāļēāļ dropDown1 āđ€āļ›6āļ™ nameDropDown 4. āđƒāļŦāļ—.āļēāļāļēāļĢāļ„āļĨ#;āļāļ‚āļ§āļēāļ—! nameDropDown āđāļĨāļ§āđ€āļĨāļ­āļ Add Binding Attribute 5. āđƒāļ™āļŦāļ™āļēāļ•"āļēāļ‡ Services āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Databases āđāļĨāļ§āļ„āļĨ#;āļāļ‚āļ§āļēāļ—!āđ‚āļŦāļ™āļ” jdbc:mysql://localhost:3306/test āđāļĨāļ§āđ€āļĨāļ­āļ Connect āđ€āļž!āļ­āđ€āļŠ!āļ­āļĄāļ•"āļ­āļāļēāļ™āļ‚āļ­āļĄ/āļĨ 6. āļ‚āļĒāļēāļĒāđ‚āļŦāļ™āļ” Tables āļˆāļ°āđ€āļŦāļ™ table āļ—!āļŠ!āļ­ books āļ‹:!āļ‡āļŠāļĢāļēāļ‡āļĄāļēāđƒāļ™āđāļšāļšāļ8āļāļŦāļ”āļāļēāļĢāđ€āļŠ!āļ­āļĄāļ•"āļ­āļāļš MySQL Database āļ”āļ‡āļĢ/āļ›āļ—! 14.6 āļĢāļ›āļ— 14.6 āļāļēāļĢāđāļŠāļ”āļ‡ Table āļ—āļŠāļ­ books 7. āļĨāļēāļāđ„āļ­āļ„āļ­āļ™āļ‚āļ­āļ‡ table āļ—!āļŠ!āļ­ books āđ„āļ›āļĨāļ‡āđƒāļ™ Drop Down List 8. āļ„āļĨ#;āļāļ‚āļ§āļēāļ—! Drop Down List āđāļĨāļ§āđ€āļĨāļ­āļ3 Bind to Data 9. āđƒāļ™āđ„āļ”āļ­āļ°āļĨāļ­āļ Bind to Data āđ€āļĨāļ­āļ Value field: āđ€āļ›6āļ™ books.author āđāļĨāļ° Display field: āđ€āļ›6āļ™ books.author āļ”āļ‡āļĢ/āļ›āļ—! 14.7 āđāļĨāļ§āļāļ”āļ›'<āļĄ OK āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 110.
    110 āļĢāļ›āļ— 14.7 āļāļēāļĢāļāļēāļŦāļ™āļ”āļ„-āļē Bind to Data 10. āļāļ”āļ”āļšāđ€āļš0āļĨāļ„āļĨ0;āļāļ—āļ›16āļĄ Say Sawaddee āļŦāļ™āļēāļ•/āļēāļ‡ editor āļˆāļ°āđāļŠāļ”āļ‡āđāļ—āļ› Java āđƒāļŦāđāļāđ„āļ‚ source code āļ”āļ‡āļ™ public String hiButton_action() { String name =(String)nameDropDown.getSelected(); hiText.setText("Sawaddee " + name); return null; } 11. āđƒāļ™āđāļ—āļ› Java āđƒāļŦāđāļāđ„āļ‚ source code āļ‚āļ­āļ‡āđ€āļĄāļ˜āļ­āļ” prerender() āđ€āļžāļ­āļ.āļēāļŦāļ™āļ”āļ„/āļēāđ€āļĢ0āļĄāļ•āļ™āļ‚āļ­āļ‡āļāļēāļĢāđ€āļĨāļ­āļ Drop Down List āļ”āļ‡āļ™ public void prerender() { if (nameDropDown.getSelected() == null) { booksDataProvider.cursorFirst(); nameDropDown.setSelected ((String)booksDataProvider.getValue("books.author")); } } 14.5 āļāļēāļĢāļ—āļ”āļŠāļ­āļšāđ‚āļ›āļĢāđāļāļĢāļĄ 1. āļ—.āļēāļāļēāļĢ Build āđāļĨāļ° Deploy āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp 2. Run āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp 3. āļ—āļ”āļĨāļ­āļ‡āđ€āļĨāļ­āļāļŠāļ­āđƒāļ™ Drop Down List āļˆāļ°āđ„āļ”āļ•āļ§āļ­āļĒ/āļēāļ‡āļœāļĨāļĨāļžāļ˜5āļ”āļ‡āļĢ#āļ› 14.8 āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan
  • 111.
    111 āļĢāļ›āļ— 14.8 āļ•āļ§āļ­āļĒ-āļēāļ‡āļāļēāļĢāļĢāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ HelloVisualWebApp āļāļēāļĢāđ€āļ‚āļĒāļ™āđ‚āļ›āļĢāđāļāļĢāļĄ Java Servet / JSP Thanachart Numnonda / Thanisa Kruawaisayawan