āļāļāļāļ§āļēāļĄ Big Data āļāļēāļāļāļĨāđāļāļ thanachart.orgIMC Institute
Â
āļāļĨāļĒāļļāļāļāđ 5 āļāđāļēāļāļāļąāļāļāļēāļĢāļāļģ Digital TransformationIMC Institute
Â
Ad
Hand-on Exercise Java Web Programming
1. IMC Institute
Java Web
Programming
Using Cloud Platform
By Associate Professor Dr. Thanachart Numnonda
& Associate Professor Dr. Thanisa Kruawaisayawan
Date 18 â 22 Feb 2013
2. 1
Hand-on
Exercises
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļ§āđāļ
Java Servlet / JSP
āđāļāļĒāđāļāđ
Eclipse and TomCat
Assoc.Prof.Dr.Thanachart Numnonda
Software Park Thailand
and
Asst.Prof.Dr.Thanisa Kruawaisayawan
King Mongkut's Institute of Technology Ladkrabang
February 2013
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
5. 4
14.4 āļāļąāļāļāļēāđāļāļĨāđ mvc-dispatcher-servlet.xml...................................................................................... 115
14.5 āļāļąāļāļāļēāđāļāļĨāđ web.xml.................................................................................................................... 115
14.6 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ.......................................................................................................................116
14.7 āļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāđāļāļ·āđāļāļĄāļāđāļāļāļąāļāļāļēāļāļāđāļāļĄāļđāļĨ................................................................................................. 116
Exercise 15 āļāļēāļĢ Authentication āđāļāļĒāđāļāđ Tomcat .....................................................................................121
15.1 āļŠāļĢāđāļēāļ Web Application Project................................................................................................ 121
15.2 āđāļāļīāđāļĄ User āļāļāļ Tomcat Web Server........................................................................................... 121
15.3 āļāļēāļĢ Config āđāļāļĨāđ web.xml āļāļāļ Web Application āļāļĩāđāļāđāļāļāļāļēāļĢāđāļāđ Tomcat user .....................................122
15.4 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄāđāļāļ Basic Authenticate...................................................................................124
15.5 āļāļēāļĢāļāļĢāļąāļāļāļĢāļļāļāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāđāļŦāđāđāļāđ Login Form........................................................................................ 125
15.6 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ āđāļāļ Form Authenticate.................................................................................. 126
15.7 āļāļēāļĢāļāļĢāļąāļāļāļĢāļļāļāđāļāļĢāđāļāļĢāļĄ āđāļāļ·āđāļāđāļāđ Authenticate āđāļāļĒāļāđāļēāļāļāļēāļ Database MySQL.............................................. 126
15.8 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ āđāļāļ Database Authenticate............................................................................ 127
Exercise 16 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļ§āđāļāđāļāļĒāđāļāđ Google App Engine...................................................................... 128
16.1 āļāļēāļĢāļāļīāļāļāļąāđāļāđāļĨāļ°āđāļĢāļīāđāļĄāļāđāļāļāļēāļĢāđāļāđāļāļēāļ Google App Engine............................................................................ 128
16.2 āļāļēāļĢāļŠāļĢāđāļēāļ Web Application Project............................................................................................ 129
16.3 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ Servlet āđāļāļ·āđāļāļĢāļąāļāļāļ Google App Engine................................................................ 133
16.4 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāļāļīāļāļāđāļāļāļąāļ Google Account................................................................................135
Exercise 17 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ Google App Engine āđāļāļ·āđāļāļāļīāļāļāđāļāļāļąāļāļāļēāļāļāđāļāļĄāļđāļĨ āđāļāļĒāđāļāđ JPA........................................ 138
17.1 āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Google App Engine............................................................................................138
17.2 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ Book Entity Class..........................................................................................138
17.3 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ EMF.java........................................................................................................ 139
17.4 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ addBook.html................................................................................................. 140
17.5 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ OnlineBookServlet āđāļāļ·āđāļāļĢāļąāļāļāļ Google App Engine............................................140
17.6 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāđāļŠāļāļāļāđāļāļĄāļđāļĨāđāļ Books ......................................................................................... 142
Thanachart Numnonda and Thanisa Kruawaisayawan
6. 5
Exercise 1 āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Web Application āđāļĨāļ°āđāļāļĨāđ HTML
āđāļāļāļāļķāļāļŦāļąāļāļāļĩāđāļāļ°āđāļāđāļāļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Web Application āđāļĨāļ°āļāļąāļāļāļēāļŦāļāđāļēāđāļ§āđāļāđāļāļāđāļāļ·āđāļāđāļŦāđāļāļđāđāđāļāđāļāđāļāļāļāđāļāļĄāļđāļĨāļāļāļ
āļĨāļđāļāļāđāļē āđāļāļĒāļāļąāļāļāļēāļāđāļ§āļĒāļ āļēāļĐāļē HTML āļāļķāđāļāļāļ°āļāļģāļŦāļāđāļēāđāļāđāļāļŠāđāļ§āļāļāļīāļāļāļļāļāļāļāļāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāđāļŦāđāļāļđāđāđāļāđāļāđāļāļāļāđāļāļĄāļđāļĨāļāđāļēāļ Web
Browser āļāļąāđāļāļāļĩāđāđāļāđāļāļāļāļķāļāļŦāļąāļāļāļĩāđāļāļ°āđāļāđ Eclipse āđāļāđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāđāļāļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļĨāļ°āļāļ°āđāļāđ Apache Tomcat v 6.0
āđāļāđāļ Web Server
āļāļąāđāļāļāļāļāđāļāļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ
1. āļāļēāļĢāļāļīāļāļāļąāđāļ Web Server
2. āļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Web Application
3. āļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ addCustomer.html
1.1 āļāļēāļĢāļāļīāļāļāļąāđāļ Web Server
āļāļąāđāļāļāļāļāđāļĢāļāļāļ°āļāđāļāļāļāļĢāļąāļāļāļģāļŦāļāļ Perspective āļāļāļ Eclipse āđāļŦāđāđāļāđāļ Java EE āđāļāļĒāļāļēāļĢāđāļĨāļ·āļāļāļāļģāļŠāļąāđāļ Windows >
Open Perspective > Other ..āļāļēāļāļāļąāđāļāđāļĨāļ·āļāļ Java EE āđāļ Dialog Box āļāļ°āđāļāđ Perspective āļāļąāļāļĢāļđāļāļāļĩāđ 1.1
āļĢāļđāļāļāļĩāđ 1.1 Perspective āļŠāļģāļŦāļĢāļąāļ Java EE
āļāļąāđāļāļāļāļāļāļąāļāđāļāļāļ°āđāļāđāļāļāļēāļĢāđāļāļīāđāļĄ Tomcat Web Server āđāļāļ·āđāļāđāļŦāđ Eclipse āļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļļāļĄāđāļĨāļ° Deploy āđāļāļĢāđāļāļĢāļĄāļĨāļ
āđāļāđ āđāļāļĒāļĄāļĩāļāļąāđāļāļāļāļāļāđāļēāļāđ āļāļąāļāļĢāļđāļāļāļĩāđ 1.2 āļāļąāļāļāļĩāđ
āđāļŦāđāđāļĨāļ·āļāļāđāļāļ Servers āļāļĨāļīāđāļāļāļ§āļēāļ āļēāļĒāđāļ Window āđāļĨāđāļ§āđāļĨāļ·āļāļ New â Server
āđāļĨāļ·āļāļāļāļ·āđāļ Apache â Tomcat 6.0 Server (āļŦāļĢāļ·āļ Version āļāļ·āđāļ) āđāļĨāļ° Browse āđāļāļĒāļąāļ folder Tomcat āļāļĩāđāļāļīāļāļāļąāđāļāđāļ§āđ
āļāļēāļāļāļąāđāļāļāļ OK āđāļĨāļ° Finish
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
7. 6
āļĢāļđāļāļāļĩāđ 1.2 āļāļēāļĢ Config Eclipse āđāļāļ·āđāļāđāļŦāđāļĢāļđāđāļāļąāļ TOMCAT Web Server
āđāļĢāļēāļāļ°āđāļŦāđāļāļŦāļāđāļēāļāđāļēāļ Server āļĄāļĩāļāļ·āđāļ Web Server āļāļĩāđāđāļāđāļ Tomcat āđāļāļīāđāļĄāļāļķāđāļāļĄāļēāļāļķāđāļāđāļĢāļēāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļļāļĄāļāļēāļĢ Start/Stop
Server āđāļāđāđāļāļĒāļāļēāļĢāļāļĨāļīāđāļāļāļ§āļēāļāļĩāđāļāļ·āđāļ Server āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļāļāļģāļŠāļąāđāļāļāđāļēāļāđ āļāļķāđāļāļĄāļēāļāļąāļāļĢāļđāļāļāļĩāđ 1.3
āļĢāļđāļāļāļĩāđ 1.3 āđāļĄāļāļđāđāļāļāļēāļĢāļāļąāļāļāļēāļĢ Web Server
Thanachart Numnonda and Thanisa Kruawaisayawan
8. 7
āđāļĢāļēāļāļģāđāļāđāļāļāļĩāđāļāļ°āļāđāļāļāļāļģāļŦāļāļāļāđāļē Server Configuration āļāļāļ Tomcat āđāļāļĒāļāļēāļĢāđāļĨāļ·āļāļāđāļāļ Server āđāļĨāđāļ§āļāļĨāļīāđāļāļāļĩāđ
Tomcat Server āđāļāļĢāđāļāļĢāļĄāļāļ°āđāļŠāļāļāļāđāļāļĄāļđāļĨāļāđāļēāļāđāļāļāļ Server āđāļŦāđāđāļĨāļ·āļāļ Server Locations āđāļāđāļ Use Tomcat Installation
āļāļąāļāļĢāļđāļāļāļĩāđ 1.4
āļĢāļđāļāļāļĩāđ 1.4 āļāļēāļĢāļāļģāļŦāļāļāļāđāļē Server Locations
1.2 āļāļēāļĢāļŠāļĢāđāļēāļ Web Application Project
āļāļąāđāļāļāļāļāļāļĩāđāļāļ°āđāļāđāļāļŠāļĢāđāļēāļāđāļāļĢāđāļāļĢāļĄ Web-Base Application āđāļāļĒāļāļēāļĢāļŠāļĢāđāļēāļ Project āđāļŦāļĄāđ āļĄāļĩāļāļąāđāļāļāļāļāļāļąāļāļāļĩāđ
1. āđāļĨāļ·āļāļāđāļĄāļāļđ File â New â Project
āđāļāđāļāļāļ°āļĨāđāļāļ New Project āļāļĒāļēāļĒ Folder āļāļ·āđāļ Web āđāļĨāļ°āđāļĨāļ·āļāļ Dynamic Web Project āļāļąāļāļĢāļđāļāļāļĩāđ 1.5
āļĢāļđāļāļāļĩāđ 1.5 āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Web Application
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
13. 12
- āļāļĨāļīāļāđāļĨāļ·āļāļāļāļ·āđāļāļāļĩāđāļ§āđāļēāļāļŠāđāļ§āļāļāļāļāļāļāļŦāļāđāļēāļāļ āđāļĨāļ·āļāļ Show āđāļĨāļ° Palette
āļĢāļđāļāļāļĩāđ 1.13 āļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđ HTML Forms Icon āđāļ Palette Tools
- āļāļ°āđāļāđ Tab āļāļ·āđāļ Palette āļāļĒāļđāđāļāļĩāđāļŦāļāđāļēāļāļāļāđāļēāļāļĨāđāļēāļ āļāļĨāļīāļāļāļĩāđ HTML 4.0 āļāļ°āļĄāļĩ Icons āđāļŦāđ
āļŠāļēāļĄāļēāļĢāļāļāļĩāđāļāļ° Drag & Drop āļāļķāđāļāđāļāļ§āļēāļāļāđāļēāļāļāļāļŠāļļāļ (āļĨāļģāļāļąāļāļāļĩāđ3 āļāļąāļāļĢāļđāļāļāļĩāđ 1.14)
āđāļĨāļ°āļāļĢāļąāļāļāđāļē Attribute āļāļāļ Object āļāļąāđāļāđ āđāļāđ āđāļāļĒāđāļĨāļ·āļāļāļāļĩāđ Tab Properties (Tab āļāļĒāļđāđāļāļąāļāđāļāļāļēāļāļāļ§āļē)
āļĢāļđāļāļāļĩāđ 1.14 āļāļēāļĢ Drag and Drop Forms Icon āđāļāļāļĩāđāļŦāļāđāļē Design
Thanachart Numnonda and Thanisa Kruawaisayawan
14. 13
1.4 āļāļēāļĢāļāļāļŠāļāļāđāļāļĢāđāļāļĢāļĄ
1. āļāļģāļāļēāļĢāļāļīāļāļāļąāđāļ (Deploy) Web Project āļāļ Tomcat WebServer
āđāļāļĒāđāļŦāđāđāļĨāļ·āļāļāđāļāļ Server āđāļĨāđāļ§āļāļĨāļīāđāļāļāļ§āļēāļāļĩāđāļāļ·āđāļ Tomcat Server āđāļĨāđāļ§āđāļĨāļ·āļāļāļāļģāļŠāļąāđāļ Add and Remove āļāļąāļāļĢāļđāļāļāļĩāđ 1.15
āļĢāļđāļāļāļĩāđ 1.15 āļāļēāļĢ Drag and Drop Forms Icon āđāļāļāļĩāđāļŦāļāđāļē Design
āļāļēāļāļāļąāđāļāđāļĨāļ·āļāļ WebApp āđāļĨāđāļ§ āļāļāļāļļāđāļĄ Add āđāļāļ·āđāļāđāļāļīāđāļĄāđāļāđāļēāđāļāļāļĩāđ Web Server āđāļĨāļ°āļāļ Finish āļāļąāļāļĢāļđāļāļāļĩāđ 1.16
āļĢāļđāļāļāļĩāđ 1.16 āļāļēāļĢ Deploy Project āļŠāļđāđ Web Application Server
2. Run āđāļāļĢāđāļāļĢāļĄ WebApp āđāļāļĒāļāļĨāļīāđāļāļāļ§āļēāļāļĩāđ addCustomer.html â Run As â Run on Server āļāļąāļāļĢāļđāļāļāļĩāđ 1.17
āļĢāļđāļāļāļĩāđ 1.17 āļāļēāļĢāļĢāļąāļ File āļāļĩāđāļāđāļāļāļāļēāļĢ Test
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
15. 14
3. āļāļ°āļĄāļĩāđāļŦāđāđāļĨāļ·āļāļāļ§āđāļēāļāļ°āđāļŦāđāļĢāļąāļ file āļāļĩāđāļāļĩāđ Server āđāļŦāļ (āļāļĢāļāļĩāđāļĢāļēāļāļĩāđāļĄāļĩ Server āđāļāļĩāļĒāļ§) āļāļ Finish āļāļąāļāļĢāļđāļāļāļĩāđ 1.18
āļĢāļđāļāļāļĩāđ 1.18 āļāļēāļĢāđāļĨāļ·āļāļ Web Application Server āļāļĩāđāļāļ°āđāļāđāļĢāļąāļ
4. āļāļ°āđāļāđāļāļĨāļĨāļąāļāļāđāļāļąāļāļĢāļđāļāļāļĩāđ 1.19
āļĢāļđāļāļāļĩāđ 1.19 āļāļĨāļĨāļąāļāļāđāļāļĩāđāđāļāđāļāļēāļāļāļēāļĢāļĢāļąāļ File addCustomer.html
āļŦāļĄāļēāļĒāđāļŦāļāļļ āļŠāļąāļāđāļāļāļāļĩāđāļāđāļēāļĒ hostname āļāļ°āļŦāļĄāļēāļĒāđāļĨāļāļāļāļĢāđāļ āļāļķāđāļāļāđāļāļ·āļ port āļāļĩāđ Tomcat Server āđāļŦāđāļāļĢāļīāļāļēāļĢāļāļĒāļđāđ
āđāļāļĒ Default āļāļ°āđāļāđāļ 8080 āļĒāļāđāļ§āđāļāļ§āđāļēāļāļ°āļāļģāļŦāļāļāđāļāđāļāļŦāļĄāļēāļĒāđāļĨāļāļāļ·āđāļ
Thanachart Numnonda and Thanisa Kruawaisayawan
138. 137
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(text/html;charset=UTF-8);
PrintWriter out = response.getWriter();
SimpleDateFormat fmt = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss.SSSSSS);
fmt.setTimeZone(new SimpleTimeZone(0, ));
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
String url = request.getRequestURI();
String msg;
if (user != null) {
msg = pWelcome, + user.getNickname() + ! You can a href= +
userService.createLogoutURL(url) +
sign out/a./p;
} else {
msg = pWelcome! a href= + userService.createLoginURL(url) +
Sign in or register/a to customize./p;
}
out.println(html);
out.println(head);
out.println(titleServlet TimerServlet/title);
out.println(/head);
out.println(body);
out.println(msg);
out.println(h1Servlet TimerServlet at + request.getContextPath() + /h1);
out.println(pThe time is: + fmt.format(new Date()) + /p);
out.println(/body);
out.println(/html);
out.close();
}
}
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
139. 138
Exercise 17 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ Google App Engine
āđāļāļ·āđāļāļāļīāļāļāđāļāļāļąāļāļāļēāļāļāđāļāļĄāļđāļĨ āđāļāļĒāđāļāđ JPA
āđāļāļ·āđāļāļŦāļēāļāļĩāđāļāđāļāļāļĻāļķāļāļĐāļēāļāđāļāļ
âĒ āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāđāļ§āđāļāđāļāļĒāđāļāđ Google App Engine
âĒ Java Persistence API
āļāļēāļĢāđāļāđāļāļāđāļāļĄāļđāļĨāļĨāļāđāļāđāļāļĢāđāļāļĢāļĄ Web Application āļāļĩāđāļāļ°āļāđāļāļāļāļēāļĢāļĢāļāļāļĢāļąāļāļāļđāđāđāļāđāļāļģāļāļ§āļāļĄāļēāļāđāļāđāļāđāļĢāļ·āđāļāļāļāđāļāļāļāđāļēāļāļĒāļēāļ
āđāļāļ·āđāļāļāļāļēāļāļāļđāđāđāļāđāļāļ°āļāđāļāļāđāļĢāļĩāļĒāļāđāļāđāđāļāļĢāđāļāļĢāļĄāļāļēāļ Web Server āļāļģāļāļ§āļāļŦāļĨāļēāļĒāđāļāļĢāļ·āđāļāļāļāļķāļāļāļēāļāļāļģāđāļŦāđāļāļēāļĢāđāļĢāļĩāļĒāļāđāļāđāđāļāļĢāđāļāļĢāļĄāđāļāđāļĨāļ°
āļāļĢāļąāđāļāđāļāđ Web Server āļāļĩāđāđāļĄāđāļāđāļģāļāļąāļ āđāļĨāļ° Web Server āļāļļāļāđāļāļĢāļ·āđāļāļāļāļ°āļāđāļāļāļŠāļēāļĄāļēāļĢāļāļāļīāļāļāđāļāļāļąāļāļāđāļāļĄāļđāļĨāļāļĩāđāļāļēāļāļāļĢāļ°āļāļēāļĒāļāļĒāļđāđāđāļ
āđāļāļĢāļ·āđāļāļāđāļĄāđāļāđāļēāļĒāļŦāļĨāļēāļĒāđāđāļāļĢāļ·āđāļāļāđāļāđ Google App Engine āļĄāļĩāļāļĨāđāļāđāļāļāļēāļĢāļāļąāļāļāļēāļĢ Infrastructure āđāļāļ·āđāļāļāļģāđāļŦāđāļāļąāļāļāļąāļāļāļē
āđāļāļĢāđāļāļĢāļĄāđāļĄāđāļāđāļāļāļāļąāļāļ§āļĨāļāļąāļāļāļēāļĢāļāļąāļāļāļēāļĢāļāļąāļāļŦāļēāđāļŦāļĨāđāļēāļāļąāđāļ āđāļāļĒāļŠāļēāļĄāļēāļĢāļāļāļĩāđāļāļ°āļāļąāļāļāļēāļĢāļāđāļāļĄāļđāļĨāđāļāđāđāļāļāļāđāļēāļ API āļāļĩāđāļāļēāļ Google
āļāļģāļŦāļāļāđāļ§āđāđāļŦāđ
Google App Engine āļŠāļāļąāļāļŠāļāļļāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāļāļēāļĢāļāļąāļāļāļēāļĢāļāļēāļāļāđāļāļĄāļđāļĨāđāļāļĒāļāļēāļĢāļāļģāļŦāļāļāļĄāļēāļāļĢāļāļēāļāđāļ§āđāļŠāļāļ
āđāļāļāļāļ·āļ Java Data Objects (JDO) āđāļĨāļ° Java Persistence API (JPA) āļāļķāđāļāļāļąāđāļāļŠāļāļāđāļāļāļāļĩāđāļāļ°āđāļāđāđāļāļĨāļāļāļāļĢāđāļĄāļāļāļ
DataNucleus Access āļāļēāļĢāđāļāđāļāļāđāļāļĄāļđāļĨāļ§āļīāļāļĩāļāļĩāđāļāļ°āđāļāđāļ§āļīāļāļĩāđāļāļ Object Database āļāļķāđāļāđāļāļāļāđāļēāļāļāļēāļ RDBMS āļāļąāđāļ§āđāđāļ āļāļąāļ
āļāļąāđāļāļāļđāđāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļĩāđāđāļāđ RDBMS āļāļēāļāļāļ°āļāđāļāļāļāļĢāļąāļāđāļāļ§āļāļīāļāļāļēāļĢāđāļāđāļāļāđāļāļĄāļđāļĨāđāļŦāļĄāđāđāļāļ·āđāļāđāļŦāđāļāļąāļāļāļē Google Web
Application āđāļāđāļāđāļāđāļāđāļāđāļēāļĒāļāļķāđāļ
āđāļāļāļāļķāļāļŦāļąāļāļāļĩāđāļāļ°āđāļāđāļāļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļīāļāļāđāļāļāļąāļāļāļēāļāļāđāļāļĄāļđāļĨ Books āđāļāļĒāđāļāđ JPA āđāļāļĒāđāļāļĢāđāļāļĢāļĄāļāļ°āļāļģāļāļēāļĢāļŠāļĢāđāļēāļ
Entity āļāļĩāđāļāļ·āđāļ Book āđāļĨāđāļ§āđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄāđāļāļ·āđāļāđāļāļīāđāļĄāļāđāļāļĄāļđāļĨāđāļĨāļ°āđāļŠāļāļāļāđāļāļĄāļđāļĨāļāļąāđāļāļŦāļĄāļāļāļāļ Book
17.1 āļāļēāļĢāļŠāļĢāđāļēāļāđāļāļĢāđāļāđāļ Google App Engine
āđāļāļāļāļķāļāļŦāļąāļāļāļ°āļŠāļĢāđāļēāļ Web Application āļāļāļ GAE āđāļāļĒāļĄāļĩāļāļąāđāļāļāļāļāļāļąāļāļāļĩāđ
1. āđāļĨāļ·āļāļāļāļģāļŠāļąāđāļ File New Other..
2. āđāļāđāļāļāļ°āļĨāđāļāļ New āđāļĨāļ·āļāļ Folder Google āđāļĨāļ°āđāļĨāļ·āļāļ Web Application Project āđāļĨāđāļ§āļāļ Next
3. āļāļģāļŦāļāļāļāļ·āđāļ Package name āđāļāđāļ com.imcinstitute āđāļĨāļ° Project name āđāļāđāļ OnlineBook
4. āđāļĄāđāđāļĨāļ·āļāļāļāđāļāļ Use Google Web Toolkit āđāļĨāđāļ§āļāļ Finish
āđāļāļĢāđāļāļĢāļĄāļāļ°āļŠāļĢāđāļēāļāđāļāļĨāđ OnlineBookServlet.java āđāļĨāļ° persistence.xml (āļ āļēāļĒāđāļāđāđāļāļĨāđāļāļāļĢāđ META-
INF) .āđāļŦāđāļāļąāļāđāļāļĄāļąāļāļī
17.2 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ Book Entity Class
āđāļāļĢāđāļāļĢāļĄ Book.java āļāļ°āđāļāđāļ Entity Class āļāļĩāđāļāļĢāļ°āļāļāļāđāļāļāđāļ§āļĒāļāļīāļĨāļāđāļāđāļēāļāđāļāļĩāđāļŠāļāļāļāļĨāđāļāļāļāļąāļ column āļāļāļ
Thanachart Numnonda and Thanisa Kruawaisayawan
140. 139
Table āļāļĩāđāļāļ·āđāļ Books āđāļāļĒāļāļ°āļāļģāļŦāļāļāđāļŦāđāđāļāļĨāđāļāļĒāļđāđ package āļāļĩāđāļāļ·āđāļ Entity āđāļĨāļ°āļĄāļĩ sourcecode āļāļąāļ Listing āļāļĩāđ 17.1
Listing āļāļĩāđ 17.1 sourcecode āļŠāļģāļŦāļĢāļąāļāđāļāļĢāđāļāļĢāļĄ Book.java
package entity;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Book implements Serializable {
@Id
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;
}
public void setAuthor(String author) {
this.author = author;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
}
17.3 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ EMF.java
āđāļāļĢāđāļāļĢāļĄ Web Application āļāļ°āļāļīāļāļāđāļāļāļąāļ datastore āđāļāļĒāđāļāđāļāļāļāđāļāđāļāļāļāļīāļ EntityManager āđāļāļĒāļŠāļĢāđāļēāļāļĄāļē
āļāļēāļ EntityManagerFactory āđāļāļĢāđāļāļĢāļĄ EMF.java āđāļāđāļāđāļāļĢāđāļāļĢāļĄāļāļĩāđāļāļąāļāļāļēāļāļķāđāļāļĄāļēāđāļāļ·āđāļāļŠāļĢāđāļēāļāļāļāļāđāļāđāļāļāļąāļāļāļĨāđāļēāļ§ āđāļāļĒāļĄāļĩ
āļāļąāđāļāļāļāļāļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļąāļāļāļĩāđ
1. āđāļĨāļ·āļāļāļŦāļāđāļēāļāđāļēāļ Projects āđāļĨāđāļ§āļāļĨāļīāđāļāļāļ§āļēāļāļĩāđāđāļŦāļāļ OnlineBook āļāļēāļāļāļąāđāļāđāļĨāļ·āļāļāļāļģāļŠāļąāđāļ New Java Class...
2. āđāļāđāļāļāļ°āļĨāđāļāļ New Java Class āļāļģāļŦāļāļāļāđāļē Class Name āđāļāđāļ EMF āđāļĨāļ° Package āđāļāđāļ entity āđāļĨāđāļ§āļāļ
Finish
3. āļāļĢāļąāļāļāļĢāļļāļāđāļāļĢāđāļāļĢāļĄ EMF.java āđāļŦāđāđāļāđāļāđāļāļāļąāļ Listing āļāļĩāđ 17.2
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP
141. 140
Listing āļāļĩāđ 17.2 sourcecode āļŠāļģāļŦāļĢāļąāļāđāļāļĢāđāļāļĢāļĄ EMF.java
package entity;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EMF {
private static final EntityManagerFactory emfInstance =
Persistence.createEntityManagerFactory(transactions-optional);
private EMF() {
}
public static EntityManagerFactory get() {
return emfInstance;
}
}
17.4 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ addBook.html
āđāļāļĢāđāļāļĢāļĄ addBook.html āļāļ°āđāļāđāļāļāļāļĢāđāļĄāļŠāļģāļŦāļĢāļąāļāļāļĢāļāļāļāđāļāļĄāļđāļĨāļŦāļāļąāļāļŠāļ·āļ āđāļĨāđāļ§āļāļģāļāļēāļĢāđāļĢāļĩāļĒāļ
OnlineBookServlet āļāļĩāđāļĄāļĩ url āđāļāđāļ addBook.do āđāļĄāļ·āđāļāļĄāļĩāļāļēāļĢāļāļāļāļļāđāļĄ Add āđāļāļĒāļĄāļĩ source code āļāļąāļ Listing āļāļĩāđ 17.3
Listing āļāļĩāđ 17.3 sourcecode āļŠāļģāļŦāļĢāļąāļāđāļāļĢāđāļāļĢāļĄ addBook.html
!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
titleAdd a new book/title
/head
bodyh1Add a new book/h1P
form action=addBook.do method=GET
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
17.5 āļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄ OnlineBookServlet āđāļāļ·āđāļāļĢāļąāļāļāļ Google App Engine
āļāļąāđāļāļāļāļāļāļĩāđāļāļ°āđāļāđāļāļāļēāļĢāļāļĢāļąāļāļāļĢāļļāļāđāļāļĢāđāļāļĢāļĄ OnlineBookServlet.java āđāļāļ·āđāļāđāļŦāđāđāļāđāļāļāđāļāļĄāļđāļĨāļŦāļāļąāļāļŠāļ·āļāļĨāļāđāļ
datastore āļāļĩāđāļāļ·āđāļ Book āđāļāļĒāļĄāļĩāļāļąāđāļāļāļāļāļāļēāļĢāļāļąāļāļāļēāđāļāļĢāđāļāļĢāļĄāļāļąāļāļāļĩāđ
1. āđāļāļĢāđāļāļĢāļĄ OnlineBookServlet.java āđāļŦāđāđāļāđāļāđāļāļāļąāļ Listing āļāļĩāđ 17.4
2. āļāļĢāļąāļāļāļĢāļļāļāđāļāļĢāđāļāļĢāļĄ web.xml āđāļāļĒāđāļāđāđāļ servlet-mapping āđāļŦāđāđāļāđāļ addBook.do āļāļąāļāļāļĩāđ
Thanachart Numnonda and Thanisa Kruawaisayawan
142. 141
servlet-mapping
servlet-nameOnlineBook/servlet-name
url-pattern/addBook.do/url-pattern
/servlet-mapping
3. āļāļģāļāļēāļĢ deploy āļāļ Google App Engine āđāļĨāđāļ§āļāļāļĨāļāļāļĢāļąāļāđāļāļĢāđāļāļĢāļĄāđāļāļĒāđāļāđ url
http://thaijavaapp.appspot.com/addBook.html
Listing āļāļĩāđ 17.4 āđāļāļĢāđāļāļĢāļĄ OnlineBookServlet.java
package com.imcinstitute;
import java.io.IOException;
import java.io.PrintWriter;
import javax.persistence.EntityManager;
import javax.servlet.http.*;
import entity.Book;
import entity.EMF;
@SuppressWarnings(serial)
public class OnlineBookServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {
resp.setContentType(text/html;charset=UTF-8);
PrintWriter out = resp.getWriter();
out.println(html);
out.println(head);
out.println(titleAdd a new book/title);
out.println(/head);
out.println(body);
out.println(h1 Add a new book /h1);
String isbn = req.getParameter(isbn);
String author = req.getParameter(author);
String title = req.getParameter(title);
String priceStr = req.getParameter(price);
float price = Float.parseFloat(priceStr);
Book bk = new Book();
bk.setIsbn(isbn);
bk.setAuthor(author);
bk.setTitle(title);
bk.setPrice(price);
EntityManager em = EMF.get().createEntityManager();
try {
em.persist(bk);
out.println(Book added);
} finally {
em.close();
}
out.println(/body);
out.println(/html);
out.close();
}
}
āļāļēāļĢāđāļāļĩāļĒāļāđāļāļĢāđāļāļĢāļĄ Java Servlet / JSP