Upload
cu-kim
View
98
Download
2
Tags:
Embed Size (px)
Citation preview
1
Công nghệ Java Servlet
Nguyễn Quang HùngE-mail: [email protected]
Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm
Nguyễn Quang Hùng 2
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 3
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 4
Tài liệu tham khảo 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
Nguyễn Quang Hùng 5
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 6
Kiến trúc của J2EE
Web client(X)HTML /
XML
Web Container
Servlet objects
JSPpages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
Nguyễn Quang Hùng 7
Web client(X)HTML /
XML
Web ContainerServlet objects
JSPpages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
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 8
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.
Web client(X)HTML /
XML
Web ContainerServlet objects
JSPpages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
Nguyễn Quang Hùng 9
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…
Web client(X)HTML /
XML
Web ContainerServlet objects
JSPpages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
Nguyễn Quang Hùng 10
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 11
Quy trình cơ bản khi web server nhận một HTTP request
Web browse
r
Web Server
HTTP Req
HTTP Res
Uses the mapping
InformationJ2EE Web
Container
Static resources
Web Application
Servlet/JSP instances
Static resources
One or more Servlets or JSP
1
23
45
6
Nguyễn Quang Hùng 14
Vòng đời của servlet
Khô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
Unavailable
Huỷ(Destroyed)
Nguyễn Quang Hùng 15
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 Unavailable
Huỷ(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 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
Nguyễn Quang Hùng 17
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 18
Lập trình với Java servlet API (tiếp)
Mục đích Class/Interface
Hiện thực servlet javax.servlet.Servlet
javax.servlet.SingleThreadModel
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
Cấu hình sevlet javax.servlet.ServletConfig
Servlet Exception javax.servlet.ServletException
Requests javax.servlet.ServletRequest
javax.servlet.http.HttpServletRequest
javax.servlet.ServletInputStream
Nguyễn Quang Hùng 19
Lập trình với Java servlet API (tiếp)
Mục đí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
Khác Javax.servlet.http.Cookie
Java.servlet.http.HttpUtils
Nguyễn Quang Hùng 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. …
Nguyễn Quang Hùng 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. …
Nguyễn Quang Hùng 22
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 23
Bài tập: Ư.D DBĐTViết 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 variables6. 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. }
Nguyễn Quang Hùng 24
Bài tập: Ư.D DBĐT Viết servlet InputForm (tiếp)
1. //Process the HTTP Get request2. 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. }
Nguyễn Quang Hùng 25
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 26
Bài tập: Ứ.D DBĐTViết 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 request7. public void doPost (HttpServletRequest request, 8. HttpServletResponse response) 9. throws ServletException, IOException 10. {11. // TODO…12. // Lay gia tri tu cac textbox tren InputForm13. }14. }
Nguyễn Quang Hùng 27
Bài tập: Ứ.D DBĐTViết servlet SearchAccount (tiếp)
1. //Process the HTTP Post request2. 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 SQL11. 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. ……
Nguyễn Quang Hùng 28
Bài tập: Ứ.D DBĐTViết servlet SearchAccount (tiếp)
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 for14. } // end if15. out.println("</table>");16. rs.close(); stmt.close(); con.close(); 17. } catch (Exception e) { System.out.println("Error : " + e);}18. …19. } // End doPost()
Nguyễn Quang Hùng 30
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.