Professional Documents
Culture Documents
Công Nghệ Web
Công Nghệ Web
Liệu đã sắp đến lúc công nghệ web có thể hoàn toàn thay thế cho các ứng dụng
desktop hiện tại. Mới đây cộng đồng mã nguồn mở đã và đang hi vọng sẽ đưa
ứng dụng web đến gần với ứng dụng desktop hơn. Giả sử mọi mong muốn của
họ đều trở thành sự thực khi mà ứng dụng web đã có đủ sức mạnh để thay thế
cho ứng dụng Desktop khi đó công việc của chúng ta sẽ trở nên đơn giản hơn rất
nhiều. Bạn thử tưởng tượng nhé thay vì một công ty có hàng trăm máy tính và
phải cài hàng trăm ứng dụng Desktop giống nhau thay vào đó chúng ta có thể
cài duy nhất một ứng dụng web để mọi người cùng dùng không những tại công
ty mà họ còn có khả năng làm việc tại nhà. Mọi trao đổi sẽ được diễn ra trên môi
trường web, những công việc đó ngày nay đã thực hiện được dựa trên nền tảng
công nghệ web và các phần mềm kết nối trên môi trường internet xong điều này
là chưa phổ biến. Chúng ta hoàn toàn có thể tin tưởng vào một tương lai phát
triển mạnh mẽ của công nghệ web. Mới đây một số ý tưởng cho rằng tại sao
chúng ta phải cài đặt hệ điều hành trong khi nếu chúng ta khởi động từ máy tính
và một trình duyệt web tương đương với một hệ điều hành sẽ được chúng ta sử
dụng để thay thế cho các hệ điều hành hiện nay. Mặc dù ý tưởng đó chưa được
thành sự thực xong nó cho thấy khả năng ứng dụng rộng rãi của công nghệ web
trong tương lai mà con người muốn hướng tới.
Qua đó chúng ta có thể xây dựng các website căn bản cho riêng mình và phát
triển nó để sau khi ra trường chúng ta có những kiến thức nhất định trong lĩnh
vực xây dựng website cho các doanh nghiệp trong tương lai.
Chúng ta còn được bắt tay xây dựng từng khâu trong việc xây dựng một website
hoàn chỉnh với HTML (Ngôn ngữ được sử dụng phổ biến trên các trình duyệt
web như một thành phần không thể thiếu), CSS (Cascading style sheet công cụ
xây dựng giao diện cho các website), Javascript (Công cụ hỗ trợ trong việc tạo
hiệu ứng và các bài toán phía trình duyệt), NodeJS (Ngôn ngữ xây dựng website
động....) , …
Phần 1: Giới thiệu đề tài:
Công nghệ Web, là một thế giới rộng lớn với muôn vàn những kiến thức
chuyên mô, rất nhiều ngôn ngữ, hệ quản trị cơ sở dữ liệu và mô hình xây dựng.
Các trang web lớn, nhỏ đều được tạo ra bời những công nghệ và ngôn ngữ phù
hợp với tính chất đặc thù riêng của chúng. Khi được tiếp cận môn học Công
nghệ Web, một môn học vô cùng bổ ích và có tính áp dụng cao cho định hướng
công việc của chúng em trong tương lai. Vì chỉ trong một thời gian học và tìm
hiểu môn học còn ngắn, các hiểu biết chưa được chuyên sâu để có thể tạo ra một
trang web hoàn hảo nhất. Nhưng với mục tiêu áp dụng triệt để những kiến thức
đã được cô Nguyễn Thị Nguyệt chỉ dạy, và những gì tìm hiểu được trên mạng.
Nhóm chúng em sau những bàn bạc và thảo luận thì đã đưa ra quyết định chọn
xây dựng một Trang Web Blog cá nhân, vì đề tài này thoả hết những tiêu chí cần
và đủ sau khi được học môn học này, trong một thời gian hạn hẹp. Nhu cầu tìm
kiếm thông tin luôn là vấn đề đặt ra khi người dùng sử dụng mạng internet để
tìm hiểu về nhiều lĩnh vực trong đời sống, từ đó chúng em chọn đề tài xây dựng
trang web Blog cá nhân để lan toả chia sẻ những kiến thức mà bổ ích mà chúng
em đã gặp đã tìm hiểu, tiếp cận đến nhiều người khác, mong rằng những kiến
thức từ các bài viết của trang Blog có ích đối với mọi người.
Tuy là một trang Web cơ bản nhưng thông qua đề tài nhóm muốn vẫn
bao quát toàn bộ những chức năng cơ bản và quan trọng đối với một website,
bao gồm:
+ Giao diện
Hệ thống website cần 2 phần: Giao diện người dùng và trang admin
Để xây dựng trang web chúng em chọn một số công nghệ như:
+ HTML,
+ CSS,
+ Javascript,
+ NodeJS
+ MySQL,
+ MVC (mô hình thiết kế được sử dụng trong kỹ thuật phần mềm),
Phần 3: Cơ Sở Lí Thuyết
3.1: HTML
3.1.1: Định nghĩa
HTML: HyperText Markup Language – ngôn ngữ đánh dấu siêu văn
bản. Do Tim Berner-Lee phát minh và trở thành ngôn ngữ chuẩn để tạo trang
web. HTML dùng các thẻ (tags) để định dạng dữ liệu. Tạo khung/bảng cho trang
web. Cấu trúc cơ bản của một trang HTML: Header, Title, Body, Footer.
3.1.2: Các thành phần cơ bản:
+ Thẻ (tag): là một tập hợp ký hiệu được định nghĩa trong HTML có ý nghĩa đặc
biệt. (Thẻ bắt đầu bởi "<" và kết thúc bởi ">", thẻ mở: <tên thẻ>, thẻ đóng: </tên
thẻ>)
+ Phần tử (element): có thể bao gồm thẻ mở, thẻ đóng và nội dung bên trong cặp
thẻ mở, đóng. Có hai loại phần tử trong HTML (Phần tử chứa nội dung: bao
gồm thẻ mở và thẻ đóng, Phần tử rỗng: bao gồm một thẻ)
+ Thuộc tính: mỗi thẻ có thể một hay nhiều thuộc tính đi kèm. Thuộc tính được
nhập ngay trước ngoặc đóng ‘>’ của thẻ mở. Có thể có nhiều thuộc tính trong
một thẻ, các thuộc tính phân cách nhau khoảng trắng. Các giá trị thuộc tính có
thể đặt trong “”, ‘’ hoặc không có. Nếu giá trị là chuỗi ký tự có khoảng trắng bên
trong, bắt buộc phải dùng “” hay ‘’ để bao chuỗi lại.
3.1.3: Các thẻ cơ bản trong HTML:
+ Thẻ định dạng trang: <body>
+ Thẻ định dạng văn bản: <font>, <p>, <b>, <i>, <u>…
+ Thẻ tạo siêu liên kết (hyperlink): <a>
+ Thẻ định dạng danh sách: <ul>, <ol>, <li>
+ Thẻ chèn hình ảnh: <img>
Ngoài ra, bảng dưới đây là tập hợp một số thẻ trong HTML:
3.2: CSS
3.2.1: Định nghĩa
CSS là chữ viết tắt của cụm từ Cascading Style Sheets, nó được sử dụng
để "định dạng" cho các phần tử trên trang web, hay nói cách khác là nó quyết
định việc các phần tử HTML khi hiển thị lên trang web sẽ trông như thế nào.
3.2.2: Tầm quan trọng của CSS
Ngày nay, khi người dùng đánh giá chất lượng của một trang web, họ
không chỉ xem xét nội dung của các bài viết trên trang web, mà họ còn đặc biệt
quan tâm đến giao diện, xem coi nó có được dễ nhìn, dễ sử dụng hay không, cho
nên "giao diện" của trang web đóng một vài trò rất quan trọng.
Với việc áp dụng CSS trong thiết kế giao diện website, chúng ta có thể
định dạng cho các phần tử trên trang web hiển thị giống với ý muốn của mình,
từ đó tạo ra được những trang web có nội dung đặc sắc, sinh động, phong phú,
đa dạng
3.2.3: Vị trí đặt mã CSS
+ Inline style (css nội tuyến): Đặt các thuộc tính CSS trong thuộc tính @style
của thẻ HTML
+ Embed style (nhúng css): Đặt trong thẻ <style>
+ External (liên kết ngoài): Đặt ở file .css sau đó liên kết vào trang web với thẻ
3.2.4: CSS Selector
Selector cơ bản
+ HTML Selector: chọn các thẻ theo tên (Ví dụ: h1{} Chọn tất cả các thẻ <h1>)
+ Class Selector: chọn các thẻ theo thuộc tính @class (Ví dụ: .abc {} Chọn tất
cả các thẻ <tag class = “abc”>)
+ ID Selector: chọn thẻ theo thuộc tính @id (Ví dụ: #xyz {} Chọn thẻ <tag id =
“xyz”>)
Selector nâng cao
+ Selector phân vùng
+ Nhiều selector
+…
3.2.5: Các thuộc tính định dạng văn bản:
CSS cung cấp nhiều thuộc tính định dạng văn bản. Sau đây là một số
thuộc tính thường được sử dụng
+ Font chữ
+ Kích thước font
+ In đậm, in hoa/thường, in nghiêng, gạch bỏ/gạch dưới/gạch trên
+ Màu văn bản
+ Chiều cao mỗi hàng
+ Khoảng trống giữa các ký tự, các từ
+ Căn lề
+ Làm bóng văn bản
Các thuộc tính Font:
+ font-family: xác định font chữ
+ font-size: xác định kích thước font
+ font-variant: xác định kiểu chữ hoa in nhỏ
+ font-style: xác định kiểu in nghiêng
+ font-weight: xác định in đậm
Các thuộc tính văn bản:
+ text-align: căn lề
+ text-decoration: trang trí văn bản
+ text-shadow: làm bóng văn bản.
Không gian hàng và kí tự:
+ line-height: chiều cao mỗi hàng văn bản.
+ letter-spacing: Khoảng cách giữa các ký tự
+ Word-spacing: khoảng cách giữa các từ
Định dạng liên kết:
+ a {} Chọn tất cả các thẻ a
+ a: link {} Chọn tất cả các liên kết ở trạng thái bình thường (chưa click)
+ a: visited {} Chọn tất cả các liên kết ở trạng thái đã thăm (đã click)
+ a: active {} Chọn tất cả các liên kết ở trạng thái tích cực (đang được chọn)
+ a: hover {} Chọn tất cả các liên kết ở trạng thái có chuột (đang đưa chuột lên)
Quy luật nạp chồng:
Khi có nhiều selector chọn một phần tử thì sẽ xảy ra nạp chồng css.
Việc nạp chồng xảy ra dưới 2 hình thức là cộng hợp và ghi đè
+ Cộng hợp (Các thuộc tính css khác nhau từ nhiều selector sẽ được áp dụng cho
phần tử)
+ Ghi đè (Các thuộc css giống nhau từ nhiều selector sẽ bị ghi đè theo thứ tự ưu
tiên)
Thứ tự ưu tiên tăng dần từ trái sang phải
+ Inline -> Id selector -> Class selector -> HTML Selector -> Mặc định
+ Định nghĩa sau -> định nghĩa trước
+ Sử dụng !important ngay sau mỗi thuộc tính css để thay đổi thứ tự ưu tiên
thành cao nhất
3.3: Javascript
3.3.1: Định nghĩa
JavaScript (viết tắt là JS) là một ngôn ngữ lập trình kịch bản phía máy
khách, mã lệnh được thực thi bởi trình duyệt của người dùng. JavaScript được
sử dụng rộng rãi trong việc kết hợp với HTML/CSS để thiết kế web động.
3.3.2: Tầm quan trọng của Javascript
JavaScript là một ngôn ngữ lập trình phổ biến bậc nhất thế giới và là một
trong ba ngôn ngữ không thể thiếu đối với một lập trình viên we (HTML, CSS,
JavaScript). Nếu một trang web mà không có JavaScript thì trang web đó thật sự
là rất nhàm chán và vô vị. Không những thế Javascript còn được dùng làm ngôn
ngữ chính trong NodeJS.
3.3.3: Vị trí đặt mã Javascript:
Để sử dụng JavaScript trong trang web, chúng ta có hai cách cơ bản như
sau:
+ Bất đồng bộ và phát sinh sự kiện (Non-blocking and Event Driven): Tất các
các APIs của thư viện Node.js đều bất đồng bộ (non-blocking), NodeJS không
cần đợi một API trả về dữ liệu. Server chuyển sang một API khác sau khi gọi nó
và có cơ chế riêng để gửi thông báo và nhận phản hồi về các hoạt động của
Node.js và API đã gọi.
+ Tốc độ nhanh: Phần core phía dưới được viết gần như toàn bộ bằng C++ kết
hợp Chrome V8 Engine nên tốc độ xử lý công việc của Node.js cực nhanh,
nhưng vẫn đảm bảo được tính chuẩn xác.
+ Đơn giản – Hiệu năng cao: Node.js sử dụng một mô hình luồng đơn luồng
(single thread) và các sự kiện lặp (event-loop). Cơ chế sự kiện cho phép phía
Server trả về phản hồi theo non-blocking, đồng thời tăng hiệu quả sử dụng. Các
luồng đơn cung cấp dịch vụ cho nhiều request hơn hẳn Server truyền thống.
+ Không lưu bộ nhớ đệm (non buffer): Nền tảng Node.js không có vùng nhớ
đệm, tức không cung cấp khả năng lưu trữ dữ liệu buffer.
Các kiểu số nguyên tiêu chuẩn của SQL như INTEGER (or INT) và
SMALLINT đều được hỗ trợ bởi MySQL. Và các mở rộng tiêu chuẩn, MySQL
cũng hỗ trợ các kiểu số nguyên khác như TINYINT, MEDIUMINT, và BIGINT.
Bảng dưới đây sẽ liệt kê các kiểu và không gian lưu trữ đòi hỏi và phạm vi của
chúng (Giá trị nhỏ nhất, lớn nhất cho kiểu số nguyên có dấu, và không dấu).
3.6.2.2: Kiểu dấu chấm động
Kiểu dữ liệu FLOAT và DOUBLE mô tả gần đúng các giá trị số thực.
MySQL sử dụng 4 byte để lưu trữ dữ liệu FLOAT và 8 byte dành cho kiểu dữ
liệu DOUBLE.
3.8.2: Mô tả
+ Bước 1: Analysis and Requirements. Đây là bước tiếp nhận yêu cầu của dự án
và bắt đầu phân tích xem dự án yêu cầu thực hiện phần mềm gì…
+ Bước 2: Design. Sau khi đọc và phân tích được rõ yêu cầu của dự án, thì step
2 là công đoạn thiết kết phần mềm. Phần mềm này được thiết kế như thế nào, sử
dụng ngôn ngữ lập trình nào, thuật toán gì, các công cụ gì và thư viện gì để xây
dựng nên sản phẩm.
+ Bước 3: Coding. Thực hiện quá trình coding với những chức năng đã được
vạch ra trong thiết kế. Trong thực tế coder vừa thực hiện code vừa thực hiện test
những chức năng cơ bản mà thiết kế đã đưa ra. Sau khi coding được hoàn thành,
dev phải tự mình review code của mình về giải thuật, style…. Sau đó được
review thêm lần nữa bởi leader, hoặc PM hoặc một coder có kinh nghiệm nhiều
hơn. Cho đến khi mã code đã đạt được sự tối ưu, thì tiến hành đưa sản phẩm lên
sever chuyển sang cho tester.
Hiển thị bài viết Tìm kiếm bài viết Quản lý Liên hệ
Hiển thị bài viết Tìm kiếm bài viết Đăng nhập/Đăng
theo thời gian theo tên xuất
Quản lý tài
khoản admin
4.5: Biểu đồ luồng dữ liệu mức dưới đỉnh hoạt động quản trị
4.6: Biểu đồ luồng dữ liệu mức dưới đỉnh hoạt động độc giả
4.7: Mô hình liên kết thực thể
4.7.1: Chuyển đổi mô hình thực thể liên kết thành các bản
ghi logic
TAIKHOAN (ID, Name, Password, Role)
THELOAI (ID, Name, Description)
BAIVIET (ID, Thumb, Title, Description, Content, Count_views,
Create_at, Source, CategoryId)
module.exports = connection;
+ Tạo các file admin.js, categories.js, news.js : để thao tác các truy vấn tới dữ
liệu như thêm, sửa, xoá, cập nhật.
5.3: Xây dựng Controller:
Tạo ba file trong thư mục Controller: adminController (để xử lí các chức
năng cho admin), authController (xác thực và phân quyền người dùng),
HomeController (xử lí logic các chức năng trang blog). Các chức năng trong
từng file:
+ adminController: Lấy danh sách các danh mục categories (getCategoriesList),
thêm danh mục (addCategories), sửa danh mục (editCategories), xoá danh mục
(deleteCategories), sửa trang Categories (editCategoriesPage). Lấy bài viết
(getNews), thêm, sửa, xoá bài viết (addNews, editNews, deleteNews). Lấy thông
tin trang (getProfilePage)
+ authController:
+ homeController:
5.4: Xây dựng View:
Các file views sử dựng EJS engine để đưa dữ liệu và giao diện cho người
dùng:
+ layout.ejs: file chứa các giao diện dùng chung cho các trang gồm header,
footer
+ login.ejs: giao diện trang đăng nhập
+ home.ejs: giao diện trang chủ
+ searchPage.ejs: giao diện trang tìm kiếm bài viết
+ detailPage.ejs: giao diện trang chi tiết
+ categoryPage.ejs: giao diện trang danh mục
+ contact.ejs: trang liên hệ
+ adminProfileEditPW.ejs: giao diện trang thay đổi mật khẩu
+ adminProfile.ejs: trang quản lí thông tin tài khoản
+ adminNews.ejs: trang quản lí bài viết
+ adminEditNews.ejs: trang chỉnh sửa bài viết
+ adminEditCategory.ejs: trang chỉnh sửa danh mục
+ adminCategory.ejs:
+ adminAddNews.ejs: trang thêm bài viết
+ adminAccEdit.ejs: trang chỉnh sửa thông tin tài khoản
+ adminAccManagement.ejs: