Ngôn ngữ ASP.NET - ASP.NET life cycle
Vòng đời ASP.NET (asp.net life cycle)
Vòng đời(Life Cycle) là gì? Ta có thể hiểu đơn giản đó là một quá trình từ việc bắt đầu khởi tạo cho đến lúc kết thúc một ứng dụng. Ta gọi đó là life cycle.
Vòng đời của một trang ASP.NET được chia thành 2 nhóm:
- Application Life Cycle
- Page Life Cycle
1. NET Application Life Cycle
Application life cycle có thể chia thành các giai đoạn sau:
- Người dùng gửi một yêu cầu truy cập vào dữ liệu của ứng dụng. Trình duyệt sẽ gửi yêu cầu này đến Web Server.
- Các sự kiện sau đây sẽ được khởi tạo:
- Một đối tượng cũa lớp ApplicationManager được tạo
- Một đối tượng của lớp HostingEnvironment được tạo để cung cấp thông tin về nguồn dữ liệu
- Các thành phần đầu của ứng dụng sẽ được biên dịch
- Các đối tượng như HttpContext, HttpRequest và HttpResponse được khởi tạo và cài đặt.
- Một thể hiện của đối tượng HttpApplication được tạo và gắn cho yêu cầu.
- Các yếu cầu được xử lí bởi lớp HttpApplication, các sự kiện khác nhau được kích hoạt bới lớp này để xử lí các yêu cầu.
2. ASP.NET Page Life Cycle
Khi một trang được yêu cầu, nó sẽ được load vào bộ nhớ của Server, xử lí và gửi lại Browser. Sau đó nó sẽ bị giải phóng khỏi bộ nhớ. Vào mỗi bước, các phương thức và sự kiện luôn có sẵn, ta có thể viết lại cách xử lí tương ứng cho mỗi ứng dụng.
Lớp Page sẽ tạo một cây có thứ tự cho tất cả các control. Chúng ta có thể thấy cây này bằng cách thêm dòng “trace = “true” ” trong phần chỉ thị trang
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs"
Inherits="ASP_P119_Caching.WebForm" Trace="true" %>
Giai đoạn tạo vòng đời một trang web:
- Khởi tạo
- Khởi tạo các điều khiển trên trang
- Phục hồi và duy trì trạng thá
- Thực hiện mã trình xử lý sự kiện
- Hiển thị trang
Page life cycle gồm:
- Page Request: khi trang ASP.NET nhận được request nó sẽ quyết định việc sẽ xử lí và biên dịch trang hay lưu lại một trang vào bộ nhớ đệm.
- Starting of page life cycle: Trong bước này, các đối tượng yêu cầu và phản hồi được cài đặt. Nếu đó là một yêu cầu trước đó hay post back, thuộc tính IsPostback sẽ được set là true.
- Page initialization: Bước này các control sẽ được xác định với một ID duy nhất. Trong một yêu cầu mới, dữ liệu được load và các thuộc tính của control được restore vào các giá trị của view state.
- Page load: Các thuộc tính của control được thiết lập để sử dụng giá tri của view state.
- Validation: Xác nhận giá trị trong phương thức của control được gọi có hợp lệ hay không.
- Postback event handling: Nếu yếu cầu là postback(yêu cầu cũ) có sự kiện có liên quan sẽ được gọi.
- Page rendering: Trạng thái của trang và các control được lưu lại. Trang sẽ gọi phương thức Render cho mỗi control và kết cả của việc render được ghi lại vào lớp OutputStream cho thuộc tính Response của trang. Quá trình render được gửi vào client và thuộc tính của trang, như Response, Request đuọc xoá bỏ.
3. Page Life Cycle Events
Trong mỗi vòng đời của trang, sẽ có một số sự kiện được tạo ra, có thể xủ lí theo mục đích cụ thể.
Hình dưới đây giới thiệu một số sự kiện của Page
- PreInit - PreInit là sự kiện đầu tiên khi trang web được yêu cầu. Nó kiểm tra thuộc tính IsPostBack và xác định xem trang đó là một postback hay không. Nó thiết lập themes và master pages tạo các điều khiển động và nhận và thiết lập các giá trị thuộc tính của profile. Sự kiện này có thể được xử lý bằng cách quá tải phương pháp OnPreInit hoặc tạo ra một trình xử lý Page_PreInit.
- Init - Init khởi tạo thuộc tính điều khiển (control). Sự kiện này có thể được xử lý bằng cách quá tải các OnInit hoặc tạo ra một Page_Init .
- InitComplete - Sử dụng sự kiện này để xử lý các tác vụ có yêu cầu khi tất cả các khởi tạo hoàn thành
- LoadViewState – Sự kiện này cho phép nạp các thông tin về view state vào các điều.
- LoadPostData - Trong giai đoạn này, nội dung của tất cả các trường đầu vào (input fileds) được xác định bằng thẻ <form> được xử lý
- PreLoad – PreLoad xảy ra trước khi dữ liệu gởi lại được nạp trong các điều khiển. Sự kiện này có thể được xử lý bằng cách quá tải các phương thức OnPreLoad hoặc tạo ra một điều khiển Page_PreLoad.
- Load - Sử dụng sự kiện này để thiết lập thuộc tính cho Control, thiết lập các kết nối với Cơ sở dữ liệu.
- LoadComplete – Quá trình tải trang đã hoàn thành, điều khiển sự kiện xử lý được chạy. Sự kiện này có thể được xử lý bằng cách quá tải các phương thức OnLoadComplete hoặc tạo ra một sự kiện Page_LoadComplete .
- PreRender – Sự kiện này xảy ra khi trang web được trả về cho Client
- PreRenderComplete - Khi sự kiện PreRender được thực hiện đệ quy cho tất cả các điều khiển con, sự kiện này đảm bảo hoàn thành giai đoạn rendering trước.
- SaveStateComplete - Trạng thái của control trên trang được lưu. Personalization, trạng thái control và thông tin trạng thái view được lưu. Các thẻ HTML được tạo ra. Giai đoạn này có thể được xử lý bằng cách ghi đè phương thức Render hoặc tạo một trình xử lý Page_Render.
- Unload- Sự kiện này đối lập với sự kiện Page_Init. Nếu như sự kiện Page_Init xảy ra đầu tiên khi trang Web được yêu cầu, thì đây, Page_Unload là xự kiện sau cùng, xảy ra sau tất cả những sự kiện khác.