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.
31 trang |
Chia sẻ: Mr Hưng | Lượt xem: 1060 | Lượt tải: 0
Bạn đang xem trước 20 trang nội dung tài liệu Công nghệ Java Servlet, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
*Công nghệ Java ServletNguyễn Quang HùngE-mail: hungnq2@cse.hcmut.edu.vnWeb site: ễn Quang Hùng*Mục tiêuHọ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ụcTài liệu tham khảoTổng quanKiến trúc của J2EEJava ServletGiới thiệuMô hìnhLập trình servletVí dụ: ứng dụng danh bạ điện thoại bằng servletNguyễn Quang Hùng*Tài liệu tham khảo về Servlet và JSPProfessional Java Server Programming - J2EE edition, Wrox Press, 2000.Core Servlet and JSP, Orielly, 2000.Sun blueprints: J2SE document APIIBM Developer web site: www.ibm.com/developersNguyễn Quang Hùng*Tổng quan về công nghệ JavaKiến trúc J2EE bao gồm nhiều kỹ thuật lập trình phía server như: ServletJSPEnterprise Java BeanNguyễn Quang Hùng*Kiến trúc của J2EE Web client(X)HTML /XMLWeb ContainerServlet objectsJSPpagesTag LibraryRMI/IIOP, JDBC, JMS, JavaMail, JNDIHTTP(S)RDBMSJDBCAppletNguyễn Quang Hùng*Web client(X)HTML /XMLWeb ContainerServlet objectsJSPpagesTag LibraryRMI/IIOP, JDBC, JMS, JavaMail, JNDIHTTP(S)RDBMSJDBCAppletKiế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*Kiến trúc của J2EEJ2EE 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.Web client(X)HTML /XMLWeb ContainerServlet objectsJSPpagesTag LibraryRMI/IIOP, JDBC, JMS, JavaMail, JNDIHTTP(S)RDBMSJDBCAppletNguyễn Quang Hùng*Kiến trúc của J2EEWeb 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 ServerWeb client(X)HTML /XMLWeb ContainerServlet objectsJSPpagesTag LibraryRMI/IIOP, JDBC, JMS, JavaMail, JNDIHTTP(S)RDBMSJDBCAppletNguyễn Quang Hùng*Java ServletJava 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*Quy trình cơ bản khi web server nhận một HTTP requestWeb browserWeb ServerHTTP ReqHTTP ResUses the mapping InformationJ2EE Web ContainerStatic resourcesWeb ApplicationServlet/JSP instancesStatic resourcesOne or more Servlets or JSP123456Nguyễn Quang Hùng*Quy trình cơ bản khi web server nhận một HTTP requestCó 5 bước:Web server phải cấu hình để nhận biết request đi vào là tương ứng với ứng dụng web nào trong J2EE web container. Web container dùng server context để xác định các ứng dụng web.Khi ứng dụng nhận thấy web container nên nắm bắt request này, web server sẽ uỷ quyền request cho web container. Giống như web server gọi hàm cục bộ/từ xa đến web container.Khi web container nhận request, nó quyết định ứng dụng nào nên xử lý request này. Trong J2EE, mỗi request có thể ánh xạ xuống một servlet hay JSP page, hoặc một tài nguyên tĩnh (dựa vào URL như HTML, XML, ảnh, applet) . Khi đóng gói ứng dụng web thì xác định luôn việc mapping này. Còn web container sẽ dùng thông tin này để map mỗi request đi vào đến một servlet hay JSP, hoặc một tài nguyên tĩnh. Nếu là tài nguyên tĩnh thì chuyển toàn bộ dữ liệu vể web server và web server trả về clientNguyễn Quang Hùng*Java servlet - một quy trình cơ bản khi web server nhận một HTTP requestNếu request nên bị xử lý bởi servlet thì web container sẽ tạo hoặc định vị một thực thể servlet rồi uỷ quyền request đến servlet. Khi uỷ quyền, web container truyền các đối tượng đóng gói HTTP request và response. Đối với servlet, những đối tượng này diễn tả request và response stream từ/đến trình duyệt. Servlet có thể đọc hoặc ghi dữ liệu vào các request và response stream này. Servlet có thể dùng java.io.PrintWriter và println() để ghi dữ liệu vào response stream. Điều này giống như ghi dữ liệu vào cầu nối TCP đã mở từ trình duyệt.Nguyễn Quang Hùng*Vòng đời của servletKhông tồn tại(Doses not exist)Tạo ra (Instantiated)Sẳn sàng phục vụ request (Instaniated & Ready)Phục vụ (Service)Không sẳn sàng UnavailableHuỷ(Destroyed)Nguyễn Quang Hùng*Vòng đời của servletKhông tồn tại(Doses not exist)Tạo ra (Instantiated)Sẳn sàng phục vụ request (Instaniated & Ready)Phục vụ (Service)Không sẳn sàng UnavailableHuỷ(Destroyed)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*Nguyễn Quang Hùng*Lập trình với Java servlet APIJava Servlet API gồm:javax.servlet.*Chứa các class và interface độc lập với HTTPjavax.servlet.http.*Chứa các class cụ thể cho HTTPTấ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)Mục đíchClass/InterfaceHiện thực servlet javax.servlet.Servletjavax.servlet.SingleThreadModeljavax.servlet.GenericServletjavax.servlet.http.HttpServletCấu hình sevletjavax.servlet.ServletConfigServlet Exceptionjavax.servlet.ServletExceptionRequestsjavax.servlet.ServletRequestjavax.servlet.http.HttpServletRequestjavax.servlet.ServletInputStreamNguyễn Quang Hùng*Lập trình với Java servlet API (tiếp)Mục đíchClass/InterfaceResponsesjavax.servlet.ServletResponsejavax.servlet.http.HttpServletResponsejavax.servlet.ServletOutputSession trackingJavax.servlet.http.HttpSessionJava.servlet.http.HttpSessionBindingListenerServlet contextJavax.servlet.ServletContextServlet collaborationJavax.servlet.RequestDispatcherKhácJavax.servlet.http.CookieJava.servlet.http.HttpUtilsNguyễ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 HttpServletResponseString 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 SearchAccount servlet để tra cứu thông tin danh bạ.Nguyễn Quang Hùng*Bài tập: Ư.D DBĐTViết servlet InputFormimport javax.servlet.*; import javax.servlet.http.*; import java.io.IOException; public class InputForm extends HttpServlet { 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 requestpublic void doGet ( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); // Write to client out.println(“InputForm"); out.println(""); out.println("Trang Web demo viec tra danh ba dien thoai."); out.println(""); out.println("Nhap ten thue bao: "); out.println("Nhap so dien thoai: "); out.println("Nhap dia chi: "); out.println(""); out.println(""); out.println("");}Nguyễn Quang Hùng*Bài tập: Ư.D DBĐT Kết quả hiển thị trên trình duyệtInputForm Trang Web demo viec tra danh ba dien thoai. Nhap ten thue bao : Nhap so dien thoai : Nhap dia chi : Nguyễn Quang Hùng*Bài tập: Ứ.D DBĐTViết servlet SearchAccountimport 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 requestpublic void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); out.println("SearchAccount"); out.println("Ket qua tra dien thoai theo yeu cau cua ban :"); out.println(""); 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("So thu tuTen thue baoSo dien” + “ thoaiDia chi\n"); if (rs != null) { for ( int i = 1; rs.next(); ) { out.println("" + i +"" + rs.getString(2) + "" + rs.getString(3) + "" + rs.getString(4) + "\n"); } // end for } // end if out.println(""); 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
Các file đính kèm theo tài liệu này:
- hung_java_servlet_programming_4287.ppt