ASP.NET 2.0 là class library để tạo các Web application mà NET Framework 2.0 cung cấp. Trong phần nhập môn về ASP.NET 2.0 chúng tôi xin được giải thích về cấu trúc của ASP.NET 2.0 và những điểm cần lưu ý....
ASP.NET 2.0 có thể sinh các event từ post back, HTTP request và các control có thể hiển thị Web application bằng thẻ , bên cạnh đó cũng có thể phát triển bằng phương pháp "tương tự" với Visual Basic thông qua cấu trúc như maintain trạng thái. Tuy nhiên, có thể kết luận là nó "tương tự" chứ không hoàn toàn giống với Visual Basic. Vì vậy chúng ta cần phải chú ý là thông tin được ViewState maintain chỉ là control property, chú ý tới việc phải giảm sử dụng ViewState, và timing của các event khác nhau.
Ở đây chúng tôi xin được giải thích về cấu trúc Web application infrastructure mà ASP.NET 2.0 chạy trên đó, giải thích về cấu trúc của ASP.NET để thực hiện phương pháp phát triển tương tự với Visual Basic, đồng thời chúng tôi cũng xin được trình bày về những lỗ hổng có thể phát sinh do thực hiện phương pháp phát triển tương tự Visual Basic trên Web application.
Cấu trúc Web application
Trước tiên chúng tôi xin được trình bày về Web application infrastructure mà ASP.NET 2.0 chạy trên đó. Dưới đây là cấu trúc của Web application.
Cấu trúc của Web application
Web application được cấu tạo từ application server và Web browser. Business logic có trong tất cả các application server, Web browser chỉ đóng vai trò tiếp nhận input từ user và hiển thị màn hình. Ngoài ra, HTML (Hyper Text Markup Language) được dùng trong hiển thị màn hình theo Web browser, còn HTTP (Hyper Text Transfer Protocol) là protocol truyền tin giữa application web và web browser.
HTML là gì?
Chúng ta thử lấy ví dụ cụ thể về HTML. Dưới đây là HTML để hiển thị lên màn hình dòng "Hello, World!"
<html>
<head>
<title>HTML Sample</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
Trong HTML nội dung hiển thị được kiểm soát bằng thẻ có dạng thẻ mở <tên thẻ > và thẻ đóng </tên thẻ >. <html> trong ví dụ trên có nghĩa là tài liệu HTML, <head> là thẻ chứa thông tin chung về trang, <body> là phần chứa nội dung hiển thị. Ở ví dụ trên, do trong <body> dữ liệu dùng để kiểm soát có dòng chữ "Hello, World!" được bao bọc bằng thẻ mang ý nghĩa Heading Style 1 tức là <h1>, nên Web browser hiển thị dòng chữ "Hello, World!" với font và size tương ứng với Heading Style 1.
Cách tạo màn hình dùng để input data?
Màn hình dùng cho input dữ liệu biểu hiện bằng việc bao quanh các thẻ dùng cho input item như <input> và <select> bằng <form>. Chúng tôi xin được đưa ra ví dụ cụ thể như sau
<form action="next-page.aspx" method="get">
<p>
HonoricTitle:
<select name="honorificTitleDropDownList">
<option value="1" selected="selected">Mr.</option>
<option value="2">Mrs.</option>
<option value="3">Miss</option>
</select>
</p>
<p>
Name:
<input type="text" name="nameTextBox" />
</p>
<p>
<input type="submit" value="Send Data to Application Server" />
</p>
</form>
<p> là thẻ để chỉ paragraph. <select> là drop down list, <input type="text"> là text box, <input type="submit"> là button. Ở HTML trên, ở trong thẻ <input> không có </input> là bởi vì trong trường hợp không có data hay thẻ khác trong đó thì có thể kết thúc phạm vi kiểm soát của thẻ bằng "/>". Ngoài ra, phần 'name="honoricTitleDropDownList"' trong thẻ là thuộc tính để kiểm soát thẻ . Ví dụ: Thuộc tính selected của <option> là item đã được lựa chọn default khi hiển thị màn hình.
Nếu muốn biết thêm?
Tất nhiên ngoài những cái đã nêu ra ở đây thì trong HTML còn có rất nhiều thẻ và thuộc tính khác (Nếu không như thế thì chắc chắn sẽ không tạo được nhiều Web site đa dạng và phong phú trong cuộc sống như vậy). Nếu bạn muốn tìm hiểu thêm về những thẻ và thuộc tính đó xin mời tham khảo ở MSDN library.
HTTP là gì?
HTTP là protocol truyền tin được dùng trong Web application. Đặc trưng là protocol đơn giản và phi trạng thái (stateless).
Đơn giản và phi trạng thái (stateless)?
Chúng ta hãy lấy ví dụ trong trường hợp khởi động Web browser, và nhập vào URL là "http://www.usol-v.com.vn/dotNETCenter/An_Introduction_of_ASP.NET_2.0/Default.htm". Khi đó, sẽ tạo request dựa vào HTTP như dưới đây và gửi thông tin (Lần này sử dụng Firefox 2.0).
GET /dotNETCenter/TechnicalDocuments/An_Introduction_of_ASP.NET_2.0/
Default.htm HTTP/1.1
Host: www.usol-v.com.vn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.8.1.6) Gecko/20070725
Firefox/2.0.0.6
Accept: text/xml,application
/xml,application/xhtml+xml,text/html;q=0.9,text/plain;
q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,
utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Phần quan trọng là dòng thứ nhất. Dòng thứ nhất này biểu thị việc sử dụng HTTP version 1.1 để get data được nhận biết bởi /dotNETCenter/TechnicalDocuments/An_Introduction_of_ASP.NET_2.0/Default.htm.
Dưới đây là response của application server đối với GET của HTTP ở trên (Trong application server có sử dụng IIS 6.0 trên Windows Server 2003).
HTTP/1.x 200 OK
Content-Length: 6736
Content-Type: text/html
Last-Modified: Mon, 10 Sep 2007 07:18:27 GMT
Accept-Ranges: bytes
Etag: "802bec87af3c71:221"
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Mon, 10 Sep 2007 08:01:25 GMT
<html>
...
</html>
Phần lược bỏ cuối cùng là HTML biểu thị nội dung của page. Cho dù là response của HTTP hay gì thì phần trọng yếu nhất vẫn là dòng thứ nhất. Dòng thứ nhất của response bên trên có nghĩa là sẽ căn cứ vào HTTP version 1.x, và stateless của nó sẽ là 200. 200 là mã mang ý nghĩa thành công, từ 300 đến 399 là thao tác cho browser như redirect, từ 400 đến 499 và từ 500 đến 599 nghĩa là có lỗi. Ví dụ, stateless trong trường hợp không tồn tại file tương ứng trong URL là 404, dòng đầu tiên của response đối với request đã chỉ ra URL của file không tồn tại sẽ như sau:
HTTP như đã trình bày, chính là protocol được cấu thành bằng các thao tác đơn giản với text base. Hơn nữa stateless đó thành công hay thất bại, thì trong HTTP, connection cũng sẽ bị ngắt ngay sau khi trả response đối với request. HTTP có đặc trưng là protocol truyền tin mang tính stateless, mỗi 1 request: request quá khứ, request hiện tại và request tương lai đều phải là 1 connection riêng biệt, và các request đó không có liên quan gì với nhau.
Trường hợp <form>
Trường hợp thuộc tính method trong <form> là "get" thì không có thay đổi nhiều so với nội dung gửi thông tin ở trường hợp trên. Và request trong trường hợp nhập "Mr." vào honorificTitleDropDownList của <form> mà đã giới thiệu trong phần "HTML là gì?" và nhập "Ojima" vào nameText sẽ như sau:
GET /TechnicalDocuments/An_Introduction_of_ASP.NET_2.0/
next-page.aspx?honorificTitle
DropDownList=1&nameTextBox=Ojima HTTP/1.1
Host: www.usol-v.com.vn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT
6.0; ja; rv:1.8.1.6) Gecko/20070725
Firefox/2.0.0.6
Accept: text/xml,application/xml,application/
xhtml+xml,text/html;q=0.9,text/plain;q=0.8,
image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://www.usol-v.com.vn/TechnicalDocuments/An_Introduction_of_
ASP.NET_2.0/
Default_ja.htm
Referer là URL của web page đưa ra request, và nó dùng khi phân tích access. Nếu bỏ đi Referer này thì điểm khác biệt chỉ còn phần file name của GET. Cụ thể là phần file name sẽ có dạng là "file name của URL đã được chỉ định bằng thuộc tính action?giá trị thuộc tính name của input item 1=giá trị đã được input vào input item 1&giá trị thuộc tính name của input item 2=giá trị đã được input vào input item 2". (Trong trường hợp <select> thì giá trị thuộc tính value của <option> sẽ được gửi đi. Vì thế,phía sau của honorificTitleDropDownList= của request ban nãy sẽ không phải là "Mr." mà là "1"). Tuy nhiên thì phần phía sau từ ? này sẽ được phân tích dựa vào application server, và nó trở thành parameter đối với Web application.
Trong thuộc tính method của <form> ngoài "get" ra thì cũng có thể chỉ định "post" (Trên thực tế thì phổ biến là chọn "post". Bởi vì trường hợp "get" thì sẽ bị giới hạn độ lớn của parameter có thể gửi đi). Dưới đây chúng tôi đưa ra request trong trường hợp chọn giá trị thuộc tính method là "post".
POST /TechnicalDocuments/An_Introduction_of_ASP.NET_2.0
/next-page.aspx HTTP/1.1
Host: www.usol-v.com.vn
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ja;
rv:1.8.1.6) Gecko/20070725
Firefox/2.0.0.6
Accept: text/xml,application/xml,application/xhtml+xml
,text/html;q=0.9,text/plain;
q=0.8,image/png,*/*;q=0.5
Accept-Language: ja,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer:
http://localhost:8090/TechnicalDocuments/An_Introduction_of_ASP.NET_2.0/
Default_ja.htm
Content-Type: application/x-www-form-urlencoded
Content-Length: 46
honorificTitleDropDownList=1&nameTextBox=Ojima
Điểm khác nhau chủ yếu khi chọn thuộc tính method là "post" là ở chỗ dòng đầu tiên sẽ chọn là POST thay vì GET, và thay vì add parameter vào sau file name thì sẽ add thêm thông tin đã được input vào sau cùng của request. Ngay cả trong trường hợp POST thì đặc trưng của nó vẫn không hề thay đổi tức là nó vẫn có đặc trưng là nội dung thông tin đơn giản, và tính stateless.
Hoạt động của Web application
Vì đã hiểu về HTML và HTTP nên tôi sẽ giải thích về những hoạt động cụ thể của web application. Dưới đây là những hoạt động của Web application.
-
Web browser gửi thông tin request của HTTP GET tới application server dựa vào những thông tin đã được input vào URL.
-
Application server sinh ra HTML và trả về làm response của HTTP.
-
Web browser phân tích HTML, hiển thị màn hình và gửi thông tin request của HTTP POST dựa vào input của user.
-
Application thực hiện business logic dựa trên request, tạo HTML mới và trả về làm response của HTTP.
-
Lặp lại 2-3
Tôi cho rằng các bạn có thể hiểu được sự khác nhau giữa hoạt động của Web application và hoạt động của Visual Basic. ASP.NET 2.0 chính là kỹ thuật giúp giải quyết những sự khác biệt này thông qua nhiều cấu trúc.
[Usol VN]