Nguyn Quang Hng E-mail: hungnq2@cse.hcmut.edu.vn Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm Nguyn Quang Hng 2 Mc tiu Hc v cng ngh Java Servlet. Bi tp: ng dng danh b in thoi bng Java Servlet. Nguyn Quang Hng 3 Mc lc Ti liu tham kho Tng quan Kin trc ca J2EE Java Servlet Gii thiu M hnh Lp trnh servlet V d: ng dng danh b in thoi bng servlet Nguyn Quang Hng 4 Ti liu tham kho v Servlet v JSP 1. Professional Java Server Programming - J2EE edition, Wrox Press, 2000. 2. Core Servlet and JSP, Orielly, 2000. 3. Sun blueprints: http://java.sun.com/tutorials 4. Sun J2SE document API 5. IBM Developer web site: www.ibm.com/developers Nguyn Quang Hng 5 Tng quan v cng ngh Java Kin trc J2EE bao gm nhiu k thut lp trnh pha server nh: Servlet JSP Enterprise Java Bean
Nguyn Quang Hng 6 Kin trc ca J2EE Web client (X)HTML / XML Web Container Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI HTTP(S) RDBMS JDBC Applet Nguyn Quang Hng 7 Web client (X)HTML / XML Web Container Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI HTTP(S) RDBMS JDBC Applet Kin trc ca J2EE Web clients: trnh duyt hoc mt ng dng qun l cc tng tc ca ngi dng, hin th cc trang web dng HTML. HTML v Javascript hay DHTML, XML s to cc chc nng tng tc hu dng pha client HTTP hoc HTTPS l giao thc chuyn i thng tin ca web client v cc ng dng web trn web server.
Nguyn Quang Hng 8 Kin trc ca J2EE J2EE cung cp: Web container. Java Servlet API. JavaServer Page (JSP) API. xy dng v qun l cc ng dng web. Web client (X)HTML / XML Web Container Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI HTTP(S) RDBMS JDBC Applet Nguyn Quang Hng 9 Kin trc ca J2EE Web container: Cung cp mi trng runtime v framework h tr cc ng dng web. V d: Tomcat, Jboss, J2EE implementation, IBM WebSphere Application Server, BEA Web Logic, Oracle Application Server Web client (X)HTML / XML Web Container Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI HTTP(S) RDBMS JDBC Applet Nguyn Quang Hng 10 Java Servlet Java servlet l nhng chng trnh c lp platform v nh chy pha server c lp trnh m rng chc nng ca web server. Ngha l bn c th nhng logic ca ng dng ring vo vic x l cc HTTP request v to HTTP response.
Java servlet ging nh CGI nhng tt hn trong vic x l HTTP request-response.
Java servlet khng th gi t client m web container cha ng dng web c server s b gi.
Nguyn Quang Hng 11 Quy trnh c bn khi web server nhn mt HTTP request Web browser Web Server HTTP Req HTTP Res Uses the mapping Information J2EE Web Container Static resources
Web Application Servlet/JSP instances Static resources
One or more Servlets or JSP 1 2 3 4 5 6 Nguyn Quang Hng 14 Vng i ca servlet Khng tn ti (Doses not exist) To ra (Instantiated) Sn sng phc v request (Instaniated & Ready) Phc v (Service) Khng sn sng Unavailable Hu (Destroyed) Nguyn Quang Hng 15 Vng i ca servlet Khng tn ti (Doses not exist) To ra (Instantiated) Sn sng phc v request (Instaniated & Ready) Phc v (Service) Khng sn sng Unavailable Hu (Destroyed) Vng i ca servlet gm 6 trng thi: - To ra: web container to mt thc th servlet - Sn sng phc v: gi method init() ca servlet - Phc v: nu c mt request th container s gi method service() ca thc th. - Hu: container gi method destroy() ca servlet. -Khng sn sng: thc th c nh du cho garbage collection. Nguyn Quang Hng 16 ServletContainer thread 1 thread 2 Servlet create thread pool Instantiate servlet instance Call init() method Perform initialization allocate request to thread HTTP request 1 come call service() method allocate request to thread HTTP request 2 come call service() method HTTP Response 1 HTTP Response 2 Block all further requests until exists ready thread Nguyn Quang Hng 17 Lp trnh vi Java servlet API Java Servlet API gm: javax.servlet.* Cha cc class v interface c lp vi HTTP javax.servlet.http.* Cha cc class c th cho HTTP
Tt c sevlet u phi hin thc giao din javax.servlet.Servlet. Tuy nhin do chng ta dng giao thc HTTP v javax.servlet.http.HttpServlet l lp hin thc giao din Servlet, nn thng ta phi k tha t lp ny v override doGet() v/hay doPost(). Nguyn Quang Hng 18 Lp trnh vi Java servlet API (tip) Mc ch Class/Interface Hin thc servlet javax.servlet.Servlet javax.servlet.SingleThreadModel javax.servlet.GenericServlet javax.servlet.http.HttpServlet Cu hnh sevlet javax.servlet.ServletConfig Servlet Exception javax.servlet.ServletException Requests javax.servlet.ServletRequest javax.servlet.http.HttpServletRequest javax.servlet.ServletInputStream Nguyn Quang Hng 19 Lp trnh vi Java servlet API (tip) Mc ch Class/Interface Responses javax.servlet.ServletResponse javax.servlet.http.HttpServletResponse javax.servlet.ServletOutput Session tracking Javax.servlet.http.HttpSession Java.servlet.http.HttpSessionBindingListener Servlet context Javax.servlet.ServletContext Servlet collaboration Javax.servlet.RequestDispatcher Khc Javax.servlet.http.Cookie Java.servlet.http.HttpUtils Nguyn Quang Hng 20 API cho HttpServletRequest 1. Object getAttribute(String name) 2. void setAttribute(String name, Object att ) 3. Enumeration getAttributeNames() 4. int getContentLength() 5. String getParameter(String name) 6. Enumeration getParameterNames() 7. Enumeration getParameterValues() 8. String getRemoteHost() 9. RequestDispatcher getRequestDispatcher( String path ) 10. boolean isSecure() 11. ServletInputStream getServletInputStream() 12. int getContentLength() 13.
Nguyn Quang Hng 21 API cho HttpServletResponse 1. String getCharaterEncoding() 2. ServletOutputStream getOutputStream() 3. PrintWriter getWriter() 4. setContentLength( int len ) 5. setContentType( String type ) 6. setBufferSize( int len ) 7. int getBufferSize() 8. flushBuffer() 9. Nguyn Quang Hng 22 Bi tp: ng dng tra cu DBT bng servlet ng dng danh b in thoi: Vit mt InputForm servlet to mt HTML form nhp tra cu danh b in thoi. Vit mt SearchAccount servlet tra cu thng tin danh b.
Nguyn Quang Hng 23 Bi tp: .D DBT Vit servlet InputForm 1. import javax.servlet.*; import javax.servlet.http.*; 2. import java.io.IOException;
3. public class InputForm extends HttpServlet { 4. static final private String CONTENT_TYPE = "text/html"; 5. //Initialize global variables 6. public void init() throws ServletException { 7. // TO DO ... 8. }
9. public void doGet (HttpServletRequest request, 10. HttpServletResponse response) 11. throws ServletException, IOException { 12. // TO DO ... 13. } 14. } Nguyn Quang Hng 24 Bi tp: .D DBT Vit servlet InputForm (tip) 1. //Process the HTTP Get request 2. public void doGet ( HttpServletRequest request, HttpServletResponse response) 3. throws ServletException, IOException { 4. response.setContentType(CONTENT_TYPE); 5. PrintWriter out = response.getWriter(); // Write to client
6. out.println(<html><head><title>InputForm</title></head>"); 7. out.println("<body>"); 8. out.println("<h1>Trang Web demo viec tra danh ba dien thoai.</h1>"); 9. out.println("<form action=searchaccount method='post'>"); 10. out.println("Nhap ten thue bao: <INPUT NAME=ttbao"><br>"); 11. out.println("Nhap so dien thoai: <INPUT NAME=sodthoai><br>"); 12. out.println("Nhap dia chi: <INPUT NAME=diachi> <br>"); 13. out.println("<input type='submit' name='Submit' value='Bat dau tra'>"); 14. out.println("</form>"); out.println("</body></html>"); 15. } Nguyn Quang Hng 25 Bi tp: .D DBT Kt qu hin th trn trnh duyt <html> <head><title>InputForm</title></head> <body> <h1>Trang Web demo viec tra danh ba dien thoai.</h1> <form action=searchaccount method='post'> Nhap ten thue bao : <input name='ttbao ><br> Nhap so dien thoai : <input name='sodthoai ><br> Nhap dia chi : <input name='diachi ><br> <input type='submit' name='Submit' value='Bat dau tra'> </form> </body></html> Nguyn Quang Hng 26 Bi tp: .D DBT Vit servlet SearchAccount 1. import javax.servlet.*; import javax.servlet.http.*; 2. import java.io.*; import java.util.*; import java.sql.*;
3. public class SearchAccount extends HttpServlet {
4. static final private String CONTENT_TYPE = "text/html"; 5. 6. // Process the HTTP Post request 7. public void doPost (HttpServletRequest request, 8. HttpServletResponse response) 9. throws ServletException, IOException 10. { 11. // TODO 12. // Lay gia tri tu cac textbox tren InputForm 13. } 14. } Nguyn Quang Hng 27 Bi tp: .D DBT Vit servlet SearchAccount (tip) 1. //Process the HTTP Post request 2. public void doPost (HttpServletRequest request, HttpServletResponse response) 3. throws ServletException, IOException { 4. response.setContentType(CONTENT_TYPE); 5. PrintWriter out = response.getWriter(); 6. out.println("<html><head><title>SearchAccount</title></head>"); 7. out.println("<body><h1>Ket qua tra dien thoai theo yeu cau cua ban :</h1>"); 8. out.println("<table border=1 cellPadding=1 cellSpacing=1>"); 9. String tentbao = request.getParameter("ttbao");
10. // xay dung lenh SQL 11. String newSQL = "SELECT * FROM CUSTOMER"; 12. if (tentbao != null && tentbao.length() != 0) { 13. newSQL = newSQL + " where tentbao like '%" + tentbao + "%'"; 14. } 15. String conStr = "jdbc:odbc:DanhBaDT"; 16. Statement stmt = null; ResultSet rs = null; 17. Nguyn Quang Hng 28 Bi tp: .D DBT Vit servlet SearchAccount (tip) 1. try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 2. con = DriverManager.getConnection(conStr, "", ""); 3. stmt = con.createStatement(); 4. rs = stmt.executeQuery(newSQL); 5. 6. out.println("<tr><th>So thu tu</th><th>Ten thue bao</th><th>So dien + 7. thoai</th><th>Dia chi</th></tr>\n"); 8. if (rs != null) { 9. for ( int i = 1; rs.next(); ) { 10. out.println("<tr><td>" + i +"</td><td>" + rs.getString(2) + 11. "</td><td>" + rs.getString(3) + "</td><td>" + 12. rs.getString(4) + "</td></tr>\n"); 13. } // end for 14. } // end if 15. out.println("</table>"); 16. rs.close(); stmt.close(); con.close(); 17. } catch (Exception e) { System.out.println("Error : " + e); } 18. 19. } // End doPost() Nguyn Quang Hng 29 Bi tp: .D DBT Kt qu chy th (tip) Nguyn Quang Hng 30 Kt lun Java servlet cho php m rng chc nng c bn ca Web server nhm tng cng vic x l cc thng tin trong HTTP request v/hay response. N cung cp nhiu tin ch hn CGI.
Tuy nhin Java servlet c im yu trong vic phi lp trnh to trang HTML kt qu. im yu ny s c khc phc trong cng ngh khc ca Java l JSP. Nguyn Quang Hng 31 Tho lun