Đồ án Xây dựng được bộ khung cho website

Ta có thể kiểm tra giá trị của thuộc tính trong đối tượng con bằng cách sử dụng cú pháp: objectName.PropertyName. Ví dụ, dòng lệnh sau gán vào một biến x giá trị của thuộc tính carSpeed của đối tượng con được gán vào biến car1: x = car1.carSpeed Gọi các thuộc tính của đối tượng từ bên ngoài có thể có ích khi cần thông tin về một nhóm các đối tượng, như là tốc độ trung bình của tất cả các xe trong một cuộc đua. Ta cũng có thể dùng các thuộc tính của một đối tượng để xác định hành vi của đối tượng khác phụ thuộc vào nó. Ngoài ra có thể kiểm tra xem một đối tượng con chứa một hàm cụ thể nào đó hay kiểm tra xem nó xuất phát từ script cha nào. Điều này có ích ta có nhiều đối tượng xuất phát từ nhiều script cha tương tự nhau nhưng có vài điểm khác biệt nhỏ. Ví dụ, ta muốn tạo một kịch bản trong đó một một trong vài script cha có thể được dùng để tạo một đối tượng con. Ta có thể xác định xem một đối tượng con được tạo ra từ script cha nào bằng hàm script(), hàm này trả lại tên script cha. Câu lệnh sau kiểm tra xem có phải đối tượng car1 được tạo ra từ script cha Car:

doc74 trang | Chia sẻ: oanh_nt | Lượt xem: 1310 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Đồ án Xây dựng được bộ khung cho website, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
công ty Netscape Communications và thông dụng nhất hiện nay. + Internet Explorer: Trình duyệt của Microsoft và hiện nay đang được hoàn thiện dần, có sẵn với Windows trên các PC cá nhân. Web site có cấu tạo gồm 01 trang chủ (homepage). Trang này sẽ được liên kết tới đầu tiên khi người sử dụng truy cập đến địa chỉ đã đăng ký trên mạng Internet. Từ trang chủ sẽ có nhiều liên kết tới các trang trong và ngược lại. Trong một web site có thể có nhiều cấp vào trang trong như hình cây. Việc liên kết truy cập giữa các trang với nhau; giữa các vị trí trong các trang hoặc với địa chỉ web site khác là do người cung cấp thông tin thiết kế. Trang Web là một thế giới rộng lớn các thông tin khác nhau. Trên trang Web người sử dụng có thể kết hợp được cả văn bản, đồ hoạ tĩnh hay động, tiếng nói, âm nhạc.... Mỗi một trang Web đều có một đặc trưng riêng và do người cung cấp thông tin tự thiết kế. Các tài liệu chung nhất trên trang Web thông thường được viết bằng ngôn ngữ HTML (Hyper Text Mark-up Language) - Ngôn ngữ đánh dấu siêu văn bản và Ngôn ngữ Java. Đối với đa số người truy nhập Internet, vấn đề quan trọng là làm thế nào để lấy được thông tin nhanh nhất. Tuy nhiên, tốc độ truy nhập thông tin từ một trang Web phụ thuộc vào nhiều yếu tố như: + Tốc độ truyền dữ liệu. + Xung đột truy cập + Qui mô dữ liệu thông tin trong trang Web. Tốc độ truyền dữ liệu (tính bằng số bít/giây) Tốc độ đường truyền phụ thuộc vào cơ sở hạ tầng của mạng thông tin công cộng. Tốc độ đường truyền càng cao, thời gian truy xuất thông tin càng nhanh, càng nhiều người có khả năng cùng truy nhập một lúc. Đối với đường truyền hiện nay sử dụng chủ yếu là kết nối qua đường điện thoại và đường thuê bao (leaded line) . Xung đột truy cập + Số lượng nhiều người cùng truy cập đến một địa chỉ tại một thời điểm: Đây là khả năng rất hay xảy ra trên mạng do nhu cầu của người dùng khi đồng thời muốn truy cập một thông tin quan trọng. Do đó gây ra xung đột buộc người dùng phải mất thời gian chờ đợi lâu mới có thể lấy được thông tin cần. + Khả năng cung cấp của máy chủ, nếu máy chủ mạnh và có thêm một Cache Server (Cache Server: máy chủ có khả năng lưu giữ những thông tin truy cập thường xuyên nhất, giảm thiểu cho người dùng thời gian truy cập), thì giảm xung đột, thời gian truy cập lấy thông tin của người sử dụng nhanh hơn. Qui mô dữ liệu Các file đồ hoạ và âm thanh là các file dữ liệu có dung lượng lớn hơn nhiều lần so với các file văn bản, trong khi thời gian truy xuất thông tin lại phụ thuộc vào độ lớn của file. Chẳng hạn, nếu không sử dụng kỹ thuật nén tín hiệu, để lấy ra 3 phút âm thanh của một kênh stereo (31.7 MByte) từ CD sẽ cần hơn 2 tiếng với tốc độ 14,4kps ! Đối với một trang Web có số lượng đồ hoạ lớn, trang nhiều màu và hình vẽ phức tạp thì file HTML đó sẽ lớn hơn rất nhiều so với trang chỉ có hình hoạ đơn giản. Thời gian truy cập trang Web chậm hay nhanh là một yếu tố quan trọng quyết định đến sự thành công của trang Web đó trên mạng. Một trang Web có sự trình bày đẹp và hợp lý, ít đồ hoạ phức tạp, truy cập nhanh sẽ được nhiều người dùng truy cập đến hơn là một trang Web phức tạp, truy cập lâu. ứng dụng của Web ứng dụng đầu tiên của Web mà bất kỳ người nào đã từng dùng Web đều biết đến là Web đã thay đổi cách biểu diễn thông thường bằng văn bản toàn chữ nhàm chán sang kiểu thông tin sinh động có hình ảnh, âm thanh. Với bộ duyệt Web có trang bị các tiện ích đồ hoạ máy tính, ta dễ xử lý các thông tin có kèm theo các hình ảnh như đồ thị, sơ đồ, các bức ảnh chup, phim, và các thông tin đa phương tiện khác. Bản thân ý tưởng ban đầu của Web được xây dựng đầu tiên ở CERN là nhằm giúp các nhà khoa học trao đổi thông tin nghiên cứu với nhau. Web giúp cho công tác nghiên cứu, phổ biến khoa học dễ dàng hơn vì cách tiếp cận với tài liệu khoa học nhanh, không đến nỗi quá tốn kém. Qua một vài thao tác nhỏ, ta có thể tìm thấy một số nguyên tố lớn nhất hiện nay là gì ? hoặc một số thông tin cần thiết mà ta cần mà không phải viết thư hay gọi điện đi khắp nơi tìm kiếm. Có Web, chúng ta cũng có thể đặt hàng, mua bán trên mạng. Ta có thể thấy mặt hàng ta muốn trên màn hình mà nếu ta ưng ý với nó thì chỉ cần vài thao tác nhỏ là có thể soạn ngay một bức thư đặt hàng kèm theo và yêu cầu của bạn lập tức được thoả mãn. ý tưởng của xa lộ thông tin là mua hàng tại gia. Web giúp cho quan hệ khách hàng và chủ hàng thuận tiện hơn thông qua giao tiếp trên mạng. Những hãng cung cấp máy tính lớn như Hewlett-Packard, DEC... đã dùng công nghệ Web để cung cấp cho người mua những tài liệu kỹ thuật, phần mềm hay trả lời trực tiếp các câu hỏi. Ta thường gọi đó là dịch vụ trực tuyến Web. Bên cạnh đó, Web cũng giúp cho công nghiệp giải trí một phương tiên tuyệt vời. Các ngô sao điện ảnh thường tạo cho mình những tư liệu hình ảnh chụp qua các thời kỳ và lưu trữ trên một máy nào đó. Người hâm mộ chỉ cần tìm đến đúng thư viện đó mà thao tác; sao chép về máy tính của mình. Các thư viện, bảo tàng muốn giới thiệu các kiệt tác chỉ cần lưu trữ chúng trên máy tính, và nếu bạn không có thời gian để đi đây đi đó, bạn có thể ngồi tại nhà mà du lịch vòng quanh thế giới... Nói tóm lại Web là công cụ để trợ giúp các hoạt động trên nhiều lĩnh vực tuỳ theo mục đích, yêu cầu của người sử dụng. V. Giới thiệu về CGI (common gateway interface) Giới thiệu chung Lập trình CGI bao gồm việc thiết kế và viết các chương trình, thông thường các chương trình này được khởi động từ các trang Web (thông qua việc sử dụng form HTML các trang Web sẽ khởi động chương trình CGI). HTML form trở thành phương thức được chọn để truyền dữ liệu thông qua mạng bởi vì cách dễ nhất để thiết lập user-interface là sử dụng các tag: HTML form và Input. Với HTML form, chúng ta có thể thiết lập được các cửa sổ nhập dữ liệu (input window), các pull-down menu, các hộp chọn (check boxes), các nút lựa chọn kiểu radio button... Hơn nữa, dữ liệu từ nhiều kiểu khác nhau sẽ được tự động mã hoá và gửi cho server khi sử dụng HTML form, điều này rất quan trọng trong việc bảo đảm an toàn dữ liệu. Tuy nhiên, các chương trình CGI không nhất thiết phải khởi động bởi trang Web sử dụng HTML form, chúng có thể được khởi động nhờ việc thực hiện lệnh server side include, thậm chí, có thể khởi động chương trình CGI từ dãy lệnh của server. Nhưng việc khởi động chương trình CGI từ dãy lệnh có thể làm cho chương trình không thực hiện theo yêu cầu mong muốn hoặc đặt ra khi thiết kế. Lý do của việc này là do chương trình CGI thường chạy trong một môi trường riêng biệt so với môi trường cảu hệ điều hành trên server. Môi trường này là do Web Server tạo ra. Trước khi các chương trình CGI được khởi động thì Web Server đã tạo ra một môi trường xử lý đặc biệt dành riêng cho các chương trình CGI. Môi trường này bao gồm việc biến đổi tất cả các HTTP request thành các biến môi trường. Tiếp theo, server sẽ cố gắng xác định kiểu file hoặc chương trình đang được gọi bởi vì server phải thực hiện những công việc khác nhau dựa vào kiểu file mà nó đang gọi. Vì thế, đầu tiên Web Server phải tìm phần mở rộng của file để xác định xem nó phải tìm kiếm và thực hiện các lênh server side include trong file hay khởi đoọng Perl để biên dịch và chạy file theo kiểu từng dòng lệnh hoặc phải tạo ra các header HTML tương ứng và trả lời lại một file HTML. Sau khi server khởi động các server side include hoặc các chương trình CGI (thậm chí là các file HTML). CGI đợi các kiểu trả lại từ server side include hoặc chương trình CGI. Nếu server đang trả lại kiểu file HTML thì CGI sẽ đợi file trả lại là dạng text với các nhãn HTML và phần dữ liệu text trong file đó. Khi server trả lại file kiểu HTML thì nó cũng tạo ra các header HTML, các header này sẽ báo cho trình duyệt phía Client biết kết quả yêu cầu của client đối với một trang Web và kiểu dữ liệu mà Browser phía client sẽ nhận được. File server side include (SSI) làm việc giống như file HTML thông thường, chỉ có một điểm khác biệt là server sẽ tìm lệnh server side include tại mỗi dòng trong file. Nếu tìm thấy một lệnh server side include thì server sẽ thực hiện lệnh này và kết quả sẽ được chèn vào vị trí đặt câu lệnh SSI trong file khi trả lại cho client. Server trả lại phần mở rộng của file do client yêu cầu để xác định xem file đó có phải là file SSI hay không. File SSI phải có phần mở rộng .shtml Nếu server xác định rằng file do client yêu cầu phải thực hiện như chương trình CGI thì nó sẽ thực hiện chương trình đó. Sau khi server thực hiện xong chương trình, thì chương trình CGI sẽ phải trả lời client tối thiểu bao gồm một số header HTML và một vài nhãn HTML. Ví dụ: nếu chương trình CGI trả lời client dạng HTML thì nó phải trả lại một header content. type: text/html. Lập trình CGI là gì? Lập trình CGI là việc viết chương trình, chương trình sẽ nhận và biến đổi dữ liệu được truyền trên Internet giữa Web Server và Web Client. Chương trình CGI sẽ thực hiện chức năng như gateway (cửa khẩu) hoặc interface (giao diện) giữa các ứng dụng khác nhau. Chương trình CGI thông thường được viết bởi ngôn ngữ scrip như Perl. Ví dụ một ứng dụng tra cứu danh bạ điện thoại trên Internet được xây dựng như sau. Khi có yêu cầu tra cứu được gửi đi từ client thông qua trang web sử dụng HTML form thì các yêu cầu đó được gửi tới chương trình CGI. Chương trình CGI sẽ biến đổi chương trình này thành một dạng dữ liệu thích hợp cho cơ sở dữ liệu chứa dạnh bạ, sau đó chương trình CGI sẽ truyền dữ liệu đó tới cơ sở dữ liệu. Cơ sở dữ liệu sau khi nhận được yêu cầu thì tiến hành thực hiện yêu cầu đó, sau khi thực hiện xong sẽ trả lại kết quả cho chương trình CGI, chương trình CGI sẽ biến đổi kết quả thành dạng dữ liệu thích hợp và chuyển lại cho client. HTML, HTTP và chương trình CGI HTML, HTTP và chương trình CGI phải làm việc cùng với nhau để tạo ra ứng dụng trực tuyến trên Internet. HTML code định nghĩa giao diện chương trình. HTTP là phương thức vận chuyển dùng để truyền dữ liệu giữa chương trình CGI và Client. Chương trình CGI sẽ lấy các yêu cầu từ client, sau đó chuyển tới server đồng thời trả lại client kết quả tả lời của server đối với yêu cầu của client. Nguyên tắc HTML HTML được thiết kế cho dữ liệu một kiểu dạng text riêng biệt. Nó thực hiện các chức năng đó thông qua các nhãn (HTML tag). HTML có thể gọi chương trình CGI thông qua nhãn hoặc nhãn liên kết . Việc sử dụng nhãn cho phép người sử dụng có thể gửi một số dữ liệu không cố định tới server thông qua chương trình CGI. Tiện hơn là việc dùng nhãn liên kết giống như: Text Cách gọi chương trình CGI trong nhãn liên kết đơn giản hơn nhiều so với việc sử dụng form HTML. Giả sử chúng ta tạo một liên kết tới chương trình CGI, nó có dạng như sau: Trong liên kết này: PATH_INFO có giá trị: extra-path-info QUERY_STRING có giá trị: test = test-n HTML form thực hiện chức năng gửi các dữ liệu biến đổi tới chương trình CGI. Người sử dụng có thể thông qua HTML form để gửi các bức thư, điền nội dung vào phiếu đăng ký... Với cách sử dụng HTML form có thể xây dựng được các trang Web theo cơ chế hỏi đáp giữa người sử dụng và server. Các HTTP header Dữ liệu được tập hợp bởi Browser rồi gửi tới chương trình CGI thông qua HTTP header. Các HTTP haeder cơ bản dùng để bắt đầu việc truyền dữ liệu giữa Browser và Web Server là GET và POST. Nếu nhãn HTML gọi chương trình CGI có dạng sau: CGIprogram thì HTTP header method ngầm định GET được sử dụng để truyền dữ liệu với chương trình CGI. Thuộc tính Method của nhãn form sẽ định nghĩa kiểu HTP header method được sử dụng để truyền dữ liệu giữa Browser và chương trình CGI. Khi phương thức gửi dữ liệu tới chương trình CGI đã xác định thông qua HTTP header method, thì dữ liệu được gửi đi theo một trong hai cách: Nếu phương thức GET được sử dụng, thì dữ liệu được gửi đi thông qua trường Uniform Resonce Identifier (URI), còn nếu phương thức POST được sử dụng thì dữ liệu được gửi đi sẽ giống như các gói tin riêng biệt. Sau khi Browser đã xác định được dữ liệu mà nó sẽ gửi đi theo phương thức nào thì nó tạo ra một HTTP request header, HTTP request này để xác định chương trình CGI sẽ nhận dữ liệu nằm ở vị trí nào trên server. Server sử dụng các HTTP request header để tìm chương trình CGI và khởi động nó. Browser sử dụng HTTP request header này để xác định kiểu sử dụng dữ liệu như dữ liệu dạng văn bản; hình ảnh... Các thư mục trên server Thông thường server được chia làm hai cây thư mục (cây thư mục bao gồm một cây thư mục chính và các cây thư mục con nằm dưới nó). Hai cây thư mục đó gọi là server root và document root. Server Root Server root bao gồm tất cả các file thuộc quyền quản lý của Web Master hoặc System Adimitrator. Dưới server root là hai cây thư mục cần phải để ý. Đó là các thư mục log và conf (trong các server NCSA), trong các hệ server khác, chúng có thể có tên khác nhưng tính chất thì như nhau. -Thư mục Log: Đây là nơi chứa các file log. Trong htư mục log còn chứa các file error.log. Một file log khác cũng đáng quan tâm là file access. File này thông thường được sử dụng để đếm số lần truy nhập vào Web. -Thư mục conf: Thư mục conf chứa chủ yếu là hai file: access. conf và srm.conf, ngoài ra còn có thể có các file khác. Hai file này giúp cho chúng ta biết được các giới hạn của Web server, nơi đặt các chương trình trong server... Document root Là nơi chứa các file HTML phục vụ cho các truy nhập của các Web Client. Dưới thư mục document root có thể tạo ra nhiều các thư mục con. Bảo vệ, quyền hạn, các đặc quyền đối với file (File Privileges, Permissions, Protection). Nếu chúng ta sử dụng Perl để tạo ra các chương trình CGI thì các chương trình CGI vừa có dạng là file văn bản vừa có dạng là file thực hiện. Các thư mục là một dạng file đặc biệt được thực hiện bởi server. Các thư mục chứa các directive cho phép server biết được vị trí của một nhóm file nào đó. Mỗi một kiểu file trên đều có ba tập hợp quyền hạn, trong đó, mỗi tập hợp quyền hạn có 3 thuộc tính: Read, Write và Execute. -Read cho phép mở file ra để đọc nội dung nhưng không cho phép sửa nội dung file. -Write cho phép file được mở ra để sửa. -Execute cho phép file thực hiện một số chức năng nào đó. Quyền này được áp dụng cho cả hai loại file: file chương trình và thư mục (trong Unix). Với các trang Web được mở ra cho bất kỳ người nào đó trên mạng thì nó phải được đặt thuộc tính read. Với các chương trình CGI được thực hiện bởi bất kỳ ai trên mạng thì nó phải được đặt thêm thuộc tính execute. Để đặt các thuộc tính cho file, thì dùng lệnh chmod. Lệnh chmod chấp nhận sử dụng hai tham số để đặt các thuộc tính cho file. Tham số thứ nhất là permission mark, tham số thứ hai là file muốn đặt thuộc tính. Permission mark bao gồm 3 số, mỗi một số sẽ định nghĩa quyền cho mỗi cấp truy nhập khác của file. Số thứ nhất nghĩa là quyền của owner; số thứ hai định nghĩa quyền của group và số thư ba định nghĩa quyền của các nhóm khác. Thuộc tính Read có giá trị 4, thuộc tính Write có giá trị2, thuục tính Execute có giá trị 1. Cộng 3 giá trị này chúng ta được một số định nghĩa quyền cho một cấp truy nhập. Ví dụ: Muốn đặt quyền Read, Write, Execute (4 + 2 + 1) cho owner, Read và Execute (4 + 1) cho group chứa owner và Execute (1) cho các user khác thì permission mark là 751 và lệnh chmod có dạng như sau: chmod751 (filename) Nếu muốn user thuộc group khác được sử dụng các file trong một thư mục nào đó, thì file đặt thuộc tính Execute cho directory. Trong Unix, chúng ta còn sử dụng lệnh umask để đặt ngầm định file-creation cho các quyền. Lệnh umask làm việc ngược lại so với lệnh chmod. Ngầm định giá trị umask là 0 điều này có nghĩa mọi file được tạo ra có đầy đủ các quyền do lệnh chmod tạo ra. Thông thường umask có giá trị 022. Với umask, các file được tạo ra sẽ bị xoá mọi quyền Write đối với group và other group. Mẫu lập trình CGI Có hai câu hỏi quan trọng nhất đối với lập trình CGI là: - Chương trình CGI là gì? - Tao sao chương trình mẫu này lại khác nhau? Câu trả lời thứ nhất là chương trình CGI làm việc như các chương trình giao diện hoặc cổng nối giữa Client Browser, Web Server và các ứng dụng lập trình cơ bản. Câu trả lời thứ hai cần chia làm ba phần. Mỗi phần định nghĩa các môi trường làm việc khác nhau của chương trình CGI. Dưới các môi trường này, chương trình CGI làm việc và nó tạo ra sự khác nhau so với các mẫu lập trình khác. Đầu tiên, các chương trình CGI phải mở rộng sự quan tâm tới bảo mật. Tiếp theo, người lập trình CGI phải hiểu dữ liệu được truyền tới các chương trình như thế nào. Cuối cùng, người lập trình CGI phải học cách phát triển phần mềm trong môi trường, nơi mà chương trình không có phương thức xây dựng từ trước để có khả năng xoá nó. Các chương trình CGI và vấn đề bảo mật Tại sao các chương trình CGI phải quan tâm tới việc mở rộng bảo mật? Điều quan tâm chính là các lập trình viên. Các chương trình CGI chạy dưới một môi trường không an toàn, bởi vì theo tự nhiên, các chương trình này phải cho phép thực hiện bởi bất cứ ai đó trên mạng, hơn nữa nó có thể được thực hiện tại bất cứ thời điểm nào và nó có thể thực hiện lặp đi lặp lại khi có người muốn tìm kiếm những lỗ hổng về bảo mật trong chương trình. Chính vì Net là nơi mà bất cứ một ai cũng có thể tìm kiếm và khám phá lỗi của nó nên vấn đề mở rộng bảo mật là điều đáng quan tâm. Hơn nữa, các chương trình CGI viết bằng các ngôn ngữ lập trình phiên dịch giống như Perl thì phần mã nguồn rất dễ bị truy nhập bất hợp pháp. Các phương pháp truyền dữ liệu của CGI Các cách truyền dữ liệu trên Internet là một khía cạnh quan trọng nhất của chương trình CGI. Chương trình CGI khó có thể thiết kế được nếu chúng ta không hiểu được cách dữ liệu được truyền như thế nào trên Internet thông qua kết nối HTML hoặc các trường trong HTML form. Khi thiết kế chương trình CGI, điều đầu tiên phải thiết kế khuôn dạng dữ liệu do người sử dụng nhập vào. Khuôn dạng này được cố định bởi hai cách truyền: GET và POST. Cả hai cách này đều sử dụng các HTTP header để truyền dữ liệu với chương trình CGI và gửi dữ liệu. Môi trường không trạng thái của CGI Việc thực hiện của giao thức không trạng thái HTTP có tác động lớn đến việc thiết kế các chương trình CGI. Mỗi một hành động của giao thức không trạng thái HTTP đều không liên quan tới các hành động trước đó, điều này dẫn tới việc, trong cùng một thời điểm có nhiều phiên bản của một chương trình CGI được thực hiện. Vấn đề này có tác động lớn tới việc CGI truy nhập file và dữ liệu. Các mẫu chwong trình cổ điển sử dụng nguyên lý logic tuần tự để giải quyết các vấn đề. Theo nguyên lý này, khi có nhiều phiên bản của một chương trình chạy cùng một lúc thì một dữ liệu nào đó đã bị sửa đổi và khi nó được chuyển tới các phiên bản khác nhau thì có thể có những giá trị khác nhau. Nếu xây dựng nhiều trang Web, trong đó thông tin trên một trang này có thể tác động tới các trang khác thì việc thiết kế để tránh trùng hợp dữ liệu ở cùng một trang mà tại nhiều phiên bản có giá trị khác nhau là một việc tương đối khó, trừ phi phải tiến hành những thao tác đặc biệt để giải quyết vấn đề này. Mỗi một trang Web khi bị truy xuất sẽ tạo ra một hành động gọi chương trình CGI mới, thì thao tác đặc biệt phải báo cho chương trình CGI biết được những vấn đề gì đã xảy ra khi nó đưọc gọi ở lần trước đó. Một trong những thao tác đặc biệt đó thường được sử dụng là lưu giữ những thông tin thay đổi vào file. Nhưng giải pháp này vẫn bị hạn chế khi có nhiều client gọi chương trình CGI cùng một lúc. Một cách khác là sử dụng trường input có thuộc tính ẩn trong HTML để lưu giữ các thay đổi. Nhưng cách này có một vấn đề ở chỗ: từng thông tin lưu trong trường input có thuộc tính ẩn không hiện lên trên browser nhưng client vẫn có thể biết được khi sử dụng chức năng xem mã nguồn trong browser. Như vậy, client có thể sửa đổi lại thông tin. Truyền thông giữa server và browser Hiểu được server và client kết nối với nhau như thế nào sẽ giúp chúng ta xây dựng và gỡ rối chương trình CGI. Việc truyền thông sử dụng Uniform Resource Identifier. Trước tiên, chúng ta hãy thử gửi một vài thuật ngữ. Các yêu cầu gửi tới server đều nằm trong form của URI đã dùng URN (Uniform resource name). Chúng ta có thể đã quen với URL, hoặc là trung tâm viết HTTP specifications dùng cho cả URI và URL. URI sẽ được dùng trong những phần sau. URI được tạo bởi ba trường cơ sở: protocol:/// Protocol: Protocol là trường đầu tiên của URI, dùng để chỉ rõ Internet Protocol nào đó sẽ được dùng để truyền dữ liệu giữa client và server. Có nhiều kiểu Internet Protocol như: FTP, WAIS, GOPHER, TELNET, HTTP... Trong đồ án này, chúng ta chỉ sử dụng giao thức HTTP (Hypertext Transport Protocol). Bằng cách này, các thư tín được truyền giữa server và client gọi là HTTP header. HTTP dùng để chỉ ra các file, chương trình và thư mục ở trên các server địa phương. Domain Name Ngay sau giao thức :// là domain name. Domain Name là địa chỉ máy của server trên Internet. Domain Name nằm giữa cá ký hiệu :// và / trong URI. Tiếp sau Domain Name là tham số: port number. Nếu không có port number thì ngầm định port 80 được sử dụng. Unix server điều khiển các dịch vụ, cách gửi các thông điệp nhận được các cổng khác cho các chương trình đăng ký sử dụng dịch vụ tại các cổng này. Cổng ngầm định cho HTTP deamom là 80. Các protocol khác như FTP và Telnet có các cổng ngầm định khác nhau. Hệ thống các địa chỉ cổng ngầm định được đặt trong các tên file dịch vụ khác nhau dưới hệ thống có tên /ect. Thư mục, file hoặc chương trình CGI Đường dẫn mà server sử dụng để tìm kiếm chương trình của chúng ta là phần đi ngay sau ký hiệu / thứ nhất. Server kiểm tra mỗi thành phần của đường dẫn này để xác định cái nào là file, chương trình hoặc thư mục được yêu cầu. Element là một phần của đường dẫn, thư mục, chương trình hay tên file. Mỗi thành phần được phân cách bởi bắt đầu và kết thúc "/". Trong ví dụ sau, chúng ta có thể thấy element1 = vnn.vn; 3element2 = webforum và element3 = index.html: //vnn.vn/webforum/test.html Nếu thành phần cuối cùng là thư mục và không có một phần tử nào đi theo nữa thì server sẽ thực hiện 1 trong 3 việc sau: -Nếu có file index.html trong thư mục, thì file được trả lại. File index.html là ngầm định tên trang chủ. -Nếu không có file index.html trong thư mục và danh sách các thư mục thì thư mục gother-like được trả lại (danh sách thư mục là tuỳ chọn cho phép thi hành trong file access.conf). -Nếu danh sách thư mục là tắt thì lỗi trạng thái mã 404, NOT FOUND được trả lại. Nếu phần tử là thư mục và đi sau nó còn có phần tử khác thì phần tử này tiếp tục được phân tích. Nếu như thành phần tiếp theolà chương trình, thì chhương trình sẽ được thi hành và dữ liệu của chương trình xuất hiện trả lại cho client. Chú ý: Nhớ rằng server chỉ như là máy tính để nối những nơi khác nhau ở cuối đường dây. Internet là việc kết nối, nó làm cho không có sự khác nhau thậm chí server là ở trong cùng một phòng hoặc ở bên kia thế giới. Tuy nhiên, cũng có lúc có sự chậm trễ khác nhau giữa việc truyền qua phòng hoặc bên kia thế giới. Nhưng nó giống như nói chuyện qua điện thoại. Dù chúng ta nói chuyện gần hoặc qua quốc gia, chúng ta không ngại việc đàm thoại sẽ bị trì hoãn. Nếu chúng ta gọi trang Web có form HTML thì nó gửi dữ liệu tới chương trình CGI, sau đó, dữ liệu này bắt đầu được tiến hành. Sử dụng kết nối qua mạng: (using the Internet connection) Tất cả các phần request header, response header, status line và những phần dữ liệu khác đều được gửi lên Internet. Điều đó có vẻ như rất huyền bí, nhưng nó lại là một phần chủ chốt của common gateway interface (CGI). Trên mạng Internet, thường dùng kết nối TCP/IP đến public socket qua cổng đã được định nghĩa sẵn. TCP/IP, Public socket và Port Trên mạng Internet, việc kết nối thường dùng TCP/IP... TCP/IP (Transport Control Protocol/Internet Protocol) là chuẩn của Internet. Phương pháp này nghĩa là chuyển các yêu cầu tới trang Web để điều khiển một vài tài liệu kỹ thuật, bắt đầu với RFC và giải nghĩa rõ ràng việc chuyển đổi các thư tín trên Internet (RFC là request for commens. Các RFC là một nhóm người dùng trên Internet có chung các ý tưởng và các phương thức). Thật đơn giản, khi request message được bó lại với nhau trên cùng một ngôn ngữ thì việc kết nối mọi máy trên mạng với nhau là điều dễ hiểu. Public socket... Coi public socket như số điện thoại Yellow pages của server trên mỗi vị trí của trang Web. Socket là địa chỉ phần mềm mạng như mạng của máy Unix dùng để đàm thoại với nhau. Port gồm có file, các dịch vụ, ở trong thư mục, /etc và trên server chứa các cổng để phân công cho các dịch vụ thông thường trên Internet như FTP, Gother, và kết nối HTTP. Ngầm định cổng HTTP là 80. Vì vậy, nếu chúng ta nhìn thấy số 80 (hoặc một vài số khác) vào cuối của URI, chúng ta hãy kích để tới trang Web. Như vậy, chúng ta đã biết rằng: cổng dùng để nối client và server. Chương 5: Công nghệ Shockwave Đối với multimedia trên internet, Shockwave là một phần khó bỏ qua trong chiến lược phân phối sản phẩm. Có các loại Lingo dùng cho mạng: Lingo dành cho các hoạt động mạng – còn gọi là netLinggo - điều khiển giao tiếp giữa phim và các phần khác trên mạng. Lingo để điều khiển multimedia theo cơ chế streaming khi các frame xác định của một phim đã sẵn sàng. Lingo hỗ trợ URL , xem chúng là các tham chiếu đến các file ngoài, làm cho các tài nguyên internet sẵn sàng để được sử dụng. Scripting trên trình duyệt cho phép bạn điều khiển sự tương tác giữa phim và môi trường chạy của nó. Chương này trình bày các thông tin cơ bản để sử dụng Lingo với phim Director trên một mạng máy tính. Tất nhiên, công nghệ internet đang thay đổi liên tục. Để xem thêm các thông tin cập nhật về Lingo, Shockwave, và các ví dụ của chúng các bạn phải vào các website cần thiết. Chúng chứa nguồn thông tin quý giá về thông tin mới nhất, các thủ thuật dành cho các nhà phát triển, và các ví dụ tốt về phim Shockwave. I. Lingo cho hoạt động trên Internet Director cho phép một hoạt động trên mạng được thực hiện cho dù một hoạt động trên mạng khác chưa hoàn thành. Với khả năng này, thường được gọi là background loading, cho phép các file được tải xuống trong khi các hoạt động khác đang tiến hành. Background loading cho phép Director vừa thực hiện nhiều hành động một lúc vừa liên lạc với mạng. Bởi vì trong file được tải về ở “hậu trường” nên người dùng không nhận thấy thời gian chờ đợi. Tải dữ liệu từ mạng khác với tải các thành phần của cast trong Director. Tải từ trên mạng tải dữ liệu về đĩa ở máy địa phương. Tải các thành phần cast tức là tải vào bộ nhớ. Các bước cơ bản để thực hiện một hoạt động netLingo: Bắt đầu hoạt động Đảm bảo là hoạt động hoàn thành. Nhận kết quả nếu hoạt động hoàn thành. Đối với background loading, việc quan trọng là phải kiểm tra tiến trình của hoạt động. Những cách sau là những cách để kiểm tra xem một hoạt động đã hoàn thành hay chưa và có thành công hay không: Kiểm tra một trạng thái của hoạt động bằng cách sử dụng hàm netDone thường xuyên đến hàm biểu thị rằng hành động đã hoàn thành, nhưng thế vẫn chưa đủ để khẳng định rằng hoạt động đã thành công hay không. Kiểm tra một trạng thái lỗi bằng cách sử dụng hàm netError. Lấy dữ liệu từ mạng Tất cả hoạt động netLingo lấy dữ liệu từ mạng đều trả về một netID. Ví dụ, lệnh sau đây gán một netID của một hoạt động getNetText vào một biến theNetID. Set theNetID=getNetText(“”) Bảng sau liệt kê các netLingo lấy dữ liệu từ mạng: Lệnh Hoạt động GetNetText Bắt đầu lấy về một file từ server dưới dạng text Dùng netDone để kiểm tra khi nào getNetText hoàn thành. Dùng netTextResult để trả về kết quả của hàm getNetText GotoNetMovie Lấy về và chơi một phim Shockwave từ mạng. Phim hiện tại sẽ tiếp tục chạy cho đến khi phim mới sẵn sàng. GotoNetPage Mở một URL, cho dù đó là một phim Shockwave, HTML, hay dạng MIME khác. Lệnh gotoNetPage có thể thay thế nội dung một trang hay mở một trang mới. Nếu trình duyệt chưa mở, lệnh này sẽ mở trình duyệt. PreLoadnetThing Load trước một file từ server vào cache của browser. Điều này cho phép bạn dùng phần đã tải xuống mà không bị gián đoạn, nó được lấy ra từ bộ nhớ. DownLoadnetThing Download một file từ server vào một file xác định trên đĩa địa phương. Để lặp lại một hoạt động mạng có cùng URL, trước hết dùng lệnh netAbort để xoá bỏ hoạt động trước có cùng URL. Nếu không thì kết quả của hoạt động trước sẽ còn trong cache. Kiểm tra trạng thái của hoạt động backgroundloading Bảng sau đây liệt kê các netLingo dùng để kiểm tra tiến trình của các hoạt động trên mạng. Hàm Sử dụng NetDone Kiểm tra xem hàm getNetText, downLoadNetThing, preLoadNetThing, hay gotoNetMovie đã hoàn thành hay chưa NetError Kiểm tra xem một hoạt động mạng đã hoàn thành chưa. Một xâu rỗng sẽ được trả về cho đến khi hoạt động kết thúc. Lấy kết quả Các Lingo sau đây sẽ lấy kết quả của hoạt động mạng: Hàm Sử dụng NetTextResult Trả về kết quả của một hoạt động. NetID được trả về bởi hoạt động mà ta đang lấy kết quả của nó. NetLastModDate Trả về xâu ngày tháng được sửa đổi cuối cùng từ HTTP header. NetMime Trả về kiểu MiMe của HTTP GetLatestNetID Trả về một định danh duy nhất đối với một hoạt động không đồng bộ cuối cùng được bắt đầu. Các hàm netTextResult, netMime và netLastModDate chỉ có thể được gọi kể từ sau khi các hàm netDone hay netError trả về giá trị chỉ ra rằng hoạt động đó đã được kết thúc trước khi hoạt động mới bắt đầu. Streaming multimedia Streaming là cơ chế “vừa chạy vừa tải về”. Director cho phép một phần của phim bắt đầu chạy khi một phần dữ liệu và thành phần cast được tải về. Lingo có thể dùng cơ chế streaming trong các cách sau: Điều khiển âm thanh SWA (Shockwave Audio) Kiểm tra xem một thành phần của cast đã được tải về hay chưa trước khi bộ phim tiếp tục chạy. Kiểm tra xem các thành phần cast dùng trong một frame đã được tải về hay chưa trước khi chạy frame. Hàm Sử dụng GetError Xác định xem có lỗi xảy ra không GetErrorString Lấy một xâu mô tả lỗi trong một file SWA PauseMember Tạm dừng một file SWA PercentPlayed Xác định số phần trăm file SWA đã được chơI PlayMember Bắt đầu chơi một file SWA là thành phần cast PreLoadBuffer Tải về trước một file SWA vào bộ nhớ PreLoadTime Xác định thời gian để tải về trước khi chơi SoundChannel Xác định số hiệu của kênh âm thanh trong đó file SWA được chơi State of member Trạng thái bắt đầu, kết thúc, tạm ngừng hay đang chơi Stop member Kết thúc một file SWA II. Sử dụng URL với Lingo Ngoài Lingo được thiết kế để sử dụng cho các hoạt động trên mạng, một số thành phần quan trọng có thể dùng URL như là các tham chiếu đến các file ngoài. Điều này cho phép bạn dùng internet và xem nó là một nguồn chứa các thành phần cast, phim, và các file ngoài khác. Những thành phần Lingo này có thể dùng URL như là các tham chiếu đến file trong tất cả các trường hợp: MoviePath Pathname UnLoadMovie Những Lingo sau đây hỗ trợ URL và xem chúng là các tham chiếu đên các file ngoài. Tuy nhiên, khi sử dụng những tham chiếu này để lấy được các file trên internet, bạn có thể tránh các trục trặc gây ra bởi sự trễ mạng bằng cách download trước các file dùng downloadNetThing hay preloadNetThing. Lệnh downLoadNetThing không được cho phép trong một phim Shockwave chạy trên một trình duyệt. Sau khi file được download, dùng chúng với các tham chiếu đến file trên đĩa cục bộ: FileName of castLib FileName of member FileName of window Go to movie ImportfileInto PreLoadMovie Play movie Các thành phần Lingo này có thể dùng URL trỏ đến các file âm thanh dạng SWA như là các tham chiếu đến file: StreamName URL of member Tuy nhiên những Lingo này chỉ chạy được khi ta tạo ra các projector; chúng không chạy được trên phim dạng Shockwave: Open window Forget window III. Điều khiển trình duyệt Những điểm khác khi dùng Lingo trong trình duyệt Có một vài điểm khác khi dùng Lingo để chạy một film trên internet phụ thuộc vào film có chạy trong trình duyệt hay không. Đối với một phim chạy trong trình duyệt, cần thiết phải dùng preLoadNetThing để tải về trong bộ đệm của trình duyệt. Đối với một film hay projector chạy ngoài trình duyệt, background loading là không cần thiết. Tuy nhiên, tải về trước (preloading) là một ý tưởng tốt bởi vì nó cải thiện hiệu quả khi chạy film. Scripting trên trình duyệt Lingo cho phép các phim Shockwave và các đối tượng khác trong một trình duyệt- bao gồm cả phim Shockwave tương tác với nhau. Mỗi một môi trường script cung cấp một cách để giao tiếp với Shockwave. Đối với môi trường script, Shockwave chỉ đơn giản là đối tượng trong môi trường mà các phương thức có thể được gọi. Director cho phép môi trường script kiểm soát phim Shockwave. Điều này đặc biệt hữu ích để môi trường có thể kiểm soát và đồng bộ phim. Thêm vào đó, hàm EvalScript đánh giá một biểu thức Lingo và trả về một kết quả. Điều này cho phép truy nhập và điều khiển một cách hoàn toàn đến phim mà không cần phải có mô tả chi tiết về các hàm và các thuộc tính. Để an toàn, tránh dùng lệnh do, có thể cho phép Lingo hoạt động tuỳ tiện. Thay vào đó nên dùng một hàm xử lý như sau: on EvalScript param case: param of "Horn": playHorn "Drum": bangDrum "Bongos": reallyBeat end case end Bảng sau cho ta một danh sách các hàm của Browser có thể dùng trong phim Shockwave Để Lệnh từ trình duyệt Điều khiển đầu đọc của phim Play Stop Rewind GotoFrame GotoMovie Xác định khung hình hiện tại của phim Getcurrent Frame Gửi một chuỗi, như là một khai báo của Lingo đến phim movie. EvalScript Xác định xem phim chạy khi đang load hay quay lại AutoStart Phim Shockwave cũng có thể gửi message tới trình duyệt bằng hàm externalEvent. Hàm này có dạng externalEvent(“string”) khi mà bạn thay thế “string” bằng một xâu mà trình duyệt hay các đối tượng khác trong môi trường script có thể hiểu. Các hàm API trong Shockwave Các ngôn ngữ script thì khác nhau, nhưng các phương thức và thuộc tính của Shockwave đối với chúng là tương tự nhau. IV. Lingo giao tiếp với trình duyệt Dùng externalEvent từ trong một phim để điều khiển các đối tượng ngoài trong trình duyệt, bao gồm các phim Shockwave khác. Lệnh này có dạng ExternalEvent “string” Trong đó “string” thể hiện một lệnh của trình duyệt mà phim Shockwave gửi đi. Hàm này không trả về một giá trị. Cách môi trường dịch xâu dùng trong externalEvent phụ thuộc vào môi trường script. Phần III: xây dựng Chương trình Chương 6: Phân tích chương trình I. Nội dung chương trình: Macromedia Director được dùng để xây dựng các phim trình diễn và việc đưa âm thanh, hình ảnh hay các đối tượng multimedia khác rất thuận lợi. Ngoài ra, muốn tạo ra các ứng dụng linh hoạt, có tính tương tác cao thì ta còn phải dựa vào khả năng lập trình trong Director. Trong nội dung đồ án này, tôi chú trọng đến khả năng lập trình của nó và lập trình theo kiểu hướng đối tượng. Mục tiêu ở đây là xây dựng một bộ khung cho phép đưa các trang web lên mạng và liên kết chúng theo các chủ đề. Người dùng có thể thêm, bớt, sửa, xoá và cập nhật nội dung của website. Ta xây dựng hai phim Director với hai mục đích khác nhau: phim thứ nhất sẽ được dịch thành dạng file “.exe” và có nhiệm vụ cho phép ta đọc cũng như thay đổi nội dung file chứa menu của Website; phim thứ hai sẽ được dịch thành dạng phim Shockwave và nhúng vào trang chủ của website, nó có nhiệm vụ đọc file menu từ Webserver và hiển thị lên trang chủ. II. Tổng thể chương trình Sơ đồ hoạt động của chương trình như sau: Web client Web server Menu file Chương trình Chỉnh sửa menu đọc, ghi file đọc file Truyền file menu Hiển thị hệ thống menu chọn trang web trên menu Hiển thị nội dung trang web Chương 7: Xây dựng chương trình I. Phim left.dir Ta xây dựng trong Director một film tên là left và sau đó chuyển thành dạng film Shockwave (sẽ có tên là left.dcr). Phim left.dcr được nhúng vào trang web left.htm bằng dòng HTML: <embed src="left.dcr" bgColor=#2D0000 width=200 height=650 type="application/x-director" pluginspage=""> Trang chủ của website có tên là home.htm, nó được chia thành hai frame chứa Menu ở trang left.htm cho phép người dùng có thể chọn các trang web cần hiển thị. Như ở hình trên ta có thể click vào một trong các môn học để vào mức menu sâu hơn. Cấu trúc dữ liệu Trong phần này, chúng ta sẽ xem xét cụ thể cấu trúc dữ liệu của chương trình. Phim left chỉ sử dụng một loại cast đó là internal cast (cast bên trong) Internal Cast Cast này dùng để lưu trữ các thủ tục của phim, các dữ liệu dạng field (một dạng dữ liệu dùng trong Director – chứa văn bản). Các field này sẽ chứa các tên trong menu và được hiển thị. Score Trong cửa sổ score, ta dùng các kênh palette để đặt bảng màu, còn kênh script ta đặt ba thủ tục dạng frame script điều khiển hoạt động của phim. Từ kênh 14 đến kênh 63, ta đặt sẵn các field trên đó. Tạm thời ta chưa sử dụng hết tất cả các field này vào việc hiển thị menu. Chúng được dùng khi mở rộng chương trình, thêm vào nhiều menu item nữa. Các field sẽ được đặt thuộc tính là hiển thị hay ẩn bằng lệnh Lingo thích hợp, field nào chưa sử dụng sẽ được ẩn đi. Các kênh còn lại chưa được sử dụng. Biến toàn cục Chương trình sử dụng các biến toàn cục cho các dữ liệu dùng chung trong toàn bộ phim global readok : biến kiểm tra hoạt động network global gNetID : gán cho một hoạt động network (net operation) global gbfirstsprite : sprite đầu tiên gán cho các mục trong menu global gblocv : vị trí global gbloch global gbSubjectList : danh sách chứa các đối tượng global gbMenuFileName: tên file chứa menu global FileContent : nội dung file download được Cấu trúc file menu File menu chứa các dòng thể hiện theo một cấu trúc xác định. Mỗi dòng có dạng như sau: [#Name, #URL,#menuLevel,#BrowseNewWindow] trong đó: #Name: tên của menuItem #URL : đường dẫn đến trang web #menuLevel : nếu =1à là menu cha #BrowseNewWindow : thuộc tính này để kiểm tra xem là hiển thị nội dung trang web ở frame bên phải (right) hay hiển thị ở một cửa sổ mới . Các mức menu con nằm ngay sau menu cha. Ví dụ, ta có một cấu trúc menu sau: Ngoại ngữ Tiếng Anh Tiếng Pháp Bài 2 Streamline Headway Bài 1 Đại số Toán học Hình học Hình giải tích Hình không gian Vật lý Hoá học Với cấu trúc như trên, ta sẽ ghi vào file menu như sau: Ngoại ngữ,ngoaingu.htm,1 Tiếng Anh,tienganh,2 Headway, headway.htm,3 Bài 1,bai1.htm,4 Bài 2,bai2.htm,4 Streamline,streamline.htm,3,1 Tiếng Pháp,tiengphap,2 Toán học,toanhoc.htm,1 Hình học,hinhhoc.htm,2 Hình không gian,khonggian.htm,3 Hình giải tích,hinhgiaitich.htm,3 Đại số,daiso.htm,2 Vật lý,vatly.htm,1 Hoá học,hoahoc.htm,1 Danh sách Chương trình sử dụng một danh sách có tên là gbSubjectList để lưu các đối tượng thuộc lớp menuitemobject. Tạo các đối tượng menuItemObject Ta tạo ra một lớp có tên là menuItemObject, mỗi một mục trong menu là một đối tượng con (hay là một thực thể ) của lớp này. Các thuộc tính của lớp gồm có: PspriteNumber : chỉ số của sprite được gán cho đối tượng này PsubjectName : một xâu để hiển thị tên của menuitem PURL : đường dẫn đến trang web khi người dùng nhấn chuột vào menuitem tương ứng pLevel : mức của menu plocv,pLoch : vị trí của menuitem pVisible : dựa vào thuộc tính này để hiển thị hay ẩn đối tượng. PNewWindow : dựa vào thuộc tính này để xét xem có mở một trang Web trong một cửa sổ mới hay không. Các phương thức của lớp (class method) 1. Hàm tạo on new me return me end 2. Hàm khởi tạo Nhận các tham số đọc được từ file menu để gán cho các thuộc tính trong đối tượng. Mỗi khi đọc được một dòng từ menu file, ta sẽ tạo ra một đối tượng và khởi tạo cho nó. on Initialize me,mySpriteNumber, mySubjectName, myURL, myPapaOk,myVisible, myNewWindow pSpriteNumber = mySpriteNumber pSubjectName = mySubjectName pURL = myURL pIsPapa = myPapaOK pVisible = myVisible pNewWindow = myNewWindow end 3. Hàm hiển thị Hàm này kiểm tra thuộc tính hiển thị của menuitem, đồng thời xem nó là menu con hay cha để có thuộc tính hiển thị thích hợp như là màu chữ, cỡ chữ... on CheckVisible me if me.pVisible=true then sprite(pSpriteNumber).visible=true sprite(pSpriteNumber).locV=gblocv --if me.FirstLevel=false then -- la menu con thi thut vao sprite(pSpriteNumber).loch=gbloch+10*(pLevel-1) --member(sprite(pSpriteNumber).MemberNum).forecolor = 65 --member(sprite(pSpriteNumber).MemberNum).fontSize = 13 --else member(sprite(pSpriteNumber).MemberNum).forecolor =220-(pLevel-1)*7 member(sprite(pSpriteNumber).MemberNum).fontSize = 16-(pLevel-1) --end if gblocv=gblocv+30 end if end 4. Các hàm xử lý sự kiện chuột Các hàm này xử lý các sự kiện như mousedown, mouseEnter,… on MouseDown me --if me.FirstLevel=false then -- la menu con thi thut vao --member(sprite(pSpriteNumber).MemberNum).forecolor = 70 --else member(sprite(pSpriteNumber).MemberNum).forecolor = 100-(pLevel-1)*7 --end if end Hoạt động của chương trình Các thủ tục chính Thủ tục start: Thủ tục này được gọi mỗi khi phim bắt đầu chạy. Nó thực hiện các nhiệm vụ dưới đây: Khai báo các biến toàn cục Khai báo danh sách toàn cục Khởi tạo dữ liệu Đọc menu từ Webserver Nhảy tới khung hình đầu tiên on startMovie gblocv=72 gbloch=28 clearCache gNetID = void readok=false gbfirstsprite=14 gbMenuFileName = "menu" gbSubjectList=[]-- Subject ban dau rong -- day la linearlist hideAll ReadMenufromServer end Thủ tục này gọi thủ tục ReadMenufromServer để đọc file menu từ Webserver về. on ReadMenufromServer if not readok then clearCache gNetID = getNetText(the moviePath&"menu") end if end end Lingo cung cấp một hàm quan trọng để download một file, đó là hàm getNetText(). Sau khi gọi hàm này nó sẽ được gán một Network ID (ở đây là gNetID – biến toàn cục). Thủ tục framescript 21: Sau khi bắt đầu phim bằng thủ tục onStartMovie, trong đó ta đã gọi hàm để download file menu về, phim sẽ nhảy đến khung hình đầu tiên và script này sẽ được gọi. Thủ tục này có nhiệm vụ chính là chờ cho hàm getNetText() kết thúc và cất dữ liệu tuỳ theo có lỗi trả về hay không. on exitFrame me -- gNetID is set to void unless there is an active net operation, so we only check for results when needed. if not(voidP(gNetID)) then if (netDone(gNetID) = TRUE) then if (netError(gNetID) = "OK") then – neu khong co loi member("netresult").text=netTextResult() readok=true else alert "khong doc duoc file menu" -- FileContent="loi roi" end if FileContent=member("netresult").text gNetID = void end if --netDone go the frame end if end Thủ tục AddStringtoList: Thủ tục này thực hiện các bước: Phân tích một dòng trong file menu Khởi tạo một đối tượng menuitemobject (ta sẽ nói đến lớp menuitemobject sau) và gán các thuộc tính của đối tượng đó tuỳ theo dòng menu phân tích được. Thêm đối tượng vào danh sách on AddStringtoList thelist,str, spriteNumber trimleft(str) set aSubjectname=trimleft(item 1 of str) -- alert aSubjectname set aURL=item 2 of str set item3=item 3 of str aLevel= value(item3) if item3 contains "1" then aPapaOk=true aVisible=true else aPapaOk=false aVisible=false end if item4=item 4 of str if item4 contains "1" then aNewWindow=true else aNewWindow=false end if --tao moi mot doi tuong -- khoi tao doi tuong newMenuItemObject = new(script"menuitemobject") newMenuItemObject.Initialize(spriteNumber,aSubjectname,aURL,aPapaOK,aVisible, aNewWindow,aLevel) --set temp=[#subjectname:aSubjectname,#URL:aURL] theList.add(newMenuItemObject) --append theList,temp end Script hành vi “Click”: Đây là một behavior script quan trọng, xử lý các sự kiện chuột và đặc biệt là khi nhấn chuột. Khi một sự kiện chuột xảy ra, nó sẽ lấy được số hiệu của sprite nhận được sự kiện. Từ đó sẽ xác định được đối tượng menu gán với sprite đó trong danh sách gbSubjectList. Ta truyền sự kiện tương ứng cho đối tượng đó xử lý. property channel property mbNum property button_active property clickedObject --==================----------------------------------------------- on beginSprite me channel= me.spriteNum mbNum=sprite(channel).memberNum set the Button_Active of me = false --puppet à dieu khien bang lenh Lingo puppetSprite the spriteNum of me, TRUE end on endSprite me -- khong puppet nua puppetSprite the spriteNum of me, FALSE end on mouseDown me pos=channel-gbFirstSprite+1 clickedObject=gbSubjectList[pos] clickedObject.MouseDown() set the Button_Active of me = TRUE end on mouseUp me pos=channel-gbFirstSprite+1 clickedObject=gbSubjectList[pos] clickedObject.MouseUp() -- cho nay dat hanh dong cua nut khi bi nhan if the button_active of me then ClickItem end if -- kep hanh dong trong doan nay set the Button_Active of me = FALSE end on mouseUpOutside me set the button_active of me=FALSE end on mouseLeave me pos=channel-gbFirstSprite+1 clickedObject=gbSubjectList[pos] clickedObject.MouseLeave() end on mouseEnter me pos=channel-gbFirstSprite+1 clickedObject=gbSubjectList[pos] clickedObject.MouseEnter() end Khi nhấn chuột và thuộc tính button_active = true thì hàm on clickItem được gọi. Hàm này có nhiệm vụ: Kiểm tra trong gbSubjectList để đặt lại các thuộc tính hiển thị cho thích hơp. Gọi các hàm hiển thị của từng đối tượng trong gbSubjectList Nếu ở mức menu con thì dùng lệnh Lingo gotoNetPage để hiển thị trang Web theo URL được lưu trong đối tượng. on ClickItem openapage=false reshow=false--khong can hien thi lai menu --trong cac truong hop: 1.menucon --2. khong co con --hideAll -- dat lai cac pVisible nhu ban dau pos = channel-gbFirstSprite + 1 --clickedpos=pos --URL=getAProp(gbSubjectList[pos],#URL) clickedObject=gbSubjectList[pos] if clickedObject.pBeingOpen=false then p=SeekEqualBeingOpen(clickedObject.pLevel) if p0 then CloseAllChildren(p) --ShowCurrentItem reshow=true end if end if if (pos kiem tra con cai if ClickedObject.pHasChild then--neu co con moi kiem tra ClickedObject.pBeingOpen=true --alert "has children" reshow=true thoat=false tempObject=gbSubjectList[pos+1]--kiem tra xem co con khong repeat while (tempObject.pLevel > clickedObject.pLevel) and (thoat=false) reshow=true if tempObject.pLevel=clickedObject.pLevel+1 then -- sau mot muc tempObject.pVisible=true--sua thanh true de thu tuc CheckVisible dat lai end if -- sau mot muc pos=pos+1 if (pos < count(gbSubjectList)) then tempObject=gbSubjectList[pos+1] else -- den cuoi cung-->thoat thoat=true end if end repeat else -- khong co con openapage=true end if--neu co con moi kiem tra else --cuoi cung openapage=true -- ta se mo trang web end if -- chua cuoi cung if reshow then hideall gblocv=72 gbloch=28 --repeat with menuItemObject in gbSubjectList --menuItemObject.Checkvisible() -- end repeat showCurrentItem end if if openapage then -- clickedObject.pHasChild=false URL=clickedObject.pURL -- alert "go to " if clickedObject.pNewWindow then gotoNetPage URL,"newwindow" else gotoNetPage URL,"right" end if end if end ClickItem II. Phim suamenu.dir: Ta tạo phim suamenu.dir trong Director rồi dịch thành file chạy suamenu.exe. Chương trình này dùng để đọc và sửa file menu. Giao diện chương trình như hình dưới: Hoạt động của chương trình Các thủ tục chính: Chương trình có hai thủ tục chính để đọc và ghi file. Việc thao tác trên file trong Director được hỗ trợ thông qua một Xtra tên là fileIOXtra . Thủ tục readfile: Thủ tục này được gán cho button doc menu . Nó thực hiện các bước: Tạo mới một đối tượng của fileIOXtra Sử dụng đối tượng vừa tạo ra để mở file Đọc nội dung file ra một trường field tên là user message on readFile -- the file path needs to be the same one you wrote to filePath = the moviePath & "menu" --Tao mot thuc the cua fileIO Xtra fileIOInstance = xtra("FileIO").new() -- Bay loi neu khong ton tai file Xtra if not fileIOInstance.objectP then alert "File IO Xtra missing" exit end if -- mo file de doc fileIOInstance.openFile(filePath, 0) --kiem tra trang thai tra ve if fileIOInstance.status() = 0 then --neu mo thanh cong à doc file va sau do dong lai fileText = fileIOInstance.readFile() fileIOInstance.closeFile() -- display the text on stage. member("user message").text = fileText else -- if there was an error display the error message on stage. member("file contents").text = "Error: " & fileIOInstance.error(fileIOInstance.status()) end if end Thủ tục writefile: Thủ tục này được gán cho button ghi menu , nó thực hiện tương tự như thủ tục readfile, mở một file và ghi từ field user message vào file. on writeFile --tao dung dan den file filePath = the moviePath & "menu" -- set the text fileText = member("user message").text -- check for empty text if fileText = "" then alert "Please enter a text message to save" exit end if -- tao thuc the fileIO Xtra fileIOInstance = xtra("FileIO").new() -- bat loi file Xtra if not fileIOInstance.objectP then alert "File IO Xtra missing" exit end if --tao file fileIOInstance.createFile(filePath) -- status is a value returned by the fileIO Xtra reporting the status of the last FileIO command executed. -- in this case it's the result of executing "createFile(fileIOInstance, filePath)" case fileIOInstance.status() of 0: -- tao file moi nothing -122: -- file da ton tai, xoa di roi tao lai fileIOInstance.openFile(filePath, 0) delete(fileIOInstance) fileIOInstance.createFile(filePath) otherwise alert "Error: " & fileIOInstance.error(fileIOInstance.status()) exit end case -- mo file, ghi vao fileIOInstance.openFile(filePath, 0) fileIOInstance.writeString(fileText) -- dong file lai fileIOInstance.closeFile() end Chương 8: Đánh giá và hướng phát triển I. Các kết quả đạt được Đã xây dựng được một bộ khung cho website.Ta có thể sử dụng khung này để đưa vào đó một website cụ thể, có nội dung tuỳ ý. Người phát triển chỉ việc tạo các trang web và dùng chương trình để liên kết chúng lại với nhau. II. Hướng phát triển + Hoàn thiện chương trình suamenu.exe theo hướng dễ sử dụng hơn và có nhiều tuỳ chọn cho người dùng. + Phát triển chương trình left.dir để có tính thẩm mỹ cao. III. Tham khảo

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

  • docDAN307.doc
Tài liệu liên quan