Giáo trình Thiết kế và lập trình web (Phần 2) - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ

pdf 63 trang Gia Huy 17/05/2022 1991
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Thiết kế và lập trình web (Phần 2) - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên

Tài liệu đính kèm:

  • pdfgiao_trinh_thiet_ke_va_lap_trinh_web_phan_2_trinh_do_cao_dan.pdf

Nội dung text: Giáo trình Thiết kế và lập trình web (Phần 2) - Trình độ: Cao đẳng - Trường Cao đẳng nghề kỹ thuật công nghệ

  1. BÀI 4: NGÔN NGỮ LẬP TRÌNH WEB Mã bài: MĐCNTT26-04 Mục tiêu: - Trình bày được cú pháp, cấu trúc cơ bản một ngôn ngữ lập trình web: PHP, JSP, ASP.NET - Thiết lập được môi trường làm việc để phát triển ứng dụng web theo ngôn ngữ lựa chọn - Sử dụng được ngôn ngữ lập trình Web để lập trình kết nối và xử lý dữ liệu phía Server (hiển thị, thêm, sửa, xóa dữ liệu ). - Sử dụng được Framework phát triển ứng dụng web phổ biến phù hợp với ngôn ngữ lập trình lựa chọn để xây dựng website theo yêu cầu. Nội dung chính: 1. Giới thiệu 1.1. Giới thiệu ngôn ngữ lập trình web + Ngôn ngữ lập trình PHP: - PHP viết tắt của PHP Hypertext Preprocessor : là ngôn ngữ server-side script, tương tự như ASP, JSP, thực thi ở phía WebServer, tập tin PHP có phần mở rộng là .php, cú pháp ngôn ngữ giống ngôn ngữ C & Perl - PHP : Rasmus Lerdorf in 1994 (được phát triển để phát sinh các form đăng nhập sử dụng giao thức HTTP của Unix) - PHP 2 (1995) : Chuyển sang ngôn ngữ script xử lý trên server. Hỗ trợ CSDL, Upload File, khai báo biến, mảng, hàm đệ quy, câu điều kiện, biểu thức, - PHP 3 (1998) : Hỗ trợ ODBC, đa hệ điều hành, giao thức email (SNMP, IMAP), bộ phân tích mã PHP (parser) của Zeev Suraski và Andi Gutmans - PHP 4 (2000) : Trợ thành một thành phần độc lập cho các webserver. Parse đổi tên thành Zend Engine. Bổ sung các tính năng bảo mật cho PHP - PHP 5 (2005) : Bổ sung Zend Engine II hỗ trợ lập trình HĐT, XML, SOAP cho Web Services, SQLite - Phiên bản mới nhất của PHP là version PHP 7.4 là phiên bản PHP mới nhất được phát hành ngày 28 tháng 11, 2019. Nó giờ đã sẵn sàng để dùng trên toàn bộ Hostinger serve (www.php.net) + Ưu điểm của PHP: PHP được sử dụng làm: - Server Side Scripting - CommandLine Scripting (cron – Linux, Task Scheduler – Windows, Text Processing) - Xây dựng ứng Desktop – PHP GTK Đa môi trường (Multi-Platform): - Web Servers: Apache, Microsoft IIS, Caudium, Netscape Enterprise Server - Hệ điều hành: UNIX (HP-UX, OpenBSD, Solaris, Linux), Mac OSX, Windows NT/98/2000/XP/2003/vista - Hệ QTCSDL: Adabas D, dBase,Empress, FilePro (read-only), Hyperwave, IBM DB2, Informix, Ingres, InterBase, FrontBase, mSQL, Direct MS-SQL, MySQL, 115
  2. ODBC, Oracle (OCI7 and OCI8), Ovrimos, PostgreSQL, SQLite, Solid, Sybase, Velocis,Unix dbm Miễn phí: PHP Software Free Platform Free (Linux) DevelopmentTools Free( PHP Coder, jEdit, ) Được sử dụng rộng rãi trong môi trường phát triển web - 20,917,850 domains (chiếm hơn 32% tên miền website) - 1,224,183 IP addresses (04/2007 Netcraft Survey – + Ngôn ngữ lập trình JSP: Là một ngôn ngữ lập trình Script giúp cho người lập trình có thể viết các đoạn mã Java nhúng trực tiếp trong trang HTML. JSP là sự lựa chọn thông minh cho các ứng dụng chạy trên cả Window và Unix Hình 4.1. Mô hình ứng dụng web với ngôn ngữ JPS Mô tả: Người sử dụng(Client) gửi một yêu cầu HTTP Request(bằng cách truy nhập vào một trang Web) lên Webserver. WebServer sẽ kiểm tra phần mở rộng của file và nếu là có phần mở rộng là .JSP, Webserver chuyển yêu cầu đến cho JSP container để dịch và chạy, sau đó gửi kết quả đến cho người sử dụng. Trong quá trình xử lý, JSP container có thể phải tương tác với các thành phần khác như Cơ sở dữ liệu 116
  3. (thông qua JDBC), các đối tượng Java(JavaBean). Để dịch và chạy được một trang JSP, Webserver cần được cấu hình hợp lý để nhận ra thư viện các lớp Java. Cấu trúc của một trang JSP có dạng như sau: Hello! The time is now Kết quả hiển thị: Hello! The time is now 04/05/2021 + Ngôn ngữ lập trình ASP.NET: Như chúng ta đã biết, ASP vẫn còn tồn đọng một số khó khăn như Code ASP và HTML lẫn lộn, điều này làm cho quá trình viết code khó khăn, thể hiện và trình bày code không trong sáng, hạn chế khả năng sử dụng lại code. Bên cạnh đó, khi triển khai cài đặt, do không được biên dịch trước nên dễ bị mất source code. Thêm vào đó, ASP không có hỗ trợ cache, không được biên dịch trước nên phần nào hạn chế về mặt tốc độ thực hiện. Quá trình xử lý Postback khó khăn, . Đầu năm 2002, Microsoft giới thiệu một kỹ thuật lập trình Web khá mới mẻ với tên gọi ban đầu là ASP+, tên chính thức sau này là ASP.Net. Với ASP.Net, không những không cần đòi hỏi bạn phải biết các tag HTML, thiết kế web, mà nó còn hỗ trợ mạnh lập trình hướng đối tượng trong quá trình xây dựng và phát triển ứng dụng Web. ASP.Net là kỹ thuật lập trình và phát triển ứng dụng web ở phía Server (Server- side) dựa trên nền tảng của Microsoft .Net Framework. Hầu hết, những người mới đến với lập trình web đều bắt đầu tìm hiểu những kỹ thuật ở phía Client (Client-side) như: HTML, Java Script, CSS (Cascading Style Sheets). Khi Web browser yêu cầu một trang web (trang web sử dụng kỹ thuật client-side), Web server tìm trang web mà Client yêu cầu, sau đó gởi về cho Client. Client nhận kết quả trả về từ Server và hiển thị lên màn hình. ASP.Net sử dụng kỹ thuật lập trình ở phía server thì hoàn toàn khác, mã lệnh ở phía server (ví dụ: mã lệnh trong trang ASP) sẽ được biên dịch và thi hành tại Web Server. Sau khi được Server đọc, biên dịch và thi hành, kết quả tự động được chuyển sang HTML/JavaScript/CSS và trả về cho Client. Tất cả các xử lý lệnh ASP.Net đều được thực hiện tại Server và do đó, gọi là kỹ thuật lập trình ở phía server. ASP.Net được Microsoft phát triển qua nhiều phiên bản từ ASP.Net 1.0 , 1.1, 2.0 và gần đây nhất là phiên bản ASP.Net 3.5 chạy trên .Net Framework 3.5 sử dụng môi trường phát triển tích hợp (IDE) Visual Studio.Net 2008 + Các ưu điểm của ASP.Net - ASP chỉ sử dụng VBScript và JavaScript mà không sử dụng được các ngôn ngữ mạnh khác : Visual Basic, C++ Trong khi đó ASP.NET cho phép viết nhiều ngôn ngữ : VBScriptJavaScript, C#, Visual Basic.Net, - ASP.Net sử dụng phong cách lập trình mới: Code behide. Tách code riêng, giao diện riêng . Dễ đọc, dễ quản lý và bảo trì. - Trong các trang ASP chúng ta phải viết mã để kiểm tra dữ liệu nhập từ người dùng , 117
  4. ASP.NET hỗ trợ các validation controls để kiểm tra chúng ta không cần viết mã, - Hỗ trợ phát triển Web được truy cập trên các thiết bị di động: PocketPC, Smartphone - Hỗ trợ nhiều web server control . - Hỗ trợ thiết kế và xây dựng MasterPage lồng nhau. - Hỗ trợ bẫy lỗi (debug) JavaScript - Trang ASP.Net được biên dịch trước. Thay vì phải đọc và thông dịch mỗi khi trang web được yêu cầu, ASP.Net biên dịch những trang web động thành những tập tin DLL mà Server có thể thi hành nhanh chóng và hiệu quả. Yếu tố này làm gia tăng tốc độ thực thi so với kỹ thuật thông dịch của ASP. Hình 4.2. Mô phỏng thông dịch ASP 1.2. Cài đặt và thiết lập môi trường làm việc phát triển ứng dụng web Cơ chế hoạt động của WebServer 118
  5. Để chạy PHP chúng ta cần tải cài đặt các phần mềm sau: + Download PHP - Download PHP for free here: + Download MySQL Database - Download MySQL for free here: + Download Apache Server - Download Apache for free here: à Download WAMP,XAMPP Cài đặt xampp: Hiện nay XAMPP đã ra bản mới hơn hỗ trợ MariaDB nhưng bị lỗi rất nhiều, chúng ta nên dùng phiên bản XAMPP 1.8.3 Ở phần chọn đường dẫn, hãy chọn đường dẫn cần lưu cài đặt của XAMPP. Lưu ý rằng đường dẫn này phải nhớ vì khi cài đặt web lên localhost, phải truy cập vào thư mục này, nên để mặc định là c:\xampp. Tiếp tục ấn Next. 119
  6. Ở trang kế tiếp, bạn bỏ chọn phần “Learn more about Bitnami for XAMPP“. Và ấn Next 2 lần nữa để bắt đầu quá trình cài đặt XAMPP. Sau khi cài xong, ấn nút Finish để kết thúc cài đặt và mở bảng điều khiển của XAMPP. Tuy nhiên, hãy khởi động lại máy sau khi cài đặt xong để tránh tình trạng không khởi động được localhost. Khởi động Localhost Bây giờ hãy vào thư mục c:\xampp và mở file xampp-panel.exe lên để bật bảng điều khiển của XAMPP, để ý sẽ thấy hai ứng dụng Apache và MySQL có nút Start, đó là dấu hiệu bảo 2 ứng dụng này chưa được khởi động, hãy ấn vào nút Start của từng ứng dụng để khởi động Webserver Apache và MySQL Server lên thì mới chạy được localhost. Nếu cả hai ứng dụng chuyển sang màu xanh như hình dưới là đã khởi động thành công. 120
  7. Sau khi khởi động xong, bạn hãy truy cập vào website với địa chỉ là sẽ thấy nó hiển thị ra trang giới thiệu XAMPP như hình dưới. Bạn có thể ấn vào nút English phía bên dưới để truy cập vào trang quản lý localhost. 2. Cấu trúc cú pháp và ngôn ngữ lập trình web 2.1. Các cấu trúc lệnh cơ bản Quy ước mã lệnh: Mã lệnh PHP được đặt trong các cặp thẻ sau : 121
  8. Thẻ mở Thẻ đóng + Tất cả các câu lệnh php đều cách nhau bởi dấu “;” + Không phân biệt khoảng trắng, Tab, xuống dòng trong câu lệnh + Ghi chú : Theo cú pháp ghi chú của C++ & Perl // Đây là ghi chú # Đây là ghi chú /* Đây là ghi chú nhiều dòng*/ Cú pháp các lện cơ bản: Khai báo biến: $ten_bien = value; 122
  9. § Không khai báo kiểu dữ liệu § Biến tự động được khởi tạo ở lần đầu tiên gán giá trị cho biến § Tên biến : – Có thể bao gồm các Ký tự (A Z, a z), Ký số (0 9), _, $ – Không được bắt dầu bằng ký số (0 9) – Phân biệt chữ hoa – chữ thường Ví dụ : $size $my_drink_size $_drinks $drink4you $$2hot4u $drink-size x § Variable variables – Cho phép thay đổi tên biến – Ví dụ: $varname = “my_variable”; $$varname = “xyz”; // $my_variable = “xyz” § Hằng số - Constants – Ví dụ: define(“MY_CONST”, 10); echo MY_CONST; Kiểu dữ liệu: § boolean (bool) § integer (int) § double (float, real) § string § array § object § Chuyển kiểu dữ liệu – Cách 1 (automatic) $var = "100" + 15; $var = "100" + 15.0; $var = 39 . " Steps"; – Cách 2: (datatype) $var – Cách 3: settype($var, “datatype”) $var (int)$var (bool)$var (string)$var null 0 false “” true 1 “1” false 0 “” “6 feet” 6 true “foo” 0 true Kiểm tra kiểu dữ liệu gettype is_string isset is_integer is_array unset 123
  10. is_double is_object empty Ví dụ: $var = "test"; if (isset($var)) echo "Variable is Set"; if (empty($var)) echo "Variable is Empty"; Một số hàm xử lý số abs pow decbin srand(seed) ceil sqrt bindec rand Floor log dechex rand(min, max) round log10 hexdec Ví dụ // Generate a seed $seed = (float) microtime( ) * 100000000; // Seed the pseudo-random number generator srand($seed); // Generate some random numbers print rand(); // between 0 and getmaxrand( ) print rand(1, 6); // between 1 and 6 (inclusive) Kiểu chuỗi – string § Toán tử nối chuỗi : dấu chấm . $s = “Hello” . “ World”; // $s = “Hello World” § Phân biệt dấu nháy đơn và nháy kép $user = “Bill”; print ‘Hi $user’; // Hi $user print “Hi $user”; // Hi Bill print ‘Hi’ . $user; // ???? print ‘Hi’ . ‘$user’; // ???? § Một số hàm xử lý chuỗi – printf trim strtolower – str_pad str_replace strtoupper – strlen substr strcasecmp <? $tax = 0.075; printf('The tax costs $%.2f', $tax); $zip = '6520'; printf("ZIP is %05d”, $zip); $min = -40; $max = 40; 124
  11. printf("The computer can operate between %+d and %+d degrees Celsius.", $min, $max); ?> ” // Print a heading echo str_pad(“Dramatis Personae", 50, " ", STR_PAD_BOTH) . “\n"; // Print an index line echo str_pad(“DUNCAN, king of Scotland”, 30, ".") . str_pad(“Larry”, 20, ".", STR_PAD_LEFT) . “\n"; echo “ ” ?> Mảng – array: § Numbered array $words = array("Web", "Database", "Applications"); echo $words[0]; $numbers = array(1=>"one", "two", "three", "four"); echo $numbers[1]; § Associated array $array = array("first"=>1, "second"=>2, "third"=>3); echo $array["second"]; 125
  12. § Một số hàm xử lý trên mảng – count is_array sort asort ksort usort – min array_reverse rsort arsort krsprt uasort – max uksort § Ví dụ: $dinner = array( 'Sweet Corn and Asparagus', 'Lemon Chicken', 'Braised Bamboo Fungus'); sort($dinner); print "I want $dinner[0] and $dinner[1]."; $dishes = count($dinner); print $dishes; § Một số hàm liên quan đến mảng – reset(array) – array_push(array, elements) : Thêm elements vào cuối mảng – array_pop(array) : Lấy phần tử cuối ra khỏi mảng – array_unshift(array, elements) : Thêm elements vào đầu mảng – array_shift(array) : Lấy phần tử đầu ra khỏi mảng – array_merge(array, array) : kết 2 mảng lại và trả ra mảng mới – shuffle(array) : Sort random mảng – sort(array, flag) : flag = {sort_regular, sort_numeric, sort_string, sort_locale_string} Cấu trúc điều khiển § Điều kiện if § Điều khiển switch § Vòng lặp for § Vòng lặp while § Vòng lặp do While 126
  13. § Vòng lặp foreach § Từ khóa break, continue § if (condition) { statement[s] if true } else (condition) { statement[s] if false } § Ví dụ: § $x = 5; § if ($x < 4) § echo “$x is less than 4”; § else § print ‘$x isn’t less than 4’; $x isn’t less than 4 Điều khiển switch: switch (expression) { case label : statementlist break; case label : statementlist break; default : statementlist } Ví dụ: $menu = 3; switch ($menu){ case 1: echo "You picked one"; break; case 2: echo "You picked two"; break; case 3: echo "You picked three"; case 4: echo "You picked four"; break; default: echo "You picked another option"; 127
  14. } Vòng lặp for: for ([initial expression]; [condition]; [update expression]) { statement[s] inside loop } § Ví dụ: print “ ”; for ($i = 1; $i $i ”; } print “ ”; Vòng lặp while, do while while (expression) { statements } do { statements }while (expression); Ví dụ: $i = 1; $j = 9; while ($i "; $i++; } Kết quả: Vòng lặp foreach: foreach (array as variable) 128
  15. { statements } Ví dụ: $meal = array('breakfast' => 'Walnut Bun', 'lunch' => 'Cashew Nuts and White Mushrooms', 'dinner' => 'Eggplant with Chili Sauce'); print " \n"; foreach ($meal as $key => $value) { print " $key $value \n"; } print ' '; Hàm – function: function functionName ([parameter1] [,parameterN]) { statement[s] ; } function functionName ([parameter1] [,parameterN]) { statement[s] ; return ; } Phạm vi biến: Tham trị vs Tham biến: <?php function doublevalue( $var) { $var = $var * 2; } $variable = 5; doublevalue($variable); 129
  16. echo "\$variable is: $variable"; ?> 2.2. Các sự kiện và xử lý sự kiện Sự kiện và xử lý sự kiện trong ASP.NET + Các Event trong chu trình sống của một Ứng dụng Web Các Tập tin trong một Ứng dụng Web Khi xây dựng một Ứng dụng Web: – Visual Studio .NET biên dịch tấtcả mã nguồn vào một file .DLL lưu trong thư mục/bin – Phần giao diện của ứng dụng nằm ở các file .aspx và .html Chu trình sống của một ứng dụng web – Bắt đầukhimột trình duyệtyêucầu 1 trang web từứng dụng, gọilàSession – Ứng dụng web vẫnchạynếunhư nó vẫn còn Session đang hoạt động – Chu trình sống của1 Web Form chỉ tồntại trong 1 khoảng thời gian ngắn – Người dùng tương tác vớigiaodiện web (gõ vào text box, đánh dấuchọn các check box ) cho đến khi kích hoạtmột sự kiện post-back (nhấn button ) – Dữ liệucủa trang (view state) đượcgửivề cho server – Khi server nhận được view state + Nó tạo ra thể hiệnmớicủaWeb Form + Điềndữ liệu vào view state + Xử lý các sự kiệnxảyra + Trả kết quả HTML về cho trình duyệt và hủy thể hiện củaWeb Form 130
  17. Chu trình sống kết thúc – Khi người dùng tắttrìnhduyệt, hoặcsaumộtkhoảng thời gian không refesh lại trang web thì Session củangười dùng kếtthúc – Nếu không còn Session nào từ người dùng thì ứng dụng web sẽ kết thúc + Lưu trữ dữ liệu trênmột Web Form Vì Web Form có chu trình sống rấtngắn nên ASP.NET có cơ chế đặcbiệt để lưutrữ dữ liệunhập vào trong các control của web form – Dữ liệunhập vào trong các control đượckhởitạo trong sự kiện Page_Init – Càc dữ liệu này sau đó được nạp lại vào control trong sự kiện Page_Load Application & Session Các biến trạng thái Application – Chia sẽ dự liệuchotấtcả người dùng củamột ứng dụng (dữ liệu toàn cụccho đangười dùng) Các biến trạng thái Session – Chia sẽ dữ liệu cho nhiều Web Form trong cùng một Session – Chỉ có session hiện hành có khả năng truy cập đếnbiếntrạng thái Session của chính nó protected void btnShow_Click(object sender, EventArgs e) { // Save the number of clicks in Session state. Session("Clicks") = Session("Clicks") + 1; // Display the number of clicks. Response.Write("Number of clicks: " + Session("Clicks")); } Sự kiện Application và Session 131
  18. Sự kiện Application và Session void Application_Start(object sender, EventArgs e) { ' Record application start. Application("AppCount") = Application("AppCount") + 1; } void Session_Start(object sender, EventArgs e) { ' Count sessions. Application("SessCount") = Application("SessCount") + 1; ' Display session count. Response.Write("Number of applications: " + Application("AppCount") +" "); ' Display session count. Response.Write("Number of sessions: " + Application("SessCount") + " "); } void Session_End(object sender, EventArgs e) { ' Decrement sessions. Application("SessCount") = Application("SessCount") – 1; } void Application_Start(object sender, EventArgs e) { ' Record application start. Application("AppCount") = Application("AppCount") + 1; } void Session_Start(object sender, EventArgs e) { ' Count sessions. Session("SessCount") = Session("SessCount") + 1; ' Display session count. Response.Write("Number of applications: " + Session("AppCount") +" "); ' Display session count. Response.Write("Number of sessions: " + Session("SessCount") + " "); } void Session_End(object sender, EventArgs e) { ' Decrement sessions. Application("SessCount") = Application("SessCount") – 1; } void Application_Start(object sender, EventArgs e) { ' Record application start. 132
  19. Session("AppCount") = Session("AppCount") + 1; } void Session_Start(object sender, EventArgs e) { ' Count sessions. Session("SessCount") = Session("SessCount") + 1; ' Display session count. Response.Write("Number of applications: " + Session("AppCount") +" "); ' Display session count. Response.Write("Number of sessions: " + Session("SessCount") + " "); } void Session_End(object sender, EventArgs e) { ' Decrement sessions. Session("SessCount") = Session("SessCount") – 1; } Page Event Server Control Event Post-back event – Bắt Web page gửivề lại cho server để xử lý ngay lập tức. Validation event – Xử lý trên trang mà không cầnsự kiện post-back Server Control Event Post-back event Button, Link Button, Image Button TextBox, DropDownList, ListBox, - RadioButton, CheckBox - Có thể thiếtlậpsự kiện Post-back 133
  20. cho các control này bằng cách gán thuộc tính AutoPostBack=True Validation event Validation server controls Sự kiện và xử lý sự kiện trong JavaScript Các chương trình JavaScript thường là hướng sự kiện. Các hành động xảy ra trên trang web tác động đến các phần tử HTML. Một sự kiện có thể do người dùng tạo ra hoặc do hệ thống tạo ra. Hầu hết các trình duyệt đều hỗ trợ một đối tượng Event. Mỗi sự kiện có một đối tượng Event tương ứng. Đối tượng Event cung cấp thông tin, loại sự kiện và vị trí của con trỏ tại thời điểm xảy ra . Ví dụ : Khi click chuột vào buttton. Khi load lại một trang web. Nhập thông tin vào trường Input. Thao tác với form HTML. Thao tác với con trỏ chuột tới phần tử hay vị trị nào đó. Các sự kiện trong JavaScript Các sự kiện thông thường mà JavaScript hỗ trợ. – onClick : Được tạo ra bất cứ khi nào người dùng nhấp chuột vào button hoặc các phần tử form hoặc lên các liên kết. function myFunction(){ alert("Xin chào các bạn"); } – onLoad : Được phát sinh khi đã tải xong tài liệu. Nó cũng được phát sinh khi một ảnh đã tải xong. function LoadImage(){ alert("Load Thành Công!!!"); } 134
  21. – onUnload : Xảy ra khi người dùng điều hướng khỏi trang (bằng cách nhấp vào liên kết, gửi biểu mẫu, đóng cửa sổ trình duyệt, vv). Sự kiện form Chúng ta cùng đi tìm hiểu : onChange, onFocus, onSubmit, onSelect, onBlur, onReset. Các sự kiện onFocus, onBlur và onChange thường được sử dụng để kiểm tra dữ liệu nhập của các điều khiển trên form. – onChange : Xảy ra khi giá trị của thành phần được chọn thay đổi. function change(){ alert("Đã thay đổi"); } Select One Tow – onFocus : Được kích hoạt khi người sử dụng đặt focus vào một cửa sổ, khung hay phần tử form. Ví dụ: Khi nhập họ tên của bạn vào ô text thì nó sẽ chuyển thành màu đỏ (red). function myFunction(x) { document.getElementById(x).style.background = "red"; } Tên: – onBlur : Ngược với onFocus. Khi người dùng rời khỏi một phần tử trên form, sự kiện onBlur được kích hoạt. Đối với một số phần tử, nếu nội dung của nó cũng bị thay đổi, thì sự kiện onChange cũng được kích hoạt. Ví dụ: Ta thay đổi màu nền bằng cách focus đến ô text nó sẽ chuyển thành màu vàng, di chuyển ra khỏi ô text sẽ chuyển thành đỏ . Click: – onSubmit : Được sử dụng để kiểm tra tất cả các điều khiển trong form trước khi gửi đi. Tên: 135
  22. function myFunction() { alert("Thông tin đã được gửi"); } – onSelect : Xảy ra khi người sử dụng lựa chọn một trường nhập dữ liệu trên form. – onReset : Khi form được reset. 3. Lập trình kết nối dữ liệu 3.1. Quy trình lập trình kết nối dữ liệu Tạo Kết nối CSDL Kết nối MySQL và Chọn CSDL resource mysql_connect(string host, string LoginName, string password) int mysql_select_db(string dbName, resource connection) Ví dụ: Xây dựng câu truy vấn SQL Ví dụ strSQL = “ INSERT INTO Users (UserName, Password) VALUES INSERT (‘admin',‘123')“ DELETE strSQL = “ DELETE FROM Users WHERE UserName = ‘lvminh’ “ strSQL = “ UPDATE Users SET Password = ‘abc' WHERE UserName = UPDATE ‘admin’ ” SELECT strSQL = “ SELECT * FROM Users WHERE UserName = ‘admin’ ” Thực thi câu truy vấn 136
  23. Xử lý kết quả trả về § Hiển thị dữ liệu trả về – Sử dụng hàm $row = mysql_fetch_array($result) – Số lượng FIELD $num = mysql_num_fields($result); – Truy cập đến từng FIELD echo $row[“UserName”]; Hoặc echo $row[0]; UserName Password A AA B BB C CC 137
  24. Ngắt kết nối dữ liệu bool mysql_close(resource connection) ; Tự động thực thi khi kết thúc mã lệnh nhờ cơ chế tự động thu rác (garbage collector) – PHP4,5 Tổng hợp các bước thao tác CSDL MySQL <?php // 1. Ket noi CSDL $connection = mysql_connect(“hostname",“username",“password"); mysql_select_db(“database_name", $connection); // 2. Chuan bi cau truy van & 3. Thuc thi cau truy van $strSQL = "SELECT * FROM TableName”; $result = mysql_query($strSQL); // 4.Xu ly du lieu tra ve while ($row = mysql_fetch_array($result)) 138
  25. { for ($i=0; $i 3.2. Các xử lý dữ liệu cơ bản: hiển thị, thêm, sửa, xóa, tìm kiếm, thống kê Thêm mẫu tin Để thêm mẫu tin, sử dung hàm mysql_query(chuoi Insert). Chẳng hạn, chúng ta khai báo trang insert.php để thêm mẫu tin vào bảng tblships có hai cột dữ liêu là ShipID và ShipName như ví du trong trang insert.php. ::Welcome to PHP and mySQL Them mau tin Số mẫu tin thêm vào Trong đó, sử dụng hàm mysql_query với 2 tham số là $sql va $link. Kết qủa trả về là số mẫu tin thực thi. Ngoai ra, có thể sử dụng đoạn kết nối cơ sở dữ liệu trong tập tin dbcon.php như ví du sau: Kết quả như sau: 139
  26. Cập nhật mẫu tin: Đối với trường hợp cập nhật mẫu tin, sử dụng hàm mysql_query với Update thay vì Insert như trên, ví du ta khái báo trang update.php để cập nhật mẫu tin trong bảng tblShips với tên là Update Testing khi mà có giá trị là A01. ::Welcome to PHP and mySQL Cap nhat mau tin So mau tin cap nhat Lưu ý rằng, để biết số mẫu tin đã thực thi bởi SQL sử dung hàm mysql_affected_rows. if($result) $affectrow=mysql_affected_rows(); 140
  27. Xóa mẫu tin Tương tự như vậy khi xóa mẩu tin, chỉ thay đổi phát biểu SQL đang Delete như ví du trong tập tin delete.php. ::Welcome to PHP and mySQL Xoa mau tin So mau tin da xoa 141
  28. Cập nhật mẩu tin: Tương tự như trong trường hợp delete, bạn khai báo trang do Update như sau: ::Welcome to PHP and mySQL Cap nhat mau tin "") { switch($strfrom) { case "items": $stSQL ="update tblItems set Activate=1 where ItemID in('".$strid."')"; break; } if($stSQL!="") { $result = mysql_query($stSQL, $link); if($result) $affectrow=mysql_affected_rows(); mysql_close($link); } } ?> So mau tin cap nhat 142
  29. 4. Framework hỗ trợ phát riển ứng dụng web - .NET Framework là nền tảng cho Microsoft.NET Platform - .NET Framework là môi trường cho việc xây dựng, triển khai và vận hành các ứng dụng Web cũng như Web Service - .NET Framework chứa Common Language Runtime (CLR) và các lớp thư viện cung cấp các dịchvụ cơ sở để xây dựng các ứng dụng - .NET Framework giúp đơn giản hóa quá trình phát triển cũng như tích hợp sản phẩm - .NET Framework không phụ thuộc vào ngôn ngữ. Cácngônngữđang đượchỗ trợ : C++, C#, VB.NET, Jscript Bài tập thực hành của học sinh, sinh viên: Bài 1: Sử dụng dấu * để vẽ tam giác trong PHP, đây là một trong những bài cơ bản nhất giúp bạn thực hành cách sử dụng các vòng lặp trong PHP. Gợi ý: + Sử dụng vòng lặp for + Sử dụng vòng lặp do-while + Sử dụng vòng lặp while Code mẫu: sử dụng vòng lặp for // sử dụng vòng lặp for - vẽ tam giác trong PHP, // mỗi dấu * là một đơn vị "; } ?> Bài 2: Viết chương trình để in ra bảng cửu chương trong PHP. Code mẫu: 143
  30. "; for($j = 1; $j "; } echo " "; } ?> Bài 3: Viết chương trình giải phương trình bậc 2: ax2 + bx + c = 0. <?php // khai báo các biến toàn cầu $heso_a = ""; $heso_b = ""; $heso_c = ""; // đọc các hệ số từ FORM if (isset ( $_POST ['heso_a'] )) { $heso_a = $_POST ['heso_a']; } if (isset ( $_POST ['heso_b'] )) { $heso_b = $_POST ['heso_b']; } if (isset ( $_POST ['heso_c'] )) { $heso_c = $_POST ['heso_c']; } / * giải phương trình bậc 2 trong PHP * * @author: viettuts.vn * @param * he so bac 2 $a * @param * he so bac 1 $b * @param * he so tu do $c */ function giaiPTB2($a, $b, $c) { // kiểm tra biến đầu vào if ($a == "") $a = 0; if ($b == "") $b = 0; if ($c == "") 144
  31. $c = 0; // in phương trình ra màn hình echo "Phương trình: " . $a . "x2 + " . $b . "x + " . $c . " = 0"; echo " "; // kiểm tra các hệ số if ($a == 0) { if ($b == 0) { echo ("Phương trình vô nghiệm!"); } else { echo ("Phương trình có một nghiệm: " . "x = " . (- $c / $b)); } return; } // tính delta $delta = $b * $b - 4 * $a * $c; $x1 = ""; $x2 = ""; // tính nghiệm if ($delta > 0) { $x1 = (- $b + sqrt ( $delta )) / (2 * $a); $x2 = (- $b - sqrt ( $delta )) / (2 * $a); echo ("Phương trình có 2 nghiệm là: " . "x1 = " . $x1 . " và x2 = " . $x2); } else if ($delta == 0) { $x1 = (- $b / (2 * $a)); echo ("Phương trình có nghiệm kép: x1 = x2 = " . $x1); } else { echo ("Phương trình vô nghiệm!"); } } ?> Hệ số bậc 2, a " /> Hệ số bậc 1, b " /> Hệ số tự do, c " /> 145
  32. Bài 4: Viết chương trình tính giai thừa của n. Giai thừa của 1 số là tích các số liên tiếp từ 1 đến số đó. Trường hợp đặc biệt, giai thừa của 0 và 1 là 1. Ví dụ: giai thừa của 5 là 1*2*3*4*5 = 120 Gợi ý: Tính giai thừa không sử dụng đệ quy. Tính giai thừ có sử dụng đệ quy. Code mẫu: Tính giai thừa không sử dụng đệ quy <?php $a = 5; $b = 0; $c = 10; / * tinh giai thua * * @author viettuts.vn * @param n: so nguyen duong */ function tinhGiaithua($n) { $giai_thua = 1; if ($n == 0 || $n == 1) { return $giai_thua; } else { for($i = 2; $i <= $n; $i ++) { $giai_thua *= $i; } return $giai_thua; } } 146
  33. // tính giai thừa echo ("Giai thừa của " . $a . " là: " . tinhGiaithua ( $a ) . " "); echo ("Giai thừa của " . $b . " là: " . tinhGiaithua ( $b ) . " "); echo ("Giai thừa của " . $c . " là: " . tinhGiaithua ( $c ) . " "); ?> Bài 5: Viết trang PHP hiển thị kết quả học tập BÀI 5: CÁC ĐỐI TƯỢNG VÀ QUẢN LÝ TRẠNG THÁI Mã bài: MĐCNTT26-05 Mục tiêu: - Hiểu và trình bày được vài trò, cách sử dụng các đối tượng Request, Response, Server, Viewsate, Session, Cookie, Application - Sử dụng các đối tượng Request, Response, Server, Viewsate, Session, Cookie, Application trong việc triển khai ứng dụng web. Nội dung chính: 1. Đối tượng Request Đối tượng Request được dùng để nhận những thông tin từ trình duyệt của người dùng gởi về cho Web Server. Những thông tin này gồm các thông số của Form khi được 147
  34. Submit dùng phương thức POST hoặc GET hay các tham số được ghi cùng với trang ASP.NET trong lời gọi đến trang đó. Dùng đối tượng Request có thể chia sẻ thông tin qua lại giữa các trang ASP.NET trong một ứng dụng và để lấy giá trị các Cookie lưu trữ trên máy Client. Bảng thuộc tính và phương thức của Request Phương thức / Diễn giải thuộc tính Trả về mảng chuỗi của MIME được hỗ trợ bằng trình AccepTypes khách ApplicationPath Trả về đường dẫn ảo của ứng dụng Trả về mảng Byte chứa đựng thông tin nhị phân gởi BinayRead đến Server Trả về đối tượng HttpBrowserCapabilities trình bày Browser thông tin của trình duyệt ClientCertificate Trả về đối tượng HttpClientCertificate ContentEncoding Tập kí tự của thực thể Body ContentLength Chiều dài tính bằng byte của yêu cầu ContentType Loại MILE của yêu cầu Cookies Trả về đối tượng HttpCookiesCollection Filepath Trả về đường dẫn ảo của yêu cầu Files Trả về HttpFileCollection của tập nhiều tập tin được tải lên Server Form Trả về tập dữ liệu của nội dung từ Form Header Trả về tập dữ liệu của nội dung từ HTTP Header HttpMethod Trả về phương thức HTTP sử dụng cho yêu cầu InputStream Là luồng dữ liệu chứa đựng các Input của Form Params Lấy giá trị của phương thức trong Form, QueryString Path Đường dẫn ảo của yêu cầu PathInfo Đường dẫn ảo của yêu cầu PhysicalPath Đường dẫn vật lí của yêu cầu QueryString Trả về một tập dữ liệu của nội dung từ QueryString RawURL URL của yêu cầu RequestType Phương thức HTTP sử dụng cho Resquest TotalByte Dung lượng của Stream trong luồng dữ liệu URL Đối tượng URL chứa đựng chi tiết của yêu cầu UserHostName Tên DNS của người sử dụng MapPath Chuyển đổi đường dẫn ảo thành đường dẫn vật lý SaveAs Lưu yêu cầu HTTP vào đĩa Có 2 cách để gởi thông tin đặc biệt từ trình duyệt đến Web server, đó là thông tin từ phần trong trang được đưa vào HTTP header hay được đưa trực tiếp vào chuỗi truy vấn trong địa chỉ liên kết URL. Đó chính là vai trò của 2 tập hợp QueryString và Form của đối tượng Request. - Tập hợp QueryString: - Để lấy được giá trị từ chuỗi truy vấn ta dùng: - Request.QueryString (“tên biến”). - Khi đó thuộc tính của phải được dung là METHOD = GET - Tập hợp Form: - Để lấy được giá trị từ từ phần Header của HTTP ta dùng: 148
  35. - Request.QueryString (“tên biến”). - Khi đó thuộc tính của phải được dung là METHOD = POST - So sánh giữa hai tập hợp Form và QueryString: - Theo phương pháp dùng QueryString có hạn chế đó là giới hạn chiều dài của chuỗi địa chỉ URL (khoảng 1000 kí tự) đây chính là yêu cầu của giao thức HTTP. Do đó sẽ rất phiền phức khi có yêu cầu gởi đi quá dài. Mặc khác, giá trị mà ta gởi đi được hiển thị rõ ràng trong ô địa chỉ URL trên trình duyệt máy Client nên dễ dàng bị người khác đọc được. - Phương pháp dùng POST đã khắc phục được nhược điểm trên bằng cách đưa dữ liệu vào trong phần Header của HTTP. 2. Đối tượng Response Trong hệ thống các đối tượng xây dựng sẵn của ASP.NET thì đối tượng Response đóng vai trò rất quan trọng. Khi mà đối tượng Request bao gồm những thông tin gởi đến Web server từ trình duyệt thì đối tượng Response nắm giữ những gì mà Web server phải gởi trả lại cho trình duyệt. Tóm lại, ta dùng đối tượng Response để gởi thông tin ra User, gồm có ghi thông tin trực tiếp ra Browser, chuyển Browser đến địa chỉ URL khác hay để thiết lập các Cookie trên máy Client. Bảng các thuộc tính và phương thức của đối tượng Response Thuộc tính / Diễn giải phương thức BufferOutput Có sử dụng hay không bộ nhớ đệm cho kết xuất dữ liệu Trả về đối tượng HttpCachePolicy chứa đựng thông tin về Cache quy định Cache của phúc đáp hiện hành Mặc dù còn hỗ trợ nhưng phương thức này còn đối CacheControl nghịch trong phương thức của HttpCachePolicy Tập nhận dạng kết xuất, là một trong các giá trị như ContentEncoding UnicodeEncoding, UTF7Encoding, UTF8Encoding Cookies Trả về một tập của đối tượng HttpCookies Mặc dù còn hỗ trợ nhưng phương thức này còn đối Expries nghịch trong phương thức của HttpCachePolicy ExpriesAbsolute Mặc dù còn hỗ trợ nhưng phương thức này còn đối nghịch trong phương thức của HttpCachePolicy Filter Đối tượng Stream dùng làm bộ lọc dữ liệu kết xuất Output Trả về đối tượng TextWriter OutputStream Đối tượng Stream dùng để trình bày hàng dữ liệu của Status Gán trạng thái HTTP trả về cho trình khách StatusCode Trạng thái HTTP Response Gán diễn giải trạng thái HTTP và trả về cho trình khách, StatusDescription thuộc tính này được ưu tiên hơn thuộc tính Status ClearContent Xóa nội dung từ Buffer Stream ClearHeaders Xóa header từ Buffer Stream Close Đóng kết nối với Client Chuyển hướng đến địa chỉ file trong cùng ứng dụng hay Redirect URL khác trong lúc thi hành Writeln Ghi một luồng dữ liệu ra tập tin chỉ định 149
  36. Write Ghi thông tin từ các kiểu dữ liệu như Char, Object, String, Ví dụ : Minh họa sử dụng đối tượng Request và Response Bước 1 :Tạo 2 trang ASP.NET gồm trang NhapTen.aspx và trang XemChiTiet.aspx. Bảng mô tả các thuộc tính của các controls trang NhapTen.aspx. Control Tên thuộc tính Giá trị thuộc tính Lable Text Nhập tên Lable Text Ngày Sinh TextBox ID txtTen TextBox ID txtNgaySinh Button Text Xem chi tiết Bảng mô tả các thuộc tính của các controls trang XemChiTiet.aspx. Control Tên thuộc tính Giá trị thuộc tính Lable ID lblXemChiTiet Bước 2 : Viết lệnh xử lý cho các trang như sau : public partial class NhapTen : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnXemChiTiet_Click(object sender, EventArgs e) { //Lấy các giá trị đã nhập vào các TextBox string strHoTen = txtTen.Text; string strNgaySinh = txtNgaySinh.Text; //Chuyển quan trang XemChiTiet.aspx Response.Redirect("XemChiTiet.aspx?Ten="+strHoTen+"&NgaySinh="+strNgaySinh ); } } Minh họa phần mã của trang NhapTen.aspx public partial class XemChiTiet : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Lấy các giá trị từ trang NhapTen.aspx string strHoTen = Request.QueryString["Ten"]; string strNgaySinh = Request.QueryString["NgaySinh"]; lblXemChiTiet.Text = "Xin chào bạn :"+strHoTen+" "+ "Ngày sinh của bạn là :"+strNgaySinh; } } Minh họa phần mã của trang XemChiTiet.aspx Bước 3: Nhấn Ctrl+F5 để thi hành ứng dụng. Nhập tên và ngày sinh và nhấn nút Xem chi tiết Kết qủa như hình sau. 150
  37. Hình 5.1: Khi thi hành trang XemChiTiet.aspx Hình 5.: Khi thi hành trang XemChiTiet.aspx Ví dụ: Tạo trang LayThongTinTrinhDuyet.aspx hiển thị các thông tin các trình duyệt của người dùng. Viết lệnh xử lý như sau : public partial class LayThongTinTrinhDuyet : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { Response.Write("Browser:" + Request.Browser.Browser+" "); Response.Write("Version:" + Request.Browser.Version + " "); Response.Write("Platform:" + Request.Browser.Platform + " "); Response.Write("JavaScript:" + Request.Browser.JavaScript); } 151
  38. Hình 5.3: Kết quả thi hành trang LayThongTinTrinhDuyet.aspx 3. Đối tượng Server Đối tượng Server được sử dụng để cung cấp thông tin của Server cho ứng dụng. + Thuộc tính MachineName Thuộc tính này được dùng để lấy tên của Web Server. + Phương thức MapPath Phương thức Mappath được dùng để lấy đường dẫn vật lý hoặc đường dẫn ảo đến một thư mục trên Server. + Phương thức Transfer( ) Ngừng thi hành trang hiện hành, gởi yêu cầu mới đến trang được gọi thực hiện. Ví dụ : Tạo trang LietKeCacBienServer , lấy danh sách các biến server public partial class LietKeCacBienServer : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { int i, j; NameValueCollection coll = Request.ServerVariables; String[] arr1 = coll.AllKeys; for (i = 0; i "); String[] arr2 = coll.GetValues(arr1[i]); for (j = 0; j "); } } } } 152
  39. Ví dụ : Minh họa upload tập tin về Sever Nội dung trang GuiTapTin.aspx, cho phép gửi một tập tin từ Client đến Server. public partial class GuiTapTin : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void btnGui_Click(object sender, EventArgs e) { //Kiểm tra có tập tin nào được chọn ? if (fuDuLieu.HasFile) { //thiết lập đường dẫn cho tập tin string filename = "~/DuLieu/" + fuDuLieu.FileName; //Lấy đường dẫn vật lý cho tập tin trên ứng dụng string s = Server.MapPath(filename);
  40. 154 //Lưu tập tin về thư mục DuLieu của ứng dụng fuDuLieu.SaveAs(s); Response.Write("Tập tin :"+fuDuLieu.FileName+" đã gửi thành công ."); } }} Kết quả thực thi : Bước 5 : Kiểm tra kết quả . Nhấp vào biểu tượng Show All Files trên cửa sổ Solution , sau đó nhấp biểu tượng Refresh thấy kết quả như hình bên hoặc các bạn có thể kiểm tra bằng cách mở thư mục DuLieu trên đĩa để xem kết quả . 4. ViewState Các điều khiển Web Server Controls lưu trữ hầu hết các giá trị của chúng vào view state, khi thuộc tính EnableViewState được thiết lập với giá trị true (mặc định). Thuộc tính ViewState của trang cung cấp thông tin view state hiện hành. Thuộc tính này là một thể hiện của lớp StateBag. StateBag là một từ điển, có mỗi mục được lưu trong một khe "riêng" bằng cách sử dụng một tên chuỗi duy nhất. Ví dụ, hãy xem xét mã này: this.ViewState["Counter"] = 1; Lệnh này đặt giá trị 1 (hay đúng hơn, một số nguyên có ch ứa giá trị 1) vào trong ViewState. Nếu hiện tại không có mục có tên “Counter”, một mục mới sẽ được thêm tự động. Nếu một mục đã được lưu trữ dưới cái tên “Counter”, nó sẽ được thay thế. Ví dụ: Tạo một trang SimpleCounter.aspx có một Button và Label. |[TblCount]|
  41. 155 Untitled Page   Phần mã lệnh trang SimpleCounter.aspx.cs : public partial class SimpleCounter : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void cmdIncrement_Click(object sender, EventArgs e) { int counter; if (ViewState["Counter"] == null) { counter = 1; } else { counter = (int)ViewState["Counter"] + 1; } ViewState["Counter"] = counter; lblCount.Text = "Counter: " + counter.ToString();} Khi thực thi chương trình, đầu tiên chỉ xuất hiện button như sau: ViewState["Counter"] = counter; IblCount.Text = "Counter: " + counter.ToString();___ Kết quả hiển thị:
  42. 156 Khi click tiếp hai lần trên button, giá trị của biến counter được tăng lên là 3, như vậy giá trị counter được duy trì qua các lần request nhờ vào ViewSate[“Counter”] Khi click vào button increment, giá trị counter được khởi tạo bằng 1 và gán cho ViewState với tên “Counter” , và hiện giá trị trên trang qua điều khiển nhãn lblCount Khi xem mã nguồn của trang SimpleCounter qua trình duyệt, nội dung trang có chứa khai báo _VIEWSTATE với giá trị lưu dạng mã Base64 (kiểu mã hoá đặc biệt của chuỗi đó và luôn luôn được chấp nhận trong một tài liệu HTML bởi vì nó không bao gồm bất kỳ ký tự mở rộng nào) như sau: Hình 5.3. Mã nguồn trang SimpleCounter.aspx có biến _VIEWSTAE. 5. Session Đối tượng Session được dùng để lưu trữ thông tin của người dùng trong ứng dụng. Thông tin được lưu trữ trong Session là của một người dùng trong một phiên
  43. 157 làm việc cụ thể. Web Server sẽ tự động tạo một đối tượng Session cho mỗi người dùng mới kết nối vào ứng dụng và tự động hủy chúng nếu người dùng còn không làm việc với ứng dụng nữa. Tuy nhiên, không giống như đối tượng Application, đối tượng Session không thể chia sẻ thông tin giữa những lần làm việc của người dùng, nó chỉ có thể cung cấp, trao đổi thông tin cho các trang trong lần làm việc tương ứng. Trong ứng dụng web, đối tượng Session giữ vai trò khá quan trọng. Do sử dụng giao thức HTTP, một giao thức phi trạng thái, Web Server hoàn toàn không ghi nhớ những gì giữa những lần yêu cầu của Client. Đối tượng Session tỏ ra khá hữu hiệu trong việc thực hiện "lưu vết và quản lý thông tin của người dùng". Thuộc tính & Phương thức + Thuộc tính Timeout Qui định khoảng thời gian (tính bằng phút) mà Web Server duy trì đối tượng Session nếu người dùng không gởi yêu cầu nào về lại Server. Giá trị mặc định của thuộc tính này là 20. Nếu không có yêu cầu nào kể từ lần yêu cầu sau cùng một khoảng thời gian là phút, đối tượng Session mà Web server cấp cho lần làm việc đó sẽ tự động được giải phóng. Những yêu cầu sau đó được Web server coi như là một người dùng mới, và đương nhiên sẽ được cấp một đối tượng Session mới. + Phương thức Abandon Như các bạn đã biết, trong khoảng thời gian phút kể từ lần yêu cầu sau cùng của Client, đối tượng Session vẫn được duy trì dù cho không có sự tương tác nào của Client. Điều này đồng nghĩa với việc Web server phải sử dụng một vùng nhớ để duy trì đối tượng Session trong một khoảng thời gian tương ứng. Phương thức Abandon của đối tượng Session sẽ giải phóng vùng nhớ được dùng để duy trì đối tượng Session trên Web Server ngay khi được gọi thực hiện. Những yêu cầu sau đó được Web server coi như là một người dùng mới. Sử dụng biến toàn cục với Session Tạo biến Session _Session["Tên biến"] = Lấy giá trị từ biến Session = Session["Tên biến"] Ví dụ: Minh họa sử dụng biến session lưu thông tin của người dùng khi đăng nhập Tạo ứng dụng Web gồm các trang ASP.Net được mô tả như sau : Trang DangNhap.aspx Control Tên thuộc tính Giá trị thuộc tính Lable Text Tên đăng nhập Lable Text Mật khẩu TextBox ID txtTenDangNhap TextBox ID txtMatKhau Text Đăng nhập Button ID btnĐangNhap Bảng mô tả các thuộc tính của các controls trang DangNhap.aspx.
  44. 158 Thiết kế giao diện trang DangNhap.aspx Xử lý sự kiện public partial class DangNhap : System.Web.UI.Pag { protected void Page_Load(object sender, EventArgs e) { } protected void btnDangNhap_Click(object sender, EventArgs e) { if (txtTenDangNhap.Text == "An" && txtMatKhau.Text == "123") { Session["TenDangNhap"] = txtTenDangNhap.Text; Response.Redirect("ChaoMung.aspx"); } }} Trang ChaoMung.aspx : public partial class ChaoMung : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //Lấy giá trị từ biến Session string s = Session["TenDangNhap"].ToString(); Response.Write("Chúc mừng bạn  " + s + " đã đăng nhập thành công."); }} Kết quả thi hành các trang ASP.Net Kết quả sau khi nhập thông tin và click nút [Đăng nhập]
  45. 159 6. Cookie Có lẽ bạn cũng đã từng đăng ký là một thành viên của một trang web hay một forum nào đó, và chắc cũng không ít lần ngạc nhiên khi bạn vừa yêu cầu đến một trang web hay forum mà bạn đã đăng ký trước đó, trang web nhận ngay ra, bạn chính là thành viên của họ và gởi ngay lời chào đến bạn, chẳng hạn: Chào Nguyễn Văn An. Những thông tin của bạn khi đăng nhập hay khi đăng ký được lưu ngay chính tại máy của bạn. Những thông tin này được Web Server lưu tại máy Client được gọi là Cookies. Không giống như đối tượng Session, đối tượng Cookies cũng được dùng để lưu trữ thông tin của người dùng, tuy nhiên, thông tin này được lưu ngay tại máy gởi yêu cầu đến Web Server. Có thể xem một Cookie như một tập tin (với kích thước khá nhỏ) được Web Server lưu tại máy của người dùng. Mỗi lần có yêu cầu đến Web Server, những thông tin của Cookies cũng sẽ được gởi theo về Server. Hình 5.4. Minh hoạ Cookies. + Làm việc với Cookies + Thêm Cookies Response.Cookies.Add( ) Ví dụ: HttpCookie ck = new HttpCookie("TenDangNhap"); ck.Value = txtTenDangNhap.Text; ck.Expires = DateTime.Now.AddDays(15); Response.Cookies.Add(ck); Trong thí dụ trên, chúng ta đã tạo ra Cookies có tên là TenDangNhap lưu trữ tên đăng nhập của người dùng. Thông tin này sẽ được lưu trữ trên Cookies 15 ngày kể từ ngày hiện hành trên Web Server. + Lấy giá trị từ Cookies HttpCookie ck = Request.Cookies["TenDangNhap"]; string s = ck.Value;
  46. 160 Trong trường hợp Cookies chưa được lưu hoặc đã hết thời hạn duy trì tại Client, giá trị nhận được là null. Thí dụ: Tạo trang Untitled Page Name: Khi click nút [Create Cookie], phần mã lệnh thực thi như sau: public partial class CookieExample : System.Web.UI.Page { protected void Page Load(object sender, EventArgse { HttpCookie cookie = Request.Cookies["Preferences"]; if (cookie == null) { lblWelcome.Text = " Unknown Customer "; } else { lblWelcome.Text = " Cookie Found. "; IblWelcome.Text += "Welcome, " + cookie["Name"]; } } protected void cmdStore_Click(object sender, EventArgs e) { // Check for a cookie, and only create a new one if // one doesn't already exist. HttpCookie cookie = Request.Cookies["Preferences"]; if (cookie == null) { cookie = new HttpCookie("Preferences");
  47. 161 } cookie["Name"] = txtName.Text; cookie.Expires = DateTime.Now.AddYears(l); Response.Cookies.Add(cookie); lblWelcome.Text = " Cookie Created. "; IblWelcome.Text += "New Customer: " + cookie["Name"]; Khi thực thi trang CookieExample.aspx : Click nút [Create Cookie], trình chủ (web server) sẽ tạo một Cookie tên Name có giá trị là Dao Nguyen ghi lại trên máy khách với thời hạn lưu trú là một năm. cookie["Name"] = txtName.Text; cookie.Expires = DateTime.Now.AddYears(l); Response.Cookies.Add(cookie); Kết quả hiển thị sau khi click nút [Create Cookie]:
  48. 162 Gọi thực thi lại trang CookieExample.aspx lần thứ hai trở đi, kết quả hiển thị trang: 7. Application Application và Session là hai đối tượng khá quan trọng trong ứng dụng web, giúp các trang aspx có thể liên kết và trao đổi dữ liệu cho nhau. Trong phần này, chúng ta sẽ tìm hiểu và sử dụng hai đối tượng này trong ứng dụng.
  49. 163 Hình 5.5. Minh hoạ quan hệ của đối tượng Session và Appliaction. Đối tượng Application được sử dụng để quản lý tất cả các thông tin của một ứng dụng web. Thông tin được lưu trữ trong đối tượng Application có thể được xử lý trong bất kỳ trang aspx nào trong suốt chu kỳ sống của ứng dụng. + Sử dụng biến Application Tạo biến Application Application["Tên biến"] = Lấy giá trị từ biến Application = Application["Tên biến"] Ví dụ: Application.Lock() Application["SoLanTruyCap"] = 0 Application["SoNguoiOnLine"] = 0 Application.UnLock() Chú ý: Do tại một thời điểm có thể có nhiều người cùng lúc truy cập và thay đổi giá trị của các thông tin được lưu trong đối tượng Application, chúng ta nên sử dụng bộ lệnh Lock và UnLock ngay trước và sau khi cập nhật giá trị của biến Application. Biến Application có thể được sử dụng ở bất kỳ trang nào và được duy trì trong suốt chu kỳ sống của ứng dụng. + Thí dụ minh họa sử dụng biến Application . Tạo một ứng dụng Web gồm 2 trang ASP.Net sau đây : Hình 5.6: Thiết kế trang SuDungApplication.aspx Xử lý sự kiện trang SuDungApplication.aspx public partial class SuDungApplication : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e){ } protected void btnXemHoTen_Click(object sender, EventArgs e) { //Khai báo biến ứng dụng
  50. 164 Application["HoTen"] = txtHoTen.Text; Response.Redirect("~/LayGiaTri.aspx"); } } Tạo trang LayGiaTri.aspx và viết lệnh xử lý sự kiện như sau : public partial class LayGiaTri : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { string s = Application["HoTen"].ToString(); Response.Write("Tên của bạn : "+s); } } Kết quả thực hiện:
  51. 165 Hình 5.7.Trang sử dụng Application.aspx Bài tập thực hành của học sinh, sinh viên: Bài 1: Thực hành lại các bài tập thí dụ trong bài học, có thể hiệu chỉnh lại theo ý học viên. Bài 2: Đọc và giải thích nội dung của Phần mã lệnh trang SessionEx1.aspx Sessions Select color Red Green Blue
  52. 166 Phần mã lệnh trang SessionEx1.aspx.cs public partial class SessionEx1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["BackgroundColor"] != null) { ColorSelector.SelectedValue = Session["BackgroundColor"].ToString(); BodyTag.Style["background-color"] = ColorSelector.SelectedValue; } } protected void ColorSelector_IndexChanged(object sender, EventArgs e) { BodyTag.Style["background-color"] = ColorSelector.SelectedValue; Session["BackgroundColor"] = ColorSelector.SelectedValue; } } Khi chọn màu Green từ DropdownList, kết quả thực thi trang: Kết thúc ứng dụng và chạy lại ứng dụng nà trong cùng một cửa sổ trình duyệt đang mở, trang hiển thị ra sao? Giải thích. Nếu đóng cửa sổ trình duyệt và thực thi lại ứng dụng , trang hiển thị ra sao? Giải thích.
  53. 167 BÀI 6: TRIỂN KHAI ỨNG DỤNG WEB Mã bài: MĐCNTT26-06 Giới thiệu: Một dịch vụ web (web services) là một hệ thống phần mềm được xây dựng đô hô trợ khả năng tương tác giữa các máy tính trên mạng (theo Wide Web Consortium). Nó cung cấp một giao tiếp được mô tá theo một định dạng chung thường gọi là ngôn ngữ mô tả dịch vụ web (Web Service Description Language - WSDL). Các hệ thống khác thực hiện tương tác với dịch vụ web thông qua giao thức SOAP (Simple Object Access Protocol). Đây là giao thức giúp trao đổi thông tin sứ dụng HTTP kết hợp với việc sứ dụng đặc tà XML cùng với một sổ chuấn khác. Như vậy, mục đích chính của việc phát triền của dịch vụ web là cho phép giao tiếp và trao đối các chức năng, thông tin, dừ liệu giữa các ứng dụng một cách dễ dàng mà không cần quan tâm đến môi trường phát triền, nạôn ngữ lập trình bời tất cả đã được quy về một định dạng chung. Bản chât cùa web service là một tập hợp các đôi tượng, các phương thức được thực thi và công bố trên mạng đế có thô được triệu gọi từ xa thông qua các ứng dụng khác. Mục tiêu: - Hiểu và trình bày được quy trình triển khai và duy trì một ứng dụng web. - Thực hiện triển khai được một ứng dụng web đơn giản - Xây dựng được các services đơn giản. Nội dung chính: 1. Giới thiệu 1.1. Sự ra đời của web services Web service là sự kế thừa từ các công nghệ phân tán trước đó như CORBA, DCOM và RM1. CORBA (Common Object Request Broker Architecture) là một giải pháp dựa trên các chuấn mở do tổ chức OMG (Object Management Group) đưa ra. Điềm mạnh cùa CORBA là các ứng dụng trên máy client và trên máy chủ có thổ được viết bang các ngôn ngừ lập trình khác nhau nhờ sứ dụng một ngôn ngữ định nghĩa giao tiếp (Interface Definition Language - IDL). Tuy nhiên, việc xây dựng ứng dụng phân tán sử dụng CORBA rất phức tạp và có rất ít ngôn ngữ lập trình được CORBA hồ trợ. DCOM (Distributed Component Object Model) được đề xuất bời Microsoft, giúp các thành phần phần mem (software component) giao tiếp với nhau trên môi trường phân tán. Một DCOM server sẽ công bố các phưoug thức, các đối tượng cho các máy khách bằng cách hồ trợ đa giao tiếp (multiple interfaces). Giao thức được sử dụng cho việc giao tiếp giữa các ứng dụng là Object Remote Procedure Call (ORPC). DCOM chủ yếu được phát triển trên các hệ điều hành Windows và chú yếu được hồ trợ phát triển bời Microsoft. RM1 (Remote Method Invocation - RMI) cho phép xây dựng các ứng dụng phân tán dựa trên công nghệ Java. Một đối tượng viết bằng Java có thể gọi đến một đối tượng từ xa mà nó tham chiếu đến. RMI sử dụng giao thức JRMP (Java Remote Method Protocol). Đổ xây dựng một ứng dụng phân tán sử dụng RM1 đòi hỏi người lập trình phải có kiến thức, kinh nghiệm về lập trình với ngôn ngữ Java và kỹ thuật phân tán. Mặc khác, hạn chế lớn nhất của RMI là chỉ hỗ trợ đối với các ứng dụng Bên cạnh những hạn chế của các công nghệ nói trên, một vấn đề phát sinh ờ đây là khả năng tương tác giữa các ứng dụng được xây dựng trên các công nghệ khác nhau.
  54. 168 Chúng ta không thề giao tiếp với một server sử dụng công nghệ DCOM từ một ứng dụng sử dụng công nghệ RMI bới chúng sử dụng hai giao thức khác nhau. Vì vậy, web service ra đời là một sự phát triển có vai trò quan trọng trong lĩnh vực phân tán trên internet. 1.2. Vai trò và đặc điểm của web services Web service ra đời mở ra một hướng mới cho việc phát triển các ứng dụng trên internet. Ngày nay, dịch vụ wcb được sử dụng trong nhiều lĩnh vực phát triển phần mềm khác nhau như các dịch vụ cung cấp giá cổ phiếu, hồ trợ thanh toán trực tuyến, chuyến đối ngoại tệ, tìm kiếm thông tin liên quan đến sán phâm, đặc biệt là các dịch vụ web cúa các website bán hàng trực tuyến như Amazon, eBay. Web service đóng vai trò quan trọng trong việc phát triển các ứng dụng thương mại điện tứ (e- commerce). Dùng dịch vụ wcb đê kết hợp các các khả năng đơn lẻ chạy trên các hệ thống khác nhau thành một hệ thống tích hợp. 2. Quy trình triển khai và quản lý ứng dụng web Công nghệ web service không phải là một công nghệ mới hoàn toàn, mà nó ra đời dựa trên sự kết hợp các nền tảng công nghệ sẵn có trước đó. Nó là sự tích hợp các ứng dụng dựa trên web sử dụng các chuân mở như XML, SOAP, WSDL, UDDI. Trong đó, XML được sư dụng để mô tả dừ liệu, SOAP đóng vai trò giao thức truyền tải dữ liệu, WSDL mô tà cho dịch vụ web và UDD1 liệt kê danh sách các dịch vụ web đang hoạt động. 2.1. XML - Extensible Markup Language XML do W3C để ra và được phát triển từ SGML. XML là một ngôn ngữ đánh dấu mở rộng với cấu trúc do người dùng định nghĩa, vồ hình thức, XML có cú pháp tương tự HTML, nhưng không tuân theo một đặc tả quy ước như HTML. Người sử dụng hay các chương trình có thê quy ước định dạng các thẻ XML, ngoài ra không chứa bất cứ thông tin nào khác về cách sử dụng hay hiển thị nhũng thông tin ấy. Web service là sự kết hợp của nhiều thành phần khác nhau, và nó hỗ trợ tương tác giữa các hệ thống được cài đặt trên các môi trường khác nhau. Do đó, cần sử dụng một dạng tài liệu có thế giúp giải quyết vấn đề tương thích và XML hoàn toàn phù hợp với yêu cầu trên. Nó đã trở thành nền tảng cho việc xây dựng các web service. XML có hai vai trò chính: - Trao đối dữ liệu trong hệ thống sừ dụng web service. - Mô tả các giao thức sừ dụng trong dịch vụ web. 2.2. SOAP - Simple Object Access Protocol SOAP (Simple Object Access Protocol) là giao thức dùng đề truy xuất thông tin từ web service thông qua một dạng thông điệp chung. SOAP được Microsoft đề xuất vào năm 1998. Hiện nay, nó thuộc quyền quản lý và cải tiến bởi tổ chức W3C. SOAP là một giao thức dựa trên nền tàng XML, mô tà cách định dạng, đóng gói thông tin của các thông điệp và trao đổi chúng thông qua mạng mà không phụ thuộc vào bất kỳ ngôn ngữ hay môi trường thực thi nào. Đơn vị trao đôi thông tin cơ bân của giao thức SOAP là thông điệp SOAP (SOAP Message). Mỗi thông điệp SOAP sẽ được chỉ định bởi một thẻ root chứa hai thành phần là SOAP Header và SOAP Body. SOA Header chứa các thông tin cần thiết cho việc thực hiện chuyên thông điệp hay cơ chế định danh, báo mật.
  55. 169 2.3. VVSDL - Web Services Description Language WSDL (Web Services Description Language) là một dạng tài liệu dựa trên cú pháp XML đê mô tả các dịch vụ web. Lúc đầu nó được Microsoft, IBM và Ariba để xuất, nhưng hiện nay được quán lý bởi tổ chức W3C. Một tài liệu WSDL sẽ cung cấp tài liệu cho các hệ thống phân tán như mô tả chức năng của một web service, cách thức tương tác, các thông điệp tương ứng cho các theo tác request hay response. Sau đây là cấu trúc cơ bản cùa một tài liệu Một tài liệu WSDL bao gồm hai thành phần chính: Phần trừu tượng (abstract definitions), và phần hiện thực (concrete definitions). Phần trừu tượng bao gồm các thông tin được chứa các the types, message, operation và port types. Phan hiện thực chứa thông tin trong các thẻ bindings và ports. Mồi thành phần có một chức năng riêng, cụ thể như sau: - types: chi định kiểu dừ liệu cho các thông điệp gửi và nhận - messages: là một thành phần trừu tượng mô tả cách thức giao tiếp giữa client và server - porttypes: mô tả ánh xạ giữa các thông điệp - được mô tả trong phần tử messages - và các phương thức (operations) - binding: xác định giao thức nào được sừ dụng khi giao tiếp với dịch vụ wcb. Định nghía kiêu binding (RPC/Document) và giao thức vận chuyển, binding cũng định nghĩa các operations - Port: chi định địa chì hoặc điểm kết nối đến web service, nó thường là một chuồi URL đơn giản 2.4. UDDI - Universal Description, Discovery, and Integration UDDI (Universal Description, Discovery, and Integration) được đề xuất bởi Microsoft, IBM và Ariba vào năm 2000. Ngày nay, UDDI thuộc quyền quản lý và phát triên bởi tố chức OASIS (Organization for the Advancement of Structured Information Standards). Nó được xây dựng nhằm mục đích cung cấp khả năng cho phép công bố. tông hợp và tìm kiếm các dịch vụ wcb. UDDI đưa ra một tập các hàm API được chia làm hai phần: Inquiry API (dùng để tìm kiếm và truy xuất) và Publisher’s API (công bố các web services). Thông tin tô chức trong ƯDDI được chia thành ba phân: - White pages: liệt kê thông tin của các nhà cung cấp dịch vụ web bao gồm địa chỉ, thông tin liên lạc, và định danh - Yellow pages: phân loại dịch vụ theo tố chức hay nhóm dịch vụ hoặc địa diêm đặt các dịch vụ - Green pages: cung cấp thông tin về các dịch vụ web được, về cách thức truy xuất các web services đó 3. Xây dựng và quản lý các services Bước 1: Tạo ứng dụng WcbScrvice Từ menu File I New I New WebSite .,cứa sô New Web Site xuất hiện và thiết lập như hình dưới đây đê tạo ứng dụng Web Service tên WSMinhHoa sử dụng Web Server ITS.
  56. 170 Bước 2: Sau khi WS_MinhHoa được tạo, các bạn viêt lệnh trong tập tin App_Code/Service.cs như sau: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Sendees; [WebService(Namespace = ’’ ’’)] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfilel I)] public class Service: System.Web.Services.WebService { public Service 0 { } [WebMethodJ public string LayGioHienIIanh() { return DateTime.Now.ToString("hh:mm:ss"); Trong webservice này chúng ta khai báo một phương thức tên LayGioHienHanh dùng để lấy giờ hiện hành phía server. Bước 3: Nhấn Ctrl+F5 thi hành ứng dụng, giao diện thi hành sau đây liệt kê danh sách phương thức web hiện có trong Web Service.
  57. 171 Nhấn nút Invoke để thực thi phương thức LayGioHienHanh, kết quả như màn hình sau. Kết quả trả vê từ phương thức LayGioHienHanh Bước 4: Tạo ứng dụng Web Consumer, các bạn có thể sử dụng bất kỳ ứng dụng nào để gọi đến Web Service (ASP.NET. Window Form, Console, ). Trong ví dụ này, chúng ta sử dụng ASP.NET. Tạo ứng dụng ASP.NET, gồm một trang LayGioHienHanh.aspx giao diện như sau: Hiển thị GioHienHanh.aspx* Start Page I Client Objects & Events H H n Giờ hiện hành : -| - Bước 5: Thiết lập tham chiếu đến ứng dụng web service WS Từ ứng dụng ASP.NET, nhấp chọn References, nhấp phái chuột chọn Add Web Reference Trên cửa sổ Add Web Reference, nhấp vào liên kết Web services on the local machine Start Browsing for Web Services Use this page as a starting point to find Web services. You can click the links below, or type a known URL into the address bar. Browse to:
  58. 172 - Web services in this solution Web services on the local machine Browse UDDI Servers on the local network Sau đó chọn service như hình sau: Nhân Add Reference đê thêm tham chiêu vào ứng dụng Bước 6. Viết lệnh xử lý sự kiện trang LayGioHienHanh.aspx using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UT.WebControls; namespace MinhHoa {
  59. 173 public partial class HienThiGioHienHanh: System.Web.Ul.Page { protected void Page Load(object sender, EventArgs e) { } protected void btnllienThi_Click(object sender. Event Args e) { //khai báo dối tượng Service localhost.Service s = new localhost.ServiceO; //gọi phương thức lbGioHienHanh.Text = s.LayGioHienHanhO; } Bước 7. Nhấn Ctrl+F5 để thi hành trang LayGioHienHanh.aspx, sau đó nhấn nút Hiển thị để xem kết quá. Bài tập thực hành của học sinh, sinh viên: Bài 1: Tạo một Web Service sử dụng VS.NET + Tạo Web Method
  60. 174 + Chạy thử Web Service này, danh sách các hàm sẽ được liệt kê + Chọn hàm Add + Sau khi nhập các tham số vào, nhấn Invoke. Kết quả sẽ xuất hiện. + Tạo một Web Service khác
  61. 175 + Add Web Reference đến Web Service ta cần sử dụng + Nhập URL đến Web Service cần sử dụng. Rồi nhấn Add Reference + Lúc này, trong Solution Explorer, sẽ có Web Reference mà ta vừa chọn + Tạo một Web Method
  62. 176 + Kiểm tra Web service mới + Kết quả + Tạo màn hình + Viết hàm xử lý nút nhấn + Chạy thử ứng dụng
  63. 177 TÀI LIỆU THAM KHẢO [1]. Jason Butler and Tony, “ASP - Database”, Nhà xuất bản Trẻ, 2001. [2]. Kỹ sư Phạm Quang Huy, “Giáo trình thiết kế Web và làm hoạt hình”, NXB Giao thông vận tải, 2003. [3]. Hoàng Hải , “Giáo trình tự học thiết kế Web động”, NXB Lao động Xã Hội, 2007. [4] Đỗ Thanh Nghị, Trần Công Án, Hà Duy An, Lâm Chí Nguyện. Giáo trình lập trình Web. NXB ĐHCT, 2014. [5] Java for the Web with Servlets, JSP. [6]. Lập trình web bằng PHP 5.3 và CSDL MySQL 5.1 , Phạm Hữu Khang, NXB Phương đông