29
1 Công nghệ Java Servlet Nguyễn Quang Hùng E-mail: [email protected] Web site: http://www.cse.hcmut.edu.vn/~hungnq/courses.htm

HUNG -Java Servlet Programming

  • Upload
    cu-kim

  • View
    87

  • Download
    2

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 29

Bài tập: Ứ.D DBĐTKết quả chạy thử (tiếp)

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.

Nguyễn Quang Hùng 31

Thảo luận