công nghệ java servlet

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

Upload: creda

Post on 21-Mar-2016

101 views

Category:

Documents


0 download

DESCRIPTION

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. 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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Công nghệ Java Servlet

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

Page 2: Công nghệ Java Servlet

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.

Page 3: Công nghệ 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

Page 4: Công nghệ Java 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/tutorials4. Sun J2SE document API5. IBM Developer web site: www.ibm.com/developers

Page 5: Công nghệ Java Servlet

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 …

Page 6: Công nghệ Java Servlet

Nguyễn Quang Hùng 6

Kiến trúc của J2EE

Web client(X)HTML /

XML

Web ContainerServlet objects

JSPpages

Tag Library

RMI/IIOP, JDBC, JMS, JavaMail, JNDI

HTTP(S)

RDBMS

JDBC

Applet

Page 7: Công nghệ Java Servlet

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.

Page 8: Công nghệ Java Servlet

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

Page 9: Công nghệ Java Servlet

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

Page 10: Công nghệ Java Servlet

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.

Page 11: Công nghệ Java Servlet

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

12 3

45

6

Page 12: Công nghệ Java Servlet

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)

Page 13: Công nghệ Java Servlet

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.

Page 14: Công nghệ Java Servlet

Nguyễn Quang Hùng 16

ServletContainer thread 1 thread 2 Servlet create thread pool

Instantiate servlet instance

Call init() methodPerform initialization

allocate request to threadHTTP 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

Page 15: Công nghệ Java Servlet

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().

Page 16: Công nghệ Java Servlet

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.Servletjavax.servlet.SingleThreadModeljavax.servlet.GenericServletjavax.servlet.http.HttpServlet

Cấu hình sevlet javax.servlet.ServletConfig

Servlet Exception javax.servlet.ServletException

Requests javax.servlet.ServletRequestjavax.servlet.http.HttpServletRequestjavax.servlet.ServletInputStream

Page 17: Công nghệ Java Servlet

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.ServletResponsejavax.servlet.http.HttpServletResponsejavax.servlet.ServletOutput

Session tracking Javax.servlet.http.HttpSessionJava.servlet.http.HttpSessionBindingListener

Servlet context Javax.servlet.ServletContextServlet collaboration Javax.servlet.RequestDispatcher

Khác Javax.servlet.http.CookieJava.servlet.http.HttpUtils

Page 18: Công nghệ Java Servlet

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. …

Page 19: Công nghệ Java Servlet

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. …

Page 20: Công nghệ Java Servlet

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ạ.

Page 21: Công nghệ Java Servlet

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. }

Page 22: Công nghệ Java Servlet

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. }

Page 23: Công nghệ Java Servlet

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>

Page 24: Công nghệ Java Servlet

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. }

Page 25: Công nghệ Java Servlet

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. ……

Page 26: Công nghệ Java Servlet

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()

Page 27: Công nghệ Java Servlet

Nguyễn Quang Hùng 29

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

Page 28: Công nghệ Java Servlet

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.

Page 29: Công nghệ Java Servlet

Nguyễn Quang Hùng 31

Thảo luận