Lập trình web phía server 1 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 Nguyễn Quang Hùng 2 Mục tiêu Học về công[.]
Trang 1Công nghệ Java Servlet
Nguyễn Quang HùngE-mail: hungnq2@cse.hcmut.edu.vn Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm
Trang 2Mụ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
Trang 4Tài liệu tham khảo về Servlet và JSP
J2EE edition, Wrox Press, 2000.
www.ibm.com/developers
Trang 5Tổ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
Trang 6Kiến trúc của 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
Trang 7Web client
(X)HTML /
XML
Web Container Servlet
objects
JSP pages
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
Trang 8Kiến trúc của J2EE
J2EE cung cấp:
• Web container.
• Java Servlet API.
• JavaServer Page (JSP) API.
objects
JSP pages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
Trang 9Kiế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 Container Servlet
objects
JSP pages
Tag Library
RMI/IIOP, JDBC, JMS, JavaMail, JNDI
HTTP(S)
RDBMS
JDBC
Applet
Trang 10Java 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.
Trang 11Quy trình cơ bản khi web server nhận một
HTTP Req
HTTP Res
Uses the mapping Information
J2EE Web Containe
r
Static resources
Web Application
Servlet/JSP instances
Static resources
One or more Servlets or JSP
1
45
6
Trang 12Vò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)
Trang 13Vòng đời của servlet
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.
Trang 14ServletContainer 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 Block all further requests until exists
ready thread
Trang 15Lập trình với Java servlet API
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
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().
Trang 16Lập trình với Java servlet API (tiếp)
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
Trang 17Lập trình với Java servlet API (tiếp)
Servlet context Javax.servlet.ServletContext
Servlet collaboration Javax.servlet.RequestDispatcher
Java.servlet.http.HttpUtils
Trang 18API cho HttpServletRequest
Trang 19API cho HttpServletResponse
9. …
Trang 20Bà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ạ.
Trang 21Bài tập: Ư.D DBĐT Viế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 variables
6. public void init() throws ServletException {
Trang 22Bài tập: Ư.D DBĐT Viết servlet InputForm (tiếp)
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>");
Trang 23<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>
Trang 24Bài tập: Ứ.D DBĐT Viế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 request
7. public void doPost ( HttpServletRequest request,
Trang 25Bài tập: Ứ.D DBĐT Viết servlet SearchAccount (tiếp)
1 //Process the HTTP Post request
2 public void doPost (HttpServletRequest request, HttpServletResponse
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;
Trang 26Bài tập: Ứ.D DBĐT Viết servlet SearchAccount (tiếp)
Trang 27Bài tập: Ứ.D DBĐT
Kết quả chạy thử (tiếp)
Trang 28Kế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.
Trang 29Thảo luận