Bối cảnh và vấn đề nghiên cứu

Trong chương trình đào tạo chuyên ngành Công nghệ Thông tin tại Trường Đại học An Giang, học phần Dịch vụ mạng đóng vai trò then chốt trong việc trang bị kiến thức về thiết lập hạ tầng máy chủ, cấu hình dịch vụ mạng và triển khai các ứng dụng thực tế trên nền tảng phân tán. Đồ án "Xây dựng dịch vụ mạng: Xây dựng dự án Struts2 Website bán thức ăn" được thực hiện vào tháng 12 năm 2022 bởi nhóm sinh viên gồm Huỳnh Trung Nhân (MSSV: DTH195162), Thái Thiên Tân (MSSV: DTH195186), Lê Đặng Tony (MSSV: DTH195177), và Trần Thể Nhân (MSSV: DTH195325), dưới sự hướng dẫn chuyên môn của ThS. Huỳnh Cao Thế Cường.

Đề tài được xây dựng nhằm giải quyết bài toán tích hợp giữa việc cấu hình hạ tầng hệ thống mạng máy chủ trên hệ điều hành nguồn mở và lập trình ứng dụng web quản lý bán hàng đa người dùng bằng công nghệ Java Web.

Mục tiêu và nhiệm vụ nghiên cứu cụ thể của đề tài bao gồm:

  1. Thiết lập hoàn chỉnh môi trường máy chủ mạng trên nền tảng ảo hóa, bao gồm cài đặt hệ điều hành Ubuntu Server, cấu hình Web Server (Apache2), Common Gateway Interface (CGI), dịch vụ điều khiển từ xa (OpenSSH), máy chủ ứng dụng Java (Apache Tomcat 9), và hệ quản trị cơ sở dữ liệu (MySQL Server cùng giao diện quản lý phpMyAdmin).
  2. Xây dựng và tích hợp công cụ quản trị dữ liệu từ xa (DBeaver) thông qua cổng kết nối JDBC driver.
  3. Thiết kế cơ sở dữ liệu quan hệ cho website phục vụ nghiệp vụ bán thức ăn, bao gồm quản lý người dùng, thực đơn món ăn và đơn đặt hàng.
  4. Phát triển ứng dụng web bán thức ăn sử dụng framework Apache Struts 2, áp dụng mô hình kiến trúc MVC kết hợp với mẫu thiết kế Data Access Object (DAO) để phân quyền thao tác cho người dùng và quản trị viên.

Đối tượng nghiên cứu của đồ án là quy trình triển khai dịch vụ mạng trên Linux và kỹ thuật lập trình web hướng đối tượng với Struts 2. Phạm vi nghiên cứu giới hạn trong môi trường mạng nội bộ (mạng cục bộ giả lập trên máy ảo VMware Workstation) và xây dựng hệ thống website thương mại điện tử cơ bản cho nghiệp vụ bán đồ ăn.


Cơ sở lý thuyết và công nghệ áp dụng

Đồ án tích hợp hệ thống lý thuyết về quản trị dịch vụ mạng và công nghệ phần mềm ứng dụng web Java doanh nghiệp. Các công nghệ và công cụ được triển khai thực tế bao gồm:

Phân tầng công nghệ Công cụ / Phần mềm Vai trò kỹ thuật
Nền tảng ảo hóa & Hệ điều hành VMware Workstation, Ubuntu Linux Môi trường ảo hóa và hệ điều hành máy chủ hosting toàn bộ dịch vụ mạng
Dịch vụ mạng & Biên dịch Apache2, CGI module, OpenSSH, GCC, build-essential, net-tools Máy chủ HTTP, module thực thi kịch bản CGI, dịch vụ truy cập từ xa an toàn và bộ công cụ mạng
Máy chủ ứng dụng Web Apache Tomcat 9, Tomcat 9 Admin, Default JDK Máy chủ Servlet/JSP chứa môi trường thực thi ứng dụng Java Web
Hệ quản trị CSDL MySQL-Server, phpMyAdmin, DBeaver Lưu trữ dữ liệu, giao diện web quản lý CSDL và ứng dụng client quản lý dữ liệu qua driver mysql-connector-java-8.jar
Môi trường phát triển Eclipse IDE Môi trường lập trình, biên dịch và đóng gói mã nguồn Struts 2
Framework ứng dụng Apache Struts 2 Khung kiến trúc ứng dụng web theo mô hình Model-View-Controller (MVC)

Về phương pháp thực hiện, đồ án áp dụng phương pháp thực nghiệm kỹ thuật và thiết kế hệ thống:

  • Phương pháp cấu hình dòng lệnh (CLI) trên môi trường Unix-like để cài đặt gói, cấp quyền và mở cổng dịch vụ.
  • Phương pháp lập trình hướng đối tượng kết hợp kiến trúc phân lớp: Tách biệt lớp thực thể (Model), lớp truy xuất cơ sở dữ liệu (DAO), lớp điều khiển nghiệp vụ (Action) và dịch vụ kết nối cơ sở dữ liệu trung gian (DBService).

Thiết kế và triển khai hệ thống

Hệ thống phần mềm được tổ chức theo kiến trúc phân tầng rõ ràng nhằm bảo đảm việc đóng gói và tách biệt giữa logic xử lý nghiệp vụ và truy vấn dữ liệu.

1. Thiết kế cơ sở dữ liệu

Cơ sở dữ liệu của hệ thống được xây dựng trên MySQL Server gồm ba bảng chính:

  • Bảng TAIKHOAN (trong mã nguồn truy vấn là NGUOIDUNG): Quản lý tài khoản truy cập hệ thống. Bảng có khóa chính id, các thuộc tính gồm taikhoan (tên đăng nhập), matkhau (lưu trữ dưới dạng mã băm MD5 thông qua hàm getMd5()), và quyen / loaiquyen (xác định quyền hạn User hoặc Admin).
  • Bảng MONAN: Lưu trữ danh mục các món ăn bày bán trên website kèm đơn giá và thông tin mô tả.
  • Bảng DATMON (tương ứng với thực thể Order): Lưu trữ chi tiết đơn hàng gồm mã đơn hàng (id), mã người đặt (idnguoidung), mã món ăn (idmonan), số lượng đặt (soluong), giá bán (gia), tổng thành tiền (thanhtien), và trạng thái xử lý đơn hàng (trangthai).

2. Triển khai các thành phần mã nguồn

Cấu trúc thư mục của dự án Java Web trong Eclipse được tổ chức thành các gói (packages) chức năng:

src/

Lớp mô hình dữ liệu (Model)

Các thực thể đại diện cho các đối tượng dữ liệu trong hệ thống:

  • Model.Order: Đóng gói các thuộc tính đơn hàng với các trường id, idnguoidung, idmonan, soluong, gia, thanhtien, trangthai, cùng hệ thống phương thức getter và setter.
  • Model.User: Đóng gói dữ liệu người dùng với các trường id, tendangnhap, loaiquyen.

Lớp truy xuất dữ liệu (Data Access Object - DAO)

Lớp DAO chịu trách nhiệm thực thi các truy vấn SQL thông qua đối tượng DBService và PreparedStatement:

  • DAO.OrderDAO:
    • Phương thức getList(): Thực thi câu lệnh SELECT * from DATMON để lấy toàn bộ danh sách đơn đặt món.
    • Phương thức getOrderByID(int id): Lấy thông tin chi tiết của một đơn hàng cụ thể theo mã định danh.
    • Phương thức accept(int id) và deny(int id): Cập nhật trạng thái duyệt hoặc từ chối đơn hàng của khách hàng.
  • DAO.UserDAO:
    • Phương thức login(String tendangnhap, String matkhau): Đối chiếu thông tin xác thực đăng nhập sử dụng mật khẩu được mã hóa băm getMd5(matkhau).
    • Phương thức getList(): Truy vấn SELECT * from NGUOIDUNG trả về danh sách tất cả tài khoản.
    • Phương thức getUserByID(int id): Trích xuất thông tin một người dùng.
    • Phương thức insert(), update(), delete(): Thực hiện thêm mới, cập nhật phân quyền (loaiquyen), và xóa tài khoản.

Lớp điều khiển xử lý (Action)

Các lớp Action trong Struts 2 kế thừa từ com.opensymphony.xwork2.ActionSupport và triển khai giao diện org.apache.struts2.interceptor.SessionAware để quản lý trạng thái phiên làm việc:

  • Action.OrderAction: Điều phối dữ liệu đơn hàng giữa giao diện và DAO, quản lý danh sách orderlist, đối tượng order, user, food, và trả về chuỗi điều hướng SUCCESS.
  • Action.UserAction: Tiếp nhận dữ liệu người dùng từ form biểu mẫu, gọi UserDAO.update(id, loaiquyen) để thay đổi phân quyền người dùng, thiết lập thông báo message = "Cập nhật thành công!" và trả về kết quả điều hướng "list".

Nội dung chính theo từng phần

Báo cáo đồ án được cấu trúc thành hai phần nội dung chính, phản ánh đầy đủ hai mảng nghiệp vụ: xây dựng hạ tầng mạng máy chủ và phát triển phần mềm ứng dụng.

Phần 1: Xây dựng Server

Phần này trình bày chi tiết từng bước thiết lập môi trường máy chủ hoàn chỉnh từ hệ điều hành trắng đến các dịch vụ chuyên dụng:

[Máy ảo VMware Workstation / Ubuntu]
  1. Cài đặt hệ điều hành Ubuntu: Thiết lập máy ảo trên phần mềm VMware Workstation, phân bổ tài nguyên và cài đặt Ubuntu với mật khẩu hệ thống 123.
  2. Cài đặt và cấu hình Webserver, CGI và SSH:
    • Cập nhật kho ứng dụng hệ thống bằng sudo apt update và sudo apt upgrade.
    • Cài đặt máy chủ web Apache: sudo apt-get install apache2.
    • Kích hoạt module xử lý kịch bản CGI và khởi động lại dịch vụ: sudo a2enmod cgi và systemctl restart apache2.
    • Cài đặt và bật dịch vụ OpenSSH (openssh-server) để hỗ trợ quản trị từ xa qua dòng lệnh (systemctl enable ssh, systemctl start ssh).
    • Cài đặt bộ công cụ phát triển build-essential và gói tiện ích net-tools để quản lý giao tiếp mạng và kiểm tra địa chỉ IP cục bộ (được cấp phát trong dải mạng nội bộ).
  3. Cài đặt IDE phát triển: Cài đặt môi trường Eclipse trên máy chủ để phục vụ việc lập trình mã nguồn Java.
  4. Cài đặt và cấu hình Apache Tomcat:
    • Cài đặt máy ảo Java thông qua gói default-jdk.
    • Cài đặt tomcat9 và gói giao diện quản trị tomcat9-admin.
    • Kích hoạt và bật dịch vụ Tomcat hoạt động tại cổng mặc định 8080 (truy cập kiểm tra qua địa chỉ web máy chủ).
    • Thiết lập tài khoản quản trị Tomcat Manager bằng cách chỉnh sửa tập tin /etc/tomcat9/tomcat-users.xml, cấu hình tài khoản Username: tomcat và Password: tomcat để truy cập trang quản lý ứng dụng http://[IP]:8080/manager/html.
  5. Cài đặt và cấu hình hệ quản trị cơ sở dữ liệu MySQL:
    • Cài đặt gói mysql-server và phần mềm quản trị nền web phpmyadmin (tích hợp trên web server Apache2).
    • Cấu hình cho phép kết nối cơ sở dữ liệu từ xa: Chỉnh sửa tập tin cấu hình /etc/mysql/mysql.cnf, chú thích (vô hiệu hóa bằng ký tự #) trước chỉ thị bind-address, sau đó khởi động lại tiến trình MySQL (sudo systemctl restart mysql).
    • Khởi tạo người dùng cơ sở dữ liệu chuyên biệt cho kết nối từ xa:
      CREATE USER 'dbuser'@'localhost' IDENTIFIED BY 'p@ssword';
      CREATE USER 'dbuser'@'%' IDENTIFIED BY 'p@ssword';
      GRANT ALL ON *.* TO 'dbuser'@'localhost';
      GRANT ALL ON *.* TO 'dbuser'@'%';
      
    • Cấu hình công cụ DBeaver: Thêm thư viện điều khiển mysql-connector-java-8.jar, cấu hình tham số bảo mật kết nối useSSL=false và allowPublicKeyRetrieval=true để kết nối và khởi tạo các bảng dữ liệu TAIKHOAN, MONAN, DATMON.

Phần 2: Xây dựng dự án Struts2

Phần này tập trung vào thiết kế tính năng và mã nguồn của ứng dụng web bán thức ăn:

  • Phân hệ Người dùng (Khách hàng): Cung cấp tính năng đăng nhập hệ thống và thực hiện đặt các sản phẩm món ăn từ thực đơn.
  • Phân hệ Quản trị viên (Admin):
    • Quản lý sản phẩm: Thực hiện các tác vụ thêm mới món ăn, xóa món ăn, chỉnh sửa thông tin sản phẩm.
    • Quản lý người dùng: Xem danh sách người dùng, cấp và thay đổi quyền hạn (loaiquyen) cho từng tài khoản, xóa tài khoản.
    • Quản lý đơn hàng: Theo dõi danh sách toàn bộ đơn hàng phát sinh, xem chi tiết từng đơn đặt món và thực hiện tác vụ duyệt chấp thuận (accept) hoặc từ chối đơn (deny).

Kết quả và hạn chế của hệ thống

Kết quả đạt được

Đồ án đã triển khai thành công một mô hình hoàn chỉnh kết hợp giữa dịch vụ mạng máy chủ và ứng dụng web doanh nghiệp:

  • Xây dựng thành công ngăn xếp công nghệ dịch vụ mạng trên nền tảng Ubuntu Linux với đầy đủ các thành phần: Apache2, CGI, SSH, Tomcat 9 và MySQL Server.
  • Cấu hình phân quyền truy cập CSDL từ xa qua mạng an toàn với người dùng dbuser.
  • Xây dựng hoàn chỉnh khung ứng dụng Struts 2 liên kết cơ sở dữ liệu qua giao thức JDBC Driver, vận hành được các chức năng đăng nhập, phân quyền, đặt hàng và quản lý sản phẩm.

Hạn chế của hệ thống

Nhóm tác giả đã chỉ ra các hạn chế kỹ thuật còn tồn đọng trong quá trình xây dựng hệ thống:

  • Cơ chế quản lý phiên làm việc (Session): Chưa tích hợp chức năng đăng xuất (logout) tường minh cho tài khoản. Khi đã đăng nhập, người dùng không thể đăng xuất chủ động mà phải chờ phiên làm việc tự hủy (session timeout) hoặc phải khởi động lại máy chủ (restart server) để đổi sang tài khoản khác.
  • Tính ổn định của phiên: Hệ thống gặp hiện tượng tự động ngắt phiên đăng nhập (tự logout) đột ngột sau một khoảng thời gian ngắn vận hành.
  • Giao diện người dùng: Giao diện các trang web còn đơn giản, chưa được trau chuốt về mặt thẩm mỹ.
  • Nghiệp vụ quản lý đơn hàng: Các chức năng xử lý và theo dõi trạng thái đơn hàng còn ở mức độ sơ sài, chưa đáp ứng các quy trình nghiệp vụ phức tạp.

Giá trị tham khảo

Đồ án có giá trị ứng dụng và tham khảo thực tiễn rõ rệt đối với sinh viên và người học ngành Công nghệ Thông tin, Kỹ thuật Mạng và Công nghệ Phần mềm:

  • Tài liệu hướng dẫn cấu hình hạ tầng mạng Linux: Các bước cấu hình từ Apache2, Tomcat 9, MySQL, phpMyAdmin đến phân quyền kết nối từ xa là tài liệu tham khảo chi tiết, có thể áp dụng trực tiếp cho các bài thực hành học phần Dịch vụ mạng, Quản trị hệ thống hoặc Điện toán đám mây.
  • Mẫu dự án ứng dụng MVC với Struts 2: Cung cấp cấu trúc mã nguồn tiêu chuẩn theo mô hình MVC kết hợp DAO, giúp người học hiểu rõ cách kết nối và ánh xạ dữ liệu từ CSDL quan hệ lên giao diện web Java.

Câu hỏi thường gặp

1. Hệ điều hành máy chủ và các dịch vụ mạng nền tảng nào được cài đặt trong đồ án?
Hệ điều hành được sử dụng là Ubuntu Linux (chạy trên máy ảo VMware Workstation). Các dịch vụ mạng được cài đặt gồm Apache2 (kèm module CGI), OpenSSH server, build-essential, net-tools, Apache Tomcat 9 và MySQL Server.

2. Làm thế nào để nhóm tác giả cho phép kết nối MySQL từ xa và quản trị qua DBeaver?
Nhóm tác giả đã chỉnh sửa tập tin /etc/mysql/mysql.cnf, chú thích (đặt dấu #) trước dòng bind-address để mở cổng kết nối từ mọi IP, tạo tài khoản người dùng 'dbuser'@'%' với đầy đủ quyền hạn, và bổ sung thư viện mysql-connector-java-8.jar vào DBeaver kèm hai tham số kết nối useSSL=false và allowPublicKeyRetrieval=true.

3. Cơ sở dữ liệu của ứng dụng gồm những bảng nào và khóa chính được thiết lập ra sao?
Cơ sở dữ liệu gồm 3 bảng chính: TAIKHOAN (hoặc NGUOIDUNG), MONAN, và DATMON. Cột id được thiết lập làm khóa chính (Primary Key) cho các bảng để định danh duy nhất từng bản ghi.

4. Ứng dụng Struts 2 được phân chia những vai trò người dùng nào và gồm các chức năng gì?
Ứng dụng phân chia thành hai vai trò:

  • Người dùng (User): Đăng nhập và đặt món ăn.
  • Quản trị viên (Admin): Thêm/xóa/sửa món ăn, thêm/xóa/sửa quyền người dùng, xem danh sách và chi tiết đơn hàng (duyệt hoặc từ chối).

5. Điểm hạn chế chính của hệ thống trong việc xử lý đăng nhập và phiên làm việc là gì?
Hệ thống chưa có nút đăng xuất tài khoản hoàn chỉnh, bắt buộc người dùng phải đợi hết thời gian session hoặc restart server để chuyển tài khoản. Đồng thời, hệ thống còn xuất hiện lỗi tự động logout khi đang đăng nhập sử dụng.


Kết luận

Đồ án "Xây dựng dịch vụ mạng: Xây dựng dự án Struts2 Website bán thức ăn" của nhóm sinh viên Trường Đại học An Giang đã hoàn thành mục tiêu tích hợp giữa quản trị hạ tầng mạng Linux và lập trình ứng dụng Java Web. Toàn bộ chuỗi dịch vụ mạng từ máy chủ HTTP, máy chủ ứng dụng Servlet đến cơ sở dữ liệu quan hệ đều được thiết lập và kiểm thử trên môi trường mạng nội bộ. Mặc dù hệ thống còn một số hạn chế về quản lý phiên làm việc và giao diện, đồ án đã thể hiện rõ phương pháp thiết kế phân lớp MVC với Struts 2 và là tài liệu tham khảo có giá trị trong thực hành dịch vụ mạng và công nghệ phần mềm.