Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server
Lập trình web với CGI
z Trang HTML chỉ chứa các nội dung cố định hoặc có
thể thao tác thay đổi qua DHTML ở client.
z Nhu cầu sử dụng các trang web như một ứng dụng
(giao tiếp với user, tìm kiếm, nội dung thay đổi,
tương tác các ứng dụng, với database )=> ứng
dụng web.
z CGI (Common Gateway Interface) là một chuẩn
(standard) để viết ứng dụng web
Trang 1
Trang 2
Trang 3
Trang 4
Trang 5
Trang 6
Trang 7
Trang 8
Trang 9
Trang 10
Tải về để xem bản đầy đủ
Bạn đang xem 10 trang mẫu của tài liệu "Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
Tóm tắt nội dung tài liệu: Bài giảng Lập trình mạng dùng Socket - Chương 5: Lập trình web chạy ở server
Unavailable Huỷ (Destroyed) Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 15 Lập trình với Servlet API (t.t) z Java Servlet API gồm: – javax.servlet.* z Chứa các class và interface độc lập với HTTP – javax.servlet.http.* z Chứa các class cụ thể cho HTTP z Tất cả sevlet đều phải hiện thực giao diện javax.servlet.Servlet. z Tuy nhiên do chúng ta dùng giao thức HTTP nên javax.servlet.http.HttpServlet là lớp hiện thực giao diện Servlet, nên z Vì vậy ta thường phải kế thừa từ lớp này và override các method doGet()/doPost(). Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 16 Lập trình với Servlet API (t.t) javax.servlet.ServletRequest javax.servlet.http.HttpServletRequest javax.servlet.ServletInputStream Requests javax.servlet.ServletExceptionServlet Exception javax.servlet.ServletConfigCấu hình sevlet javax.servlet.Servlet javax.servlet.SingleThreadModel javax.servlet.GenericServlet javax.servlet.http.HttpServlet Hiện thực servlet Class/InterfaceMục đích Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 17 Lập trình với Servlet API (t.t) Javax.servlet.http.Cookie Java.servlet.http.HttpUtils Khác Javax.servlet.RequestDispatcherServlet collaboration Javax.servlet.ServletContextServlet context Javax.servlet.http.HttpSession Java.servlet.http.HttpSessionBindingListener Session tracking javax.servlet.ServletResponse javax.servlet.http.HttpServletResponse javax.servlet.ServletOutput Responses Class/InterfaceMục đích Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 18 Cơ chế hoạt động của servlet z Web server nhận yêu cầu triệu gọi servlet từ client. z Nếu servlet chạy lần đầu, web server load file servlet tương ứng, khởi tạo các thông số bằng qua method init() z Nếu servlet đã được khởi tạo, tạo một thread để xử lý yêu cầu. z Gọi methods doXxx() để xử lý các request tương ứng theo giao thức HTTP: – doGet cho HTTP GET, doPost cho HTTP POST Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 19 Cấu trúc đơn giản của một Servlet import java.io.*; import java.servlet.*; import java.servlet.http.*; public class Sample extends HttpServlet{ public doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException,IOException{ //dùng đối tượng “request” để đọc dữ liệu từ client //dùng đối tượng “response” để xuất dữ liệu cho client PrintWriter out = response.getWriter(); //dùng đối tượng out để ghi (method print) dữ liệu cho client } } Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 20 Một Servlet đơn giản import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } } Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 21 Lập trình Web với Servlet z 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. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 22 Lập trình Web với Servlet z Lấy dữ liệu từ web client gởi đến bằng servlet – Dùng đối tượng của class HttpServletRequest – Các methods để lấy thông số: z getParameter(“para-name”) z getParameterValues(“para-name”) String username= request.getParameter(“username”); String[] choice = request.getParameterValues(“comments”); – Dùng đối tượng của class HttpServletRequest để lấy các thông tin HTTP header – Ví dụ: Request Parameter Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 23 Lập trình Web với Servlet z Lấy các thông số HTTP request header – class HttpServletRequest cung cấp các method để lấy các thông số request header. – String getHeader(header-name): lấy nội dung của header-name – Enumeration getHeaderNames(): lấy tất cả các header-name. – Một số method điển hình: z Cookie[] getCookies(): dãy Cookie từ client z int getContentLength(): trả giá trị Content-Length z int getContentType(): trả giá trị Content-Type z int getRemoteUser(): giá trị username nếu có authenticate – Ví dụ: Request Header Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 24 Lập trình Web với Servlet z Lấy các thông số HTTP request header (t.t) – Lấy các giá trị của biến môi trường CGI: z QUERY_STRING: getQueryString() z REMOTE_ADDR: getRemoteAddr() z REMOTE_HOST: getRemoteHost() z REQUEST_METHOD: getMethod() z PATH_INFO: getPathInfo() z SCRIPT_NAME: getServletPath() z SERVER_NAME: getServerName() z SERVER_PORT: getServerPort() z HTTP_XXX_YYY: getHeader(“Xxx-Yyy”) z - Ví dụ : Request Info Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 25 Lập trình Web với Servlet z 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. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 26 Lập trình Web với Servlet z Gởi dữ liệu cho web client – Dùng đối tượng của class HttpServletResponse. – Tạo đối tượng PrintWriter để ghi dữ liệu gởi z PrintWriter out = response.getWriter(); – Xử lý các mã HTTP trả về với các method của class HttpServletResponse: z void setStatus(int statusCode): gởi các mã response z void sendError(int errorCode,String msg): gởi mã lỗi theo giao thức HTTP và message z void sendRedirect(String URL): chuyển đến một trang URL khác z Các mã có thể theo giao thức HTTP hoặc dùng các hằng số trong class HttpServletResponse. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 27 Lập trình Web với Servlet z Xử lý Cookie với web browser – Chức năng Cookie z Kết hợp với web browser để lưu các thông số cần thiết. z Thông tin có thể dùng để thiết lập phiên làm việc (session) trong các ứng dụng thương mại điện tử(e-commerce). z Lưu trữ username, password z Thông tin để customize web site cho user hay dùng cho cơ chế personalization z Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 28 Lập trình Web với Servlet z Ghi thông tin Cookie lên máy client – Thông tin được truyền đi trong field Set-Cookie HTTP header – Dùng method addCookie(Cookie cookie) của class HttpServletResponse. – Các thuộc tính quan trọng trong class Cookie: z Cookie name: setName(String name) – getName() z Cookie value: setValue(String value) – getValue() z Max Age: setMaxAge(int seconds) – getMaxAge() – Ví dụ: Cookies Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 29 Lập trình Web với Servlet z Ví dụ String user=“”,pass=“”; Cookie[] cookies = request.getCookies(); if(cookies.length==0){ user = request.getParameter(“username”); pass = request.getParameter(“password”); Cookie name_cookie = new Cookie(“username”,user); response.addCookie(name_cookie); Cookie pass_cookie = new Cookie(“password”,pass); response.addCookie(pass_cookie); } else{ for(int i=0;i<cookies.length;i++){ Cookie cookie = cookies[i]; if(cookie.getName().equals(“username”)) user=cookie.getValue(); if(cookie.getName().equals(“password”)) pass=cookie.getValue(); } } Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 30 Lập trình Web với Servlet z Lưu thông tin về phiên làm việc của user – class HttpSession. – Có thể dùng để lưu bất kỳ đối tượng nào. – Đối tượng của class HttpSession được trả về từ method getSession() của class HttpServletRequest. – Các method thường sử dụng: z Object getValue(String name) [2.2: getAttribute] z void putValue(String name,Object object) [2.2: putAttribute] z void removeValue(String name) [2.2: removeAttribute] z String[] getValueNames() [Enumeration getAttributeNames()] z String getId() z void setMaxInactiveInterval(int seconds) – Ví dụ: Session Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 31 Lập trình Web với Servlet z Ví dụ lưu ShoppingCart vào session HttpSession session = request.getSession(true); ShoppingCart cart = (ShoppingCart)session.getValue(“ShoppingCart”); if(cart==null){ cart = new ShoppingCart(); session.putValue(“ShoppingCart”,cart); } //process(cart) Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 32 Lập trình Web với Servlet z Kết nối cơ sở dữ liệu – Dùng JDBC (Java DataBase Connectivity) để kết nối và thao tác với database. – Quy trình xử lý: z Tạo JDBC driver và URL database. z Thiết lập connection đến URL database. z Tạo đối tượng statement. z Thực thi các câu lệnh SQL. z Xử lý kết quả thực thi. z Đóng kết nối đến database. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 33 Lập trình Web với Servlet z Kết nối đến database thông qua ODBC.JDBC trên Windows – Tạo DataSourceName trong ODBC.JDBC Connection con = null; Statement stmt = null; ResultSet rs = null; String driver = “sun.jdbc.odbc.JdbcOdbcDriver”; String databaseURL = “jdbc:odbc:DataSourceName”; try{ Class.forName(driver); con = DriverManager.getConnection(databaseURL); stmt = con.createStatement() rs = stmt.executeQuery(“SELECT * FROM Products”); while(rs.next()){ out.println(rs.getString[1]+”-” getInt(“quantity”));// } con.close(); }cacth(SQLException se){ con.close(); } Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 34 Lập trình Web với Servlet z Kết nối database server bất kỳ – Cần có driver hỗ trợ. – Kết nối đến Oracle Database Server: driver=“oracle.jdbc.driver.OracleDriver” databaseURL =“jdbc:oracle:thin@localhost:1521:”+dbName con = DriverManager.getConnection(databaseURL,user,password) – Kết nối đến Sysbase: driver=“com.sysbase.jdbc.SysDriver” databaseURL= “jdbc:sysbase:Tds:localhost:1521?SERVICENAME=“+dbName con = DriverManager.getConnection(databaseURL,user,password) Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 35 Bài tập: Ứng dụng tra cứu DBĐT bằng servlet z Viết một InputForm servlet để tạo một HTML form nhập để nhận dữ liệu tra cứu danh bạ điện thoại. z Viết một SearchAccount servlet để tra cứu thông tin danh bạ. Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 36 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 { 7. // TO DO ... 8. } 9. public void doGet (HttpServletRequest request, 10. HttpServletResponse response) 11. throws ServletException, IOException { 12. // TO DO ... 13. } 14. } Viết servlet InputForm Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 37 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(“InputForm"); 7. out.println(""); 8. out.println("Trang Web demo viec tra danh ba dien thoai."); 9. out.println(""); 10. out.println("Nhap ten thue bao: "); 11. out.println("Nhap so dien thoai: "); 12. out.println("Nhap dia chi: "); 13. out.println(""); 14. out.println(""); out.println(""); 15. } Viết servlet InputForm (t.t) Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 38 InputForm Trang Web demo viec tra danh ba dien thoai. Nhap ten thue bao : Nhap so dien thoai : Nhap dia chi : Kết quả hiển thị trên trình duyệt Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 39 1. import java.io.*; import java.util.*; import java.sql.*; 2. public class SearchAccount extends HttpServlet { 3. static final private String CONTENT_TYPE = "text/html"; 4. 5. // Process the HTTP Post request 6. public void doPost (HttpServletRequest request, 7. HttpServletResponse response) 8. throws ServletException, IOException 9. { 10. // TODO 11. // Lay gia tri tu cac textbox tren InputForm 12. } 13. } Viết servlet SearchAccount Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 40 1. //Process the HTTP Post request 2. public void doPost (HttpServletRequest request, HttpServletResponse response) 3. throws ServletException, IOException { 4. response.setContentType(CONTENT_TYPE); 5. PrintWriter out = response.getWriter(); 6. out.println("SearchAccount"); 7. out.println("Ket qua tra dien thoai theo yeu cau cua ban :"); 8. out.println(""); 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; 17. Viết servlet SearchAccount (t.t) Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 41 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("So thu tuTen thue baoSo dien” + 7. “ thoaiDia chi\n"); 8. if (rs != null) { 9. for ( int i = 1; rs.next(); ) { 10. out.println("" + i +"" + rs.getString(2) + 11. "" + rs.getString(3) + "" + 12. rs.getString(4) + "\n"); 13. } // end for 14. } // end if 15. out.println(""); 16. rs.close(); stmt.close(); con.close(); 17. } catch (Exception e) { System.out.println("Error : " + e); } 18. 19. } // End doPost() Viết servlet SearchAccount Tröôøng Ñaïi Hoïc Baùch Khoa Tp.HCM Baûn quyeàn ®2005- Khoa Coâng Ngheä Thoâng Tin Trang 42 Kết quả chạy thử
File đính kèm:
- bai_giang_lap_trinh_mang_dung_socket_chuong_5_lap_trinh_web.pdf