Lập trình web - Chương 5: Lập trình web – CGI

Các đặc điểm của ứng dụng web: – Không phải là một ứng dụng độc lập, là ứng dụng chạy trên nền web-server. – Người lập trình có thể thực hiện các thao tác trên ứng dụng web như với một ứng dụng độc lập. – Có thể lấy thông tin từ user.

pdf112 trang | Chia sẻ: nguyenlam99 | Lượt xem: 1044 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Lập trình web - Chương 5: Lập trình web – CGI, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Lập trình mạng – Chương 5 1 CHƯƠNG 5: LẬP TRÌNH WEB – CGI 5.1 Giới thiệu về lập trình web 5.2 HTMLs và FORMs 5.3 Lập trình web ở Client 5.4 DHTML 5.5 Phương pháp lập trình web với CGI Lập trình mạng – Chương 5 2 5.1 Giới thiệu về lập trình web • Hệ thống WWW tĩnh: – Tập hợp các trang HTML – Không tương tác được với user – Khó khăn trong việc cập nhật thông tin thường xuyên. • Ứng dụng web: – Có thể tương tác với user. – Có thể tương tác với các ứng dụng khác. Lập trình mạng – Chương 5 3 5.1 Giới thiệu về lập trình web • Các đặc điểm của ứng dụng web: – Không phải là một ứng dụng độc lập, là ứng dụng chạy trên nền web-server. – Người lập trình có thể thực hiện các thao tác trên ứng dụng web như với một ứng dụng độc lập. – Có thể lấy thông tin từ user. Lập trình mạng – Chương 5 4 5.2 HTMLs và FORMs • HTML(HyperText Markup Language): – Là ngôn ngữ dùng để biểu diễn trang web thông qua các tags. – Thông qua các tags có thể định dạng cách hiển thị trang web. – Một trang HTML có thể chèn các hình ảnh, âm thanh trong nó, có thể liên kết đến các trang HTML khác. Lập trình mạng – Chương 5 5 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Khung của một file HTML: Tiêu đề của trang web Lập trình mạng – Chương 5 6 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Tiêu đề: • (n: 1=>6) – Phân đoạn: • – Kiểu chữ: • In đậm: • In nghiêng: • Gạch dưới: Lập trình mạng – Chương 5 7 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Danh sách: • Đánh thứ tự: []+ • Không đánh thứ tự: []+ – Bảng: [ [ ]+ ]+ Trộn các ô:   Lập trình mạng – Chương 5 8 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Chèn hình ảnh: • – Tạo điểm đánh dấu (bookmark): – Liên kết đến bookmark: • – Liên kết đến một trang web khác: • – Liên kết đến địa chỉ e-mail: • Lập trình mạng – Chương 5 9 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Giữ định dạng đoạn khi soạn thảo: • – Các ký tự đặc biệt: • Khoảng trắng:   • © : © • ® : ® • < : < • > : > • & : & Lập trình mạng – Chương 5 10 5.2 HTMLs và FORMs • Các tags HTML cơ bản: – Số mũ: • Superscript: • Subscript: – Định dạng font chữ: • – Đường ngăn cách: • – Xuống dòng trong một đoạn: • Lập trình mạng – Chương 5 11 5.2 HTMLs và FORMs • Tạo các frame: – Khái niệm frame trong HTML cho phép hiển thị nhiều trang HTML đồng thời. – Minh họa: Lập trình mạng – Chương 5 12 5.2 HTMLs và FORMs • Cú pháp tạo frame: []+ [ Your browser doesn't support them. ] Lập trình mạng – Chương 5 13 5.2 HTMLs và FORMs • FORMs – Là các thành phần của HTML cho phép user có thể nhập thông tin vào. – Tương tự như giao diện của một ứng dụng bao gồm: textbox, listbox, checkbox, – Dữ liệu được do user nhập được truyền giữa web-client và web-server thông qua FORMs – Dùng các tags để thiết kế. Lập trình mạng – Chương 5 14 5.2 HTMLs và FORMs • FORMs – Cấu trúc cơ bản của một form: []+ – Các loại (type) INPUT: • TEXT: là textbox dùng để nhập dữ liệu. – Cú pháp: <INPUT [TYPE=TEXT] NAME="text-id" [SIZE=nn] [MAXLENGTH=nn] [VALUE="default text"]> Lập trình mạng – Chương 5 15 5.2 HTMLs và FORMs • FORMs(tt) – Các loại (type) INPUT: • SUBMIT: truyền dữ liệu form đến ứng dụng web – Cú pháp: <INPUT TYPE=SUBMIT [NAME="button-id"] [VALUE="text"]> • RESET:đưa nội dung của form trở về giá trị ban đầu – Cú pháp: • BUTTON: nút nhấn bất kỳ – Cú pháp: <INPUT TYPE=BUTTON [NAME="button-id"] [VALUE="text"]> Lập trình mạng – Chương 5 16 5.2 HTMLs và FORMs • FORMs(tt) – Các loại (type) INPUT: • RATIO: chọn lựa một trong nhiều – Cú pháp: <INPUT TYPE=RADIO NAME="radio-set-id" VALUE="choice-id" [checked]> Option 1 Option 2 Option 3 Lập trình mạng – Chương 5 17 5.2 HTMLs và FORMs • FORMs(tt) – Các loại (type) INPUT: • CHECKBOX: lựa chọn một hoặc nhiều – Cú pháp: <INPUT TYPE=CHECKBOX NAME="id" VALUE="choice-id" [CHECKED]> – Ví dụ: Check 1 <input type="checkbox" name="C1" value="ON" checked>Check 2 Lập trình mạng – Chương 5 18 5.2 HTMLs và FORMs • FORMs(tt) – Các loại (type) INPUT: • HIDDEN: dữ liệu không hiển thị – Cú pháp: <INPUT TYPE=HIDDEN NAME="id" VALUE="data"> – Nhập vùng văn bản: TEXTAREA • <TEXTAREA NAME="id" [COLS=nn] [ROWS=nn]>default text Lập trình mạng – Chương 5 19 5.2 HTMLs và FORMs • FORMs(tt) – Lựa chọn listbox: SELECT • [text ]+ Mạng máy tính Lập trình mạng Lập trình mạng – Chương 5 20 5.3 Lập trình web ở Client • Các trang HTML web có thể được lập trình để thực hiện các thao tác thực thi trên web client. • Các phương pháp phổ biến để lập trình hiện nay: – Script (Javascript, Vbscript) – Java Applet – ActiveX Control Lập trình mạng – Chương 5 21 5.3 Lập trình web ở Client • Javascript ở client: – Ngôn ngữ kịch bản chạy trên web client. Có thể làm việc khác nhau trên các loại web browser khác nhau. – Code được chèn xen kẽ với các tags HTML – Các đoạn mã Javasript được chạy dựa vào các sự kiện của các phần tử HTML – Cú pháp các câu lệnh giống ngôn ngữ Java – Không tương tác được với server Lập trình mạng – Chương 5 22 5.3 Lập trình web ở Client • Cú pháp cho một đoạn code Javascript: //các khai báo biến [var variable;]* //các lệnh gọi hàm và các hàm function function-name([agrv]*){ //các câu lệnh khai báo và thực thi [return [value];] } • Sử dụng file Javascript (*.js) đã có: Lập trình mạng – Chương 5 23 5.3 Lập trình web ở Client • Các đối tượng được xây dựng sẵn trong JavaScript: – window: chứa các thuộc tính liên quan đến cửa sổ hiện thời – document: chứa các thuộc tính trong trang web – location: các thuộc tính về địa chỉ trang web – history: các thuộc tính về vị trí mà web browser đã đến Lập trình mạng – Chương 5 24 5.3 Lập trình web ở Client • Mỗi phần tử trong trang HTML đều có thể coi là một đối tượng, có thể khai báo sự kiện để gọi hàm Javascript. – Cú pháp: <tags-name [properties]* [event-name=“procedure call” ]*> – Các sự kiện có thể dùng: • onClick: click chuột vào đối tượng. • onFocus: focus vào đối tượng trong form. Lập trình mạng – Chương 5 25 5.3 Lập trình web ở Client • Javascript – Các sự kiện có thể dùng(tt): • onMouseOver: di chuyển chuột vào trên đối tượng. • onMouseOut: di chuyển chuột ra khỏi đối tượng. • onChange: thay đổi giá trị của các đối tượng chứa văn bản. • onBlur: chuyển focus khỏi đối tượng trong form. • onSelect: chọn phần tử trong listbox. • onLoad: xảy ra khi một document được load. Lập trình mạng – Chương 5 26 5.3 Lập trình web ở Client • Javascript – Có thể dùng để thiết lập/kiểm tra các dữ liệu nhập trên form ở phía web client. – Truy xuất các phần tử trong form thông qua Javascript Các cú pháp bên dưới dùng form = window.document.form-name – checkbox form.check-name.checked = {true|false} Trường hợp dùng nhiều checkbox cùng tên(nhóm) var check_len = form.check-name.length; for (i = 0; i < len; i++){ form.check-name[i].checked={true|false}; } Lập trình mạng – Chương 5 27 5.3 Lập trình web ở Client • Javascript – Option button form.option_name[index].checked = {true|false} – Select form.select_name.options[index].selected = {true|false} Chỉ số hiện thời đang được chọn: form.select_name.selectedIndex – Text form.text_name.value Lập trình mạng – Chương 5 28 5.3 Lập trình web ở Client • Kiểm tra phần tử SELECT var select_value; function dropDownMenu() { var myindex=document.forms[0].menu.selectedIndex; if (myindex==0) { alert("\nYou must make a selection from the drop-down menu."); document.forms[0].menu.focus(); } else { select_value =document.forms[0].menu.options[myindex].value; return true; } } Lập trình mạng – Chương 5 29 5.3 Lập trình web ở Client function isEmail() { if (document.forms[0].elements[1].value == '') { alert ("\n The E-Mail field is blank. \n\n “+ “Please enter your E-Mail address.") document.forms[0].elements[1].focus(); return false; } if (document.forms[0].elements[1].value.indexOf ('@',0) == -1 || document.forms[0].elements[1].value.indexOf ('.',0) == -1) { alert ("\n The E-Mail field requires a \"@\" and a \".\""+ "be used. \n\nPlease re-enter your E-Mail address.") document.forms[0].elements[1].select(); document.forms[0].elements[1].focus(); return false; } return true; } Lập trình mạng – Chương 5 30 5.3 Lập trình web ở Client • Java Applet: – Là một ứng dụng được viết bằng Java, nhúng trong trang HTML. – Khi trang HTML có chứa tag applet được gọi, class applet được tải về máy client và thực thi trên máy client. – Một ứng dụng applet phải thừa kế class java.applet.Applet – Có thể thực hiện các thao tác như một chương trình Java, tuy nhiên bị hạn chế một số chức năng vì tính bảo mật cho máy client. Lập trình mạng – Chương 5 31 5.3 Lập trình web ở Client //file SampleApplet.java import java.applet.*; import java.awt.*; public class SampleApplet extends Applet { String text = "error"; int x = 0; int y = 20; public void init() { text = getParameter("text"); try { x = Integer.parseInt(getParameter("x")); y = Integer.parseInt(getParameter("y")); }catch(NumberFormatException ex){ } } public void paint(Graphics g) { g.setFont(new Font("TimesRoman",Font.BOLD+ Font.ITALIC,36)); g.drawString(text,x,y); } } Lập trình mạng – Chương 5 32 5.3 Lập trình web ở Client sample.html Using the Applet Tag An Applet that Displays Text at a Designated Location Text displayed by browsers that are not Java-enabled. Lập trình mạng – Chương 5 33 5.3 Lập trình web ở Client • Hoạt động của một Applet – Được web browser tải mã(byte code) về máy client. – Method init() sẽ được gọi để khởi động các thông số. – Method start() được gọi để thực thi. – Method stop() được gọi khi người dùng thoát khỏi applet – Method destroy() được thực thi khi applet kết thúc. • ActiveX Control: tương tự như Java Applet, được viết bởi các công nghệ của Mircosoft. Lập trình mạng – Chương 5 34 5.4 DHTML • DHTML (Dynamic HTML) là trang HTML có chứa các đoạn mã JavaScript tạo các hiệu ứng, thay đổi các phần tử trong trang HTML. • DHTML kết hợp giữa HTML, Javascript và Cascading Style Sheets(CSS). • CSS là sự kết hợp giữa các tags HTML và style. Style có thể chứa nhiều thuộc tính. Lập trình mạng – Chương 5 35 5.4 DHTML • Mọi tags HTML đều có style. Javascript có thể dựa trên các biến cố để thay đổi các thuộc tính của style. • Mỗi phần tử trong trang HTML đều có thể được gán ID (khác với name) và có các thuộc tính style. • Có thể dùng tag • Mỗi web browser có thể thực thi một số lệnh khác nhau. Lập trình mạng – Chương 5 36 5.4 DHTML • Phát hiện loại web browser: – Dùng các thuộc tính appName và appVersion của đối tượng navigator var browser_name= navigator.appName; var browser_version = navigator.appName; alert(“You use browser “+browser_name+” version “+ browser_version); – Phân biệt hai loại chính: if(document.all){ //IE the_div=eval(“window.document.all.”+div_name+”.style”); }else if(document.layers){//Netscape the_div=eval(“window.document.all.”+div_name); } Lập trình mạng – Chương 5 37 5.4 DHTML Javascipt example about timer <!-- var second_counter=0, counter=0; function my_timer(){ D = new Date(); seconds= D.getSeconds(); if(seconds!=second_counter) counter++; second_counter=seconds; if(counter>=1000) counter=0; document.images[0].src= get_images(counter/100); document.images[1].src= get_images((counter%100)/10); document.images[2].src= get_images(counter%10); SecondText.innerText=counter; setTimeout('my_timer()',1000); } Lập trình mạng – Chương 5 38 5.4 DHTML function get_images(number){ var newNum= Math.floor(number); return "../images/"+newNum+".jpg"; } --> Timer : 000 seconds Lập trình mạng – Chương 5 39 5.5 Lập trình web với CGI • Trang HTML chỉ chứa các nội dung cố định hoặc có thể thao tác thay đổi qua DHTML ở client • 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 • CGI (Common Gateway Interface) là một chuẩn (standard) để viết ứng dụng web Lập trình mạng – Chương 5 40 5.5 Lập trình web với CGI • Một ứng dụng web theo chuẩn CGI có các đặc điểm: – Là ứng dụng chạy trên nền web server. – Nhận thông tin từ web browser và xuất thông tin để web browser hiển thị thông qua web server. – Ứng dụng có thể được viết với bất cứ ngôn ngữ lập trình có standard input và standard output. (C/C++, Perl, Shell script, Dos shell) Lập trình mạng – Chương 5 41 5.5 Lập trình web với CGI • Cách thức hoạt động của ứng dụng web CGI: – Web server nhận request ứng dụng CGI từ browser. – Web server gọi ứng dụng CGI, truyền các thông số bằng các biến môi trường(thông qua standard input). – Ứng dụng web CGI xử lý, giao tiếp với các ứng dụng khác (database, mail), xuất kết quả dạng HTML qua standard output đến web server. – Web server nhận kết quả và trả về cho browser. Lập trình mạng – Chương 5 42 5.5 Lập trình web với CGI • Hình vẽ minh họa hoạt động CGI Lập trình mạng – Chương 5 43 5.5 Lập trình web với CGI • Ví dụ (Perl): 1 #!/usr/bin/perl 2 # A very common echo script on just about every server 3 $| = 1; 4 print "Content-type: text/plain\n\n"; 5 print "CGI/1.0 test script report\n\n"; 6 if ($ENV{'REQUEST_METHOD'} eq "POST") { 7 $form = ; 8 print "$form \n"; 9 } else { 10 print "argc is $#ARGV \nargv is "; 11 while (@ARGV) { 12 $ARGV=shift; 13 print "$ARGV "; 14 } 15 } Lập trình mạng – Chương 5 44 5.5 Lập trình web với CGI • Ví dụ (Perl): 16 print "\n"; 17 # 18 print "SERVER_SOFTWARE = $ENV{'SERVER_SOFTWARE'}\n"; 19 print "SERVER_NAME = $ENV{'SERVER_NAME'}\n"; 20 print "GATEWAY_INTERFACE = $ENV{'GATEWAY_INTERFACE'}\n"; 21 print "SERVER_PROTOCOL = $ENV{'SERVER_PROTOCOL'}\n"; 22 print "SERVER_PORT = $ENV{'SERVER_PORT'}\n"; 23 print "SERVER_ROOT = $ENV{'SERVER_ROOT'}\n"; 24 print "REQUEST_METHOD = $ENV{'REQUEST_METHOD'}\n"; 25 print "HTTP_AccEPT = $ENV{'HTTP_AccEPT'}\n"; 26 print "PATH_INFO = $ENV{'PATH_INFO'}\n"; 27 print "PATH = $ENV{'PATH'}\n"; 28 print "PATH_TRANSLATED = $ENV{'PATH_TRANSLATED'}\n"; 29 print "SCRIPT_NAME = $ENV{'SCRIPT_NAME'}\n"; Lập trình mạng – Chương 5 45 5.5 Lập trình web với CGI • Ví dụ (Perl): 30 print "QUERY_STRING = $ENV{'QUERY_STRING'}\n"; 31 print "QUERY_STRING_UNESCAPED = $ENV{'QUERY_STRING_UNESCAPED'}\n"; 32 print "REMOTE_HOST = $ENV{'REMOTE_HOST'}\n"; 33 print "REMOTE_IDENT = $ENV{'REMOTE_IDENT'}\n"; 34 print "REMOTE_ADDR = $ENV{'REMOTE_ADDR'}\n"; 35 print "REMOTE_USER = $ENV{'REMOTE_USER'}\n"; 36 print "AUTH_TYPE = $ENV{'AUTH_TYPE'}\n"; 37 print "CONTENT_TYPE = $ENV{'CONTENT_TYPE'}\n"; 38 print "CONTENT_LENGTH = $ENV{'CONTENT_LENGTH'}\n"; 39 print "DOCUMENT_ROOT = $ENV{'DOCUMENT_ROOT'}\n"; 40 print "DOCUMENT_URI = $ENV{'DOCUMENT_URI'}\n"; 41 print "DOCUMENT_NAME = $ENV{'DOCUMENT_NAME'}\n"; 42 print "DATE_LOCAL = $ENV{'DATE_LOCAL'}\n"; 43 print "DATE_GMT = $ENV{'DATE_GMT'}\n"; 44 print "LAST_MODIFIED = $ENV{'LAST_MODIFIED'}\n"; Lập trình mạng – Chương 5 46 Lập trình mạng – Chương 6 47 CHƯƠNG 6: LẬP TRÌNH WEB VỚI CÁC CÔNG NGHỆ PHỔ BIẾN 6.1 Giới thiệu Servlet/JSP 6.2 Lập trình web với Servlet 6.3 Lập trình web với JSP 6.4 Giới thiệu ASP 6.5 Lập trình web với ASP Lập trình mạng – Chương 6 48 6.1 Giới thiệu Servlet/JSP • Servlet là một ứng dụng (class) Java chạy trên nền web server. • Cơ chế hoạt động theo mô hình CGI mở rộng. • Chương trình phải được dịch ra ở dạng byte-code(.class), khai báo với web server. Web server phải hỗ trợ Java. • Phải extends class HttpServlet. Không có method main. Lập trình mạng – Chương 6 49 6.1 Giới thiệu Servlet/JSP • Cần có package servlet.jar để biên dịch ( • Các server hiện hỗ trợ Servlet: – Apache Tomcat ( – Sun’s Java Web Server, free, hiện không cho download ( – New Atlanta’s ServletExec, tích hợp ServletEngine vào các web server( – – • Tham khảo các tài liệu về Servlet: Lập trình mạng – Chương 6 50 6.1 Giới thiệu Servlet/JSP • 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 } } Lập trình mạng – Chương 6 51 6.1 Giới thiệu Servlet/JSP • Biên dịch như một class Java. • File *.class dịch được phải đặt vào đúng thư mục quy định sẵn của web server. – Tomcat: $/webpages/WEB-INF/classes – JWS: $/servlets • Cấu hình cho web server đối với mỗi servlet: – Tomcat: hiệu chỉnh file web.xml trong thư mục $/webpages/WEB-INF theo DTD – JWS: Cấu hình bằng web-based tool được cung cấp. Lập trình mạng – Chương 6 52 6.1 Giới thiệu Servlet/JSP • Cơ chế hoạt động của một servlet: – Web server nhận yêu cầu triệu gọi servlet từ client. • 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() • Nếu servlet đã được khởi tạo, tạo một thread để xử lý yêu cầu. – 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 Lập trình mạng – Chương 6 53 6.2 Lập trình web với Servlet • 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ố: • getParameter(“para-name”) • 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 Lập trình mạng – Chương 6 54 6.2 Lập trình web với Servlet • Ví dụ lấy tất cả các thông số từ client Enumeration parameter_names = request.getParameterNames(); while(parameter_names.hasMoreElements()){ String para = parameter_names.nextElement(); out.print(para + “ = ”); String[] paraValues = getParameterValues(para); if(paraValues.lenght()==1){ out.println(paraValues[0]); }else{ for(int i = 0, i< paraValues.lenght(),i++){ out.print(paraValues[i]+ “-”); } } } Lập trình mạng – Chương 6 55 6.2 Lập trình web với Servlet • 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: • Cookie[] getCookies(): dãy Cookie từ client • int getContentLength(): trả giá trị Content-Length • int getContentType(): trả giá trị Content-Type • int getRemoteUser(): giá trị username nếu có authenticate Lập trình mạng – Chương 6 56 6.2 Lập trình web với Servlet • Lấy các thông số HTTP request header: – Lấy các giá trị của biến môi trường CGI: • QUERY_STRING: getQueryString() • REMOTE_ADDR: getRemoteAddr() • REMOTE_HOST: getRemoteHost() • REQUEST_METHOD: getMethod() • PATH_INFO: getPathInfo() • SCRIPT_NAME: getServletPath() • SERVER_NAME: getServerName() • SERVER_PORT: getServerPort() • HTTP_XXX_YYY: getHeader(“Xxx-Yyy”) • Lập trình mạng – Chương 6 57 6.2 Lập trình web với Servlet • 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 • PrintWriter out = response.getWriter(); – Xử lý các mã HTTP trả về với các method của class HttpServletResponse: • void setStatus(int statusCode): gởi các mã response • void sendError(int errorCode,String msg): gởi mã lỗi theo giao thức HTTP và message • void sendRedirect(String URL): chuyển đến một trang URL khác • Các mã có thể theo giao thức HTTP hoặc dùng các hằng số trong class HttpServletResponse. Lập trình mạng – Chương 6 58 6.2 Lập trình web với Servlet • Xử lý Cookie với web browser: – Chức năng Cookie • Kết hợp với web browser để lưu các thông số cần thiết. • 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). • Lưu trữ username, password • Thông tin để customize web site cho user hay dùng cho cơ chế personalization • Lập trình mạng – Chương 6 59 6.2 Lập trình web với Servlet • 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: • Cookie name: setName(String name) – getName() • Cookie value: setValue(String value) – getValue() • Max Age: setMaxAge(int seconds) – getMaxAge() Lập trình mạng – Chương 6 60 6.2 Lập trình web với Servlet • 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(); } } Lập trình mạng – Chương 6 61 6.2 Lập trình web với Servlet • 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: • Object getValue(String name) [2.2: getAttribute] • void putValue(String name,Object object) [2.2: putAttribute] • void removeValue(String name) [2.2: removeAttribute] • String[] getValueNames() [Enumeration getAttributeNames()] • String getId() • void setMaxInactiveInterval(int seconds) Lập trình mạng – Chương 6 62 6.2 Lập trình web với Servlet • 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) Lập trình mạng – Chương 6 63 6.2 Lập trình web với Servlet • Xử lý kết nối database – Dùng JDBC (Java DataBase Connectivity) để kết nối và thao tác với database. – Quy trình xử lý: • Tạo JDBC driver và URL database • Thiết lập connection đến URL database • Tạo đối tượng statement • Thực thi các câu lệnh SQL • Xử lý kết quả thực thi • Đóng kết nối đến database. Lập trình mạng – Chương 6 64 6.2 Lập trình web với Servlet • Kết nối đến database thông qua OBDC trên Windows: – Tạo DataSourceName trong ODBC 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(); } Lập trình mạng – Chương 6 65 6.2 Lập trình web với Servlet • Có thể kết nối database server bất kỳ 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) Lập trình mạng – Chương 6 66 6.2 Lập trình web với Servlet • Dùng Prepared Statements trong các câu lệnh thay đổi dữ liệu: String preSQLString = “UPDATE students SET score = ? WHERE ID=?”; PreparedStatement pre_stmt= connection.prepareStatement(preSQLString); float[] scores = getScores(); String[] studentIDs = getStudentIDs(); for(int i=0;i< studentIDs.length;i++){ pre_stmt.setFloat(1,scores[i]); pre_stmt.setString(2, studentIDs[i]); pre_stmt.execute(); } Lập trình mạng – Chương 6 67 6.2 Lập trình web với Servlet • Dùng cơ chế Connection Pooling – Tạo một dãy các Connection sẵn sàng. – Dùng cơ chế thread và đồng bộ để chia xẻ các Connection. public synchronized Connection getConnection() throws SQLException{ if(!availableConnections.isEmpty()){ Connection con = availableConnections.lastElement(); availableConnections.removeElementAt( availableConnections.size()-1); busyConnections.addElement(con); return con; }else{ // } } Lập trình mạng – Chương 6 68 6.3 Lập trình web với JSP • JSP (Java Server Pages) là một trang HTML xen các đoạn mã Java. • Trang JSP sẽ được web server biên dịch theo thành bytecode, cơ chế hoạt động tương tự như Servlet. • Được tạo sẵn các đối tượng của các class HttpServletRequest và HttpServletResponse để xử lý giao tiếp với web client. Lập trình mạng – Chương 6 69 6.3 Lập trình web với JSP • Các đoạn mã Java trong trang JSP được đặt trong tag: – Giá trị biểu thức: – Khai báo các biếm – Java code – Chú thích • Các khai báo chỉ thị (derective): – – – – Lập trình mạng – Chương 6 70 6.3 Lập trình web với JSP Ví dụ trang JSP Request Information JSP Request Method: request.getMethod() Request URI: request.getRequestURI() Request Protocol: request.getProtocol() Servlet path: request.getServletPath() Path info: request.getPathInfo() Path translated: Lập trình mạng – Chương 6 71 6.3 Lập trình web với JSP Check admin account <% out.println(con.getHeader()); check.processRequest(request); if(check.check()==true){ out.println("Hello administrator "+check.getName()+""); } else{ %> Invalid password.Please try again <%} out.println(con.getFooter()); %> Lập trình mạng – Chương 6 72 6.3 Lập trình web với JSP • Các đối tượng được xây dựng sẵn trong một trang JSP: – request: đối tượng class HttpServletRequest – response: đối tượng class HttpServletResponse – out: đối tượng class PrintWriter – session: đối tượng class HttpSession tạo ra từ method getSession() của đối tượng request – application: đối tượng class ServletContext – config: đối tượng class ServletConfig Lập trình mạng – Chương 6 73 6.4 Giới thiệu ASP • ASP là một trang HTML có chứa các mã script (VBScript hay JavaScript). Các script này có thể: – Lấy thông tin từ user. – Sinh nội dung động. – Thao tác với database. – • Trang ASP được chạy trên web-server hỗ trợ (server-side) Lập trình mạng – Chương 6 74 6.4 Giới thiệu ASP • Các công cụ: – Soạn thảo : • Có thể dùng trình soạn thảo văn bản text bất kỳ. • Các công cụ trực quan : Ms. Visual InterDev, Ms. FrontPage, Macromedia Dreamweaver – Web server: • Win9x : Personal Web Server • Win NT/2000 : Internet Information Services. • Chili!Soft : (UNIX support) • HalcyonSoft : Lập trình mạng – Chương 6 75 6.4 Giới thiệu ASP • Thêm script xử lý vào trang ASP: – Đặt mã trong cặp dấu : • Ví dụ : – Dùng tag SCRIPT : • . • Ví dụ : REM Hello World Lập trình mạng – Chương 6 76 6.5 Lập trình web với ASP • Đối tượng xử lý request sẵn có của ASP: Request. – Lấy thông tin người dùng nhập từ Form: • Request.Form(“field_name”) • Request.Form(index) – Một số field đặc biệt : checkbox, ratio, các field cùng tên Lập trình mạng – Chương 6 77 6.5 Lập trình web với ASP • Đối tượng xử lý response sẵn có của ASP: Response –Các phương thức chính: • Reponse.Write(“String”) • Reponse.Redirect(“URL”) Lập trình mạng – Chương 6 78 6.5 Lập trình web với ASP • Đối tượng Application: – Quản lý thông tin về ứng dụng. Có thể dùng để lưu trữ dữ liệu, đối tượng. • Đối tượng Session: – Quản lý thông tin về phiên làm việc(session), có thể lưu dữ liệu, đối tượng của một session • Đố tượng Server: – Đặt các thuộc tính, tạo đối tượng mới Lập trình mạng – Chương 6 79 6.5 Lập trình web với ASP • Thao tác database: có thể dùng ADO để thao tác. • Ví dụ về đọc dữ liệu từ database Dim objRecordset Set objRecordset = Server.CreateObject(“ADODB.Recordset”) objRecordset.Open “table-name”, “DSN=dsn” Do While NOT objRecordset.EOF Response.Write objRecordset(“field-name”) objRecordset.MoveNext Loop Lập trình mạng – Chương 6 80 6.5 Lập trình web với ASP • Đọc dữ liệu bằng câu lệnh SQL: strSQL = “Select * FROM table WHERE .” objRecordset.Open strSQL, “DSN=dsn” • Dùng in dữ liệu theo dạng bảng, danh sách, listbox • Có thể dùng cách này để hiện thực việc tìm kiếm. Lập trình mạng – Chương 6 81 6.5 Lập trình web với ASP • Thêm mới record: Set obj-Recordset-name = Server.CreateObject(“ADODB.Recordset”) objRecordset-name.Open “table-name”, “DSN=dsn”, _ adOpenDynamic, adLockOptimistic obj-Recordset-name.AddNew obj-Recordset-name.Fields(“field-name”) = obj-Recordset-name.Update ‘. obj-Recordset-name.Close Lập trình mạng – Chương 6 82 6.5 Lập trình web với ASP • Cập nhật thông tin trong record: strSQLUpdate = “UPDATE table SET field1=, field2= WHERE ” objRecordset. Excute strSQLUpdate Lập trình mạng – Chương 7 83 CHƯƠNG 7: ỨNG DỤNG XML TRONG LẬP TRÌNH MẠNG 7.1 Giới thiệu ngôn ngữ XML 7.2 XML trong các ứng dụng mạng 7.3 Một số ví dụ. Lập trình mạng – Chương 7 84 7.1 Giới thiệu ngôn ngữ XML • XML (Extensible Markup Language) là tập con của SGML (Standard Generalized Markup Language), được đơn giản hóa để hướng tới web. • Các đặc điểm: – Meaningful Searches – XML/EDI (XML for Electronic Data Interchange) – Enterprise Application Integration – Data accessibility/ Application simplification Lập trình mạng – Chương 7 85 7.1 Giới thiệu ngôn ngữ XML • So sánh HTML và XML: – Đều là tập con của SGML – HTML định dạng các tag để hiển thị, XML định dạng các tag thể hiện ngữ nghĩa dữ liệu. – XML hướng đến việc xử lý dữ liệu ở client. – XML có thể làm dữ liệu trao đổi giữa các ứng dụng trên Internet. – XML có thể dùng để lưu trữ dữ liệu như một database. Lập trình mạng – Chương 7 86 7.1 Giới thiệu ngôn ngữ XML • Cấu trúc file XML: – Được định nghĩa dựa vào các tags theo cấu trúc phân cấp. – Các tag do người sử dụng đặt – Tags và cấu trúc XML được định nghĩa theo DTD (Document Type Definition) hoặc XML Schema Lập trình mạng – Chương 7 87 7.1 Giới thiệu ngôn ngữ XML • Ví dụ file XML đơn giản: URAMOTO Naohiko uramoto@jp.ibm.com TAMURA Kent Lập trình mạng – Chương 7 88 7.1 Giới thiệu ngôn ngữ XML • DTD: <!ATTLIST link manager IDREF #IMPLIED subordinates IDREFS #IMPLIED> Lập trình mạng – Chương 7 89 7.1 Giới thiệu ngôn ngữ XML • Truy xuất các phần tử trong file XML: – Có thể sử dụng bất cứ ngôn ngữ lập trình trên các platform khác nhau. – Các cách truy xuất đã được W3C(www.w3c.org) định nghĩa • Document Object Model(DOM) • XPointer • XML StyleSheet Language(XSL) • XML Query Language(XQL) • Lập trình mạng – Chương 7 90 7.2 XML trong các ứng dụng mạng • Định nghĩa các format dữ liệu để trao đổi: – Cấu trúc file XML với DTD hay XML Schema quy định về protocol giao tiếp. – Dữ liệu được biểu diễn theo các tag. – Là môi trường để các hệ thống không đồng nhất có thể giao tiếp với nhau. – Hệ thống cho phép mở rộng nhiều đối tượng tham gia, mở rộng giao dịch mà không ảnh hưởng đến các giao dịch cũ. – Có thể truyền qua giao thức HTTP Lập trình mạng – Chương 7 91 7.2 XML trong các ứng dụng mạng • Ví dụ mô hình giao dịch ngân hàng: Bank A Bank B Bank C XML Lập trình mạng – Chương 7 92 7.2 XML trong các ứng dụng mạng • Các công nghệ dựa trên XML được sử dụng hiện nay: – Simple Object Access Protocol(SOAP) • Các dữ liệu XML được truyền qua giao thức HTTP như một đối tượng. – Web services • Chuẩn XML được hỗ trợ để truyền giữa các ứng dụng web để trao đổi dữ liệu. – Microsoft .NET Framework Lập trình mạng – Chương 7 93 7.3 Một số ví dụ 1. import org.apache.xerces.parsers.DOMParser; 2. import org.apache.xml.serialize.*;import org.w3c.dom.*; 3. import org.xml.sax.*; 4. private Document document; 5. private Node root; 6. private DOMParser parser = new DOMParser(); 7. try 8. { 9. //pre-parse 10. ByteArrayInputStream input = new ByteArrayInputStream(inBuffer); 11. parser.setFeature(""+ 12. "features/dom/include-ignorable-whitespace",false); 13. parser.parse(new InputSource(input)); 14. document=parser.getDocument(); 15. //Set DOCTYPE for input document 16. OutputFormat format=new OutputFormat(); 17. format.setDoctype(null,"requestInformation.dtd"); Lập trình mạng – Chương 7 94 18. ByteArrayOutputStream output = new ByteArrayOutputStream(); 19. XMLSerializer serial =new XMLSerializer(output,format); 20. serial.serialize(document); 21. inBuffer = output.toByteArray(); 22. //real-parse 23. input = new ByteArrayInputStream(inBuffer); 24. parser.reset(); 25. parser.parse(new InputSource(input)); 26. document=parser.getDocument(); 27. root = this.document.getDocumentElement(); 28. 29. //Get information 30. Node cardNumberNode = root.getFirstChild(); 31. cardNumber = cardNumberNode.getFirstChild().getNodeValue(); 32. cardNumber = this.cardNumber.trim(); 33. }catch (Exception e){} Lập trình mạng – Chương 8 95 CHƯƠNG 8: BẢO MẬT DỮ LIỆU TRUYỀN TRÊN MẠNG 8.1 Các vấn đề về bảo mật dữ liệu 8.2 Các phương pháp mã hóa dữ liệu 8.3 Ví dụ mã hóa trong Java. Lập trình mạng – Chương 8 96 8.1 Các vấn đề về bảo mật dữ liệu • Secrecy: Thông tin truyền đi chỉ được phần tử gởi và nhận đọc mà thôi. • Authentication: Xác định đúng đối tác trước khi thực hiện một giao dịch trên mạng. • Non-repudiation: Chứng minh được chính đối tác đã gởi thông tin. • Integrity control: Thông tin truyền đảm bảo không bị thêm bớt trong quá trình truyền Lập trình mạng – Chương 8 97 8.1 Các vấn đề về bảo mật dữ liệu • Các nguy cơ tính bảo mật bị đe dọa: – Thông tin bị đánh cắp: • NIC card có thể lấy các thông tin không phải của máy mình A B C src:B dest:A payload Lập trình mạng – Chương 8 98 8.1 Các vấn đề về bảo mật dữ liệu • Các nguy cơ tính bảo mật bị đe dọa(tt): – Thông tin giả mạo • Chương trình giả mạo phần tử gởi để gởi cho phần tử nhận ( C giả mạo B gởi cho A) A B C src:B dest:A payload Lập trình mạng – Chương 8 99 8.1 Các vấn đề về bảo mật dữ liệu • Nguy cơ tấn công DOS (Denial of service) – Tấn công bằng cách gởi nhiều message để làm tê liệt hệ thống A B C SYN SYN SYN SYN SYN SYN SYN Lập trình mạng – Chương 8 100 8.2 Các phương pháp mã hóa dữ liệu • Bảo mật bằng cách mã hóa (cryptography) dữ liệu trước khi truyền. • Các phương pháp mã hóa: – Mã hóa đối xứng, giải thuật bí mật (private key) – Giải thuật khóa công khai (public key) Lập trình mạng – Chương 8 101 8.2 Các phương pháp mã hóa Lập trình mạng – Chương 8 102 8.2 Các phương pháp mã hóa • Các vấn đề cần quan tâm trong hiện thực mã hoá: • Giải thuật mã hóa (cryptography algorithm) • Giao thức mã hóa (cryptography protocol) • Quản lý khóa (key management) Lập trình mạng – Chương 8 103 8.2 Các phương pháp mã hóa • Các giải thuật mã hóa đơn giản: – Thay thế một ký tự bằng một ký tự hay nhóm ký tự khác: • Ví dụ: – Hoán vị thứ tự các ký tự theo một quy tắc plaintext: abcdefghijklmnopqrstuvwxyz ciphertext: mnbvcxzasdfghjklpoiuytrewq Plaintext: bob. i love you. alice ciphertext: nkn. s gktc wky. mgsbc Lập trình mạng – Chương 8 104 8.2 Các phương pháp mã hóa • Phương pháp mã hóa khoá bí mật: – Giải thuật DES: Data Encryption Standard • US encryption standard [NIST 1993] • 56-bit symmetric key, 64 bit plaintext input Lập trình mạng – Chương 8 105 8.2 Các phương pháp mã hóa • Phương pháp mã hóa khóa công khai (public key): Lập trình mạng – Chương 8 106 8.2 Các phương pháp mã hóa • Giải thuật RSA (Rivest, Shamir, Adelson) cho giải thuật mã hóa khóa công khai – Chọn hai số nguyên tố p,q liền nhau – Tính n = p.q, z = (p-1)(q-1) – Chọn e<n là không có thừa số chung với z – Chọn d sao cho ed mod z = 1 – Khóa công khai là (n,e). Khoá bí mật là (n,d). Lập trình mạng – Chương 8 107 8.2 Các phương pháp mã hóa • Giải thuật RSA(tt) • Với mẫu bit m muốn gởi, tính c = me mod n và gởi c • Bên nhận nhận được mẫu bit c, tính ra m = cd mod n m = (m mod n) e mod n d Lập trình mạng – Chương 8 108 4 Ñoái Taùc 1 Ñoái Taùc 2 ÑT1 gôûi public-key cho ÑT2 ÑT2 gôûi public-key cho ÑT1 ÑT1 gôûi döõ lieäu maõ hoùa cho ÑT2 vaø döõ lieäu kieåm tra tính toaøn veïn ÑT2 gôûi döõ lieäu maõ hoaù cho ÑT1 vaø döõ lieäu kieåm tra tính toaøn veïn 1 2 3 5 6 8 7 Ví dụ giao thức mã hoá public key Lập trình mạng – Chương 8 109 8.3 Ví dụ mã hóa trong Java. 1. import java.security.*; import java.security.spec.*; import java.security.interfaces.*; 2. import javax.crypto.*; import javax.crypto.spec.*; 3. import javax.crypto.interfaces.*; import com.sun.crypto.provider.SunJCE; 4. // 5. SunJCE jce = new SunJCE(); 6. Security.addProvider(jce); 7. System.out.println("BANK SERVER receives Client's public key"); 8. byte[] clientPubKeyEnc = SocketUtil.receive(in); 9. KeyFactory serverKeyFac = KeyFactory.getInstance("DH"); 10. X509EncodedKeySpec x509KeySpec = 11. new X509EncodedKeySpec(clientPubKeyEnc); 12. PublicKey clientPubKey = serverKeyFac.generatePublic(x509KeySpec); 13. DHParameterSpec dhParamSpec = ((DHPublicKey)clientPubKey).getParams(); 14. System.out.println("SERVER: Generate DH keypair with Client ..."); 15. KeyPairGenerator serverKeyPairGen = KeyPairGenerator.getInstance("DH"); 16. serverKeyPairGen.initialize(dhParamSpec); 17. KeyPair serverKeyPair = serverKeyPairGen.generateKeyPair(); Lập trình mạng – Chương 8 110 8.3 Ví dụ mã hóa trong Java. 18. System.out.println("BANK SERVER: Initialize KeyAgreement with Client..."); 19. KeyAgreement serverKeyAgree = KeyAgreement.getInstance("DH"); 20. serverKeyAgree.init(serverKeyPair.getPrivate()); 21. byte[] serverPubKeyEnc = serverKeyPair.getPublic().getEncoded(); 22. SocketUtil.send(out,serverPubKeyEnc); 23. 24. serverKeyAgree.doPhase(clientPubKey, true); 25. byte[] serverSharedSecret = serverKeyAgree.generateSecret(); 26. System.out.println("BANK SERVER's Secret-Key with WebSiteClient : "+ 27. CipherUtil.toHexString(serverSharedSecret)); 28. 29. serverKeyAgree.doPhase(clientPubKey, true); 30. SecretKey serverDesKey = serverKeyAgree.generateSecret("DES"); 31. Cipher serverCipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); 32. Mac serverMac = Mac.getInstance("HmacSHA1"); 33. serverMac.init(serverDesKey); Lập trình mạng – Chương 8 111 8.3 Ví dụ mã hóa trong Java. 34. //Bank Server receives encrypted-data and Mac-code from Client 35. byte[] cipherTextBefore = SocketUtil.receive(in); 36. byte[] textMacBefore = SocketUtil.receive(in); 37. 38. //Bank Server decrypts encrypted-data and 39. //computes received-data's Mac-code 40. serverCipher.init(Cipher.DECRYPT_MODE, serverDesKey); 41. byte[] recoveredText = serverCipher.doFinal(cipherTextBefore); 42. byte[] textMacBeforePre = serverMac.doFinal(recoveredText); 43. //Bank Server process data 44. BankProcess bankPro; 45. if(java.util.Arrays.equals(textMacBefore, textMacBeforePre)) 46. { 47. System.out.println("Data received from WebSiteClient is valid"); 48. bankPro = new BankProcess(recoveredText,false);//no have error 49. } Lập trình mạng – Chương 8 112 8.3 Ví dụ mã hóa trong Java. 50. else{ 51. System.out.println("Data received is NOT valid"); 52. } 53. byte[] result = bankPro.getResult(); 54. 55. //Server encrypts result and computes its Mac-code 56. serverCipher.init(Cipher.ENCRYPT_MODE, serverDesKey); 57. byte[] cipherTextAfter = serverCipher.doFinal(result); 58. byte[] textMacAfter = serverMac.doFinal(result); 59. 60. //Server sends encrypted-result and Mac-code to client 61. SocketUtil.send(out,cipherTextAfter); 62. SocketUtil.send(out,textMacAfter); 63. // Dùng các packages JCE1.2.1 của Java

Các file đính kèm theo tài liệu này:

  • pdfch05_08_5015.pdf
Tài liệu liên quan