480 likes | 879 Views
Công nghệ Java Servlet. Nguyễn Quang Hùng E-mail: hungnq2@cse.hcmut.edu.vn Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm. Mục tiêu. Học về công nghệ Java Servlet. Bài tập: ứng dụng danh bạ điện thoại bằng Java Servlet. Mục lục. Tài liệu tham khảo Tổng quan Kiến trúc của J2EE
E N D
Công nghệ Java Servlet Nguyễn Quang Hùng E-mail: hungnq2@cse.hcmut.edu.vn Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm
Mục tiêu • Học về công nghệ Java Servlet. • Bài tập: ứng dụng danh bạ điện thoại bằng Java Servlet. Nguyễn Quang Hùng
Mục lục • Tài liệu tham khảo • Tổng quan • Kiến trúc của J2EE • Java Servlet • Giới thiệu • Mô hình • Lập trình servlet • Ví dụ: ứng dụng danh bạ điện thoại bằng servlet Nguyễn Quang Hùng
Tài liệu tham khảo về Servlet và JSP • Professional Java Server Programming - J2EE edition, Wrox Press, 2000. • Core Servlet and JSP, Orielly, 2000. • Sun blueprints: http://java.sun.com/tutorials • Sun J2SE document API • IBM Developer web site: www.ibm.com/developers Nguyễn Quang Hùng
Tổng quan về công nghệ Java • Kiến trúc J2EE bao gồm nhiều kỹ thuật lập trình phía server như: • Servlet • JSP • Enterprise Java Bean • … Nguyễn Quang Hùng
HTTP(S) Applet Web Container Web client (X)HTML / XML Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI JDBC RDBMS Kiến trúc của J2EE Nguyễn Quang Hùng
HTTP(S) Applet Web Container Web client (X)HTML / XML Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI JDBC RDBMS Kiến trúc của J2EE • Web clients: trình duyệt hoặc một ứng dụng quản lý các tương tác của người dùng, hiển thị các trang web dạng HTML. • HTML và Javascript hay DHTML, XML sẽ tạo các chức năng tương tác hữu dụng phía client • HTTP hoặc HTTPS là giao thức chuyển đổi thông tin của web client và các ứng dụng web trên web server. Nguyễn Quang Hùng
HTTP(S) Applet Web Container Web client (X)HTML / XML Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI JDBC RDBMS Kiến trúc của J2EE • J2EE cung cấp: • Web container. • Java Servlet API. • JavaServer Page (JSP) API. • Để xây dựng và quản lý các ứng dụng web. Nguyễn Quang Hùng
HTTP(S) Applet Web Container Web client (X)HTML / XML Servlet objects JSP pages Tag Library RMI/IIOP, JDBC, JMS, JavaMail, JNDI JDBC RDBMS Kiến trúc của J2EE • Web container: • Cung cấp môi trường runtime và framework hỗ trợ các ứng dụng web. • Ví dụ: Tomcat, Jboss, J2EE implementation, IBM WebSphere Application Server, BEA Web Logic, Oracle Application Server… Nguyễn Quang Hùng
Java Servlet • Java servlet là những chương trình độc lập platform và nhỏ chạy ở phía server được lập trình để mở rộng chức năng của web server. Nghĩa là bạn có thể nhúng logic của ứng dụng riêng vào việc xử lý các HTTP request và tạo HTTP response. • Java servlet giống như CGI nhưng tốt hơn trong việc xử lý HTTP request-response. • Java servlet không thể gọi từ client mà web container chứa ứng dụng web có server sẽ bị gọi. Nguyễn Quang Hùng
Web Application Servlet/JSP instances Static resources Quy trình cơ bản khi web server nhận một HTTP request Uses the mapping Information J2EE Web Container 3 2 HTTP Req 4 1 5 Web browser Web Server 6 HTTP Res Static resources One or more Servlets or JSP Nguyễn Quang Hùng
Không tồn tại (Doses not exist) Tạo ra (Instantiated) Không sẳn sàng Unavailable Sẳn sàng phục vụ request (Instaniated & Ready) Huỷ (Destroyed) Phục vụ (Service) Vòng đời của servlet Nguyễn Quang Hùng
Không tồn tại (Doses not exist) Tạo ra (Instantiated) Không sẳn sàng Unavailable Sẳn sàng phục vụ request (Instaniated & Ready) Huỷ (Destroyed) Phục vụ (Service) Vòng đời của servlet • Vòng đời của servlet gồm 6 trạng thái: • Tạo ra: web container tạo một thực thể servlet • Sẳn sàng phục vụ: gọi method init() của servlet • Phục vụ: nếu có một request thì container sẽ gọi method service() của thực thể. • Huỷ: container gọi method destroy() của servlet. • Không sẳn sàng: thực thể được đánh dấu cho garbage collection. Nguyễn Quang Hùng
Lập trình với Java servlet API • Java Servlet API gồm: • javax.servlet.* • Chứa các class và interface độc lập với HTTP • javax.servlet.http.* • Chứa các class cụ thể cho HTTP • Tất cả sevlet đều phải hiện thực giao diện javax.servlet.Servlet. Tuy nhiên do chúng ta dùng giao thức HTTP và javax.servlet.http.HttpServlet là lớp hiện thực giao diện Servlet, nên thường ta phải kế thừa từ lớp này và override doGet() và/hay doPost(). Nguyễn Quang Hùng
Lập trình với Java servlet API (tiếp) Nguyễn Quang Hùng
Lập trình với Java servlet API (tiếp) Nguyễn Quang Hùng
API cho HttpServletRequest • Object getAttribute(String name) • void setAttribute(String name, Object att ) • Enumeration getAttributeNames() • int getContentLength() • String getParameter(String name) • Enumeration getParameterNames() • Enumeration getParameterValues() • String getRemoteHost() • RequestDispatcher getRequestDispatcher( String path ) • boolean isSecure() • ServletInputStream getServletInputStream() • int getContentLength() • … Nguyễn Quang Hùng
API cho HttpServletResponse • String getCharaterEncoding() • ServletOutputStream getOutputStream() • PrintWriter getWriter() • setContentLength( int len ) • setContentType( String type ) • setBufferSize( int len ) • int getBufferSize() • flushBuffer() • … Nguyễn Quang Hùng
Bài tập: Ứng dụng tra cứu DBĐT bằng servlet • Ứng dụng danh bạ điện thoại: • Viết một InputForm servlet để tạo một HTML form nhập để tra cứu danh bạ điện thoại. • Viết một SearchAccountservlet để tra cứu thông tin danh bạ. Nguyễn Quang Hùng
Bài tập: Ư.D DBĐTViết servlet InputForm • import javax.servlet.*; import javax.servlet.http.*; • import java.io.IOException; • public class InputForm extendsHttpServlet { • static final private String CONTENT_TYPE = "text/html"; • //Initialize global variables • public void init() throws ServletException { • // TO DO ... • } • public void doGet (HttpServletRequest request, • HttpServletResponse response) • throws ServletException, IOException { • // TO DO ... • } • } Nguyễn Quang Hùng
Bài tập: Ư.D DBĐT Viết servlet InputForm (tiếp) • //Process the HTTP Get request • public void doGet ( HttpServletRequest request, HttpServletResponse response) • throws ServletException, IOException { • response.setContentType(CONTENT_TYPE); • PrintWriter out = response.getWriter(); // Write to client • out.println(“<html><head><title>InputForm</title></head>"); • out.println("<body>"); • out.println("<h1>Trang Web demo viec tra danh ba dien thoai.</h1>"); • out.println("<form action=“searchaccount” method='post'>"); • out.println("Nhap ten thue bao: <INPUT NAME=“ttbao"><br>"); • out.println("Nhap so dien thoai: <INPUT NAME=“sodthoai”><br>"); • out.println("Nhap dia chi: <INPUT NAME=“diachi”> <br>"); • out.println("<input type='submit' name='Submit' value='Bat dau tra'>"); • out.println("</form>"); out.println("</body></html>"); • } Nguyễn Quang Hùng
Bài tập: Ư.D DBĐT Kết quả hiển thị trên trình duyệt <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> Nguyễn Quang Hùng
Bài tập: Ứ.D DBĐTViết servlet SearchAccount • import javax.servlet.*; import javax.servlet.http.*; • import java.io.*; import java.util.*; import java.sql.*; • public class SearchAccount extends HttpServlet { • static final private String CONTENT_TYPE = "text/html"; • // Process the HTTP Post request • public void doPost (HttpServletRequest request, • HttpServletResponse response) • throws ServletException, IOException • { • // TODO… • // Lay gia tri tu cac textbox tren InputForm • } • } Nguyễn Quang Hùng
Bài tập: Ứ.D DBĐTViết servlet SearchAccount (tiếp) • //Process the HTTP Post request • public void doPost(HttpServletRequest request, HttpServletResponse response) • throws ServletException, IOException { • response.setContentType(CONTENT_TYPE); • PrintWriter out = response.getWriter(); • out.println("<html><head><title>SearchAccount</title></head>"); • out.println("<body><h1>Ket qua tra dien thoai theo yeu cau cua ban :</h1>"); • out.println("<table border=1 cellPadding=1 cellSpacing=1>"); • String tentbao = request.getParameter("ttbao"); • // xay dung lenh SQL • String newSQL = "SELECT * FROM CUSTOMER"; • if (tentbao != null && tentbao.length() != 0) { • newSQL = newSQL + " where tentbao like '%" + tentbao + "%'"; • } • String conStr = "jdbc:odbc:DanhBaDT"; • Statement stmt = null; ResultSet rs = null; • …… Nguyễn Quang Hùng
Bài tập: Ứ.D DBĐTViết servlet SearchAccount (tiếp) • try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); • con = DriverManager.getConnection(conStr, "", ""); • stmt = con.createStatement(); • rs = stmt.executeQuery(newSQL); • out.println("<tr><th>So thu tu</th><th>Ten thue bao</th><th>So dien” + • “ thoai</th><th>Dia chi</th></tr>\n"); • if (rs != null) { • for ( int i = 1; rs.next(); ) { • out.println("<tr><td>" + i +"</td><td>" + rs.getString(2) + • "</td><td>" + rs.getString(3) + "</td><td>" + • rs.getString(4) + "</td></tr>\n"); • } // end for • } // end if • out.println("</table>"); • rs.close(); stmt.close(); con.close(); • } catch (Exception e) { System.out.println("Error : " + e); } • … • } // End doPost() Nguyễn Quang Hùng
Bài tập: Ứ.D DBĐTKết quả chạy thử (tiếp) Nguyễn Quang Hùng
Kết luận • Java servlet cho phép mở rộng chức năng cơ bản của Web server nhằm tăng cường việc xử lý các thông tin trong HTTP request và/hay response. Nó cung cấp nhiều tiện ích hơn CGI. • Tuy nhiên Java servlet có điểm yếu trong việc phải lập trình để tạo trang HTML kết quả. Điểm yếu này sẽ được khắc phục trong công nghệ khác của Java là JSP. Nguyễn Quang Hùng
Thảo luận Nguyễn Quang Hùng