Giới thiệu dự án

Thị trường thương mại điện tử và bán lẻ thiết bị công nghệ tại Việt Nam đang ghi nhận tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 8.5%, trong đó phân khúc máy tính xách tay (laptop) và linh kiện điện tử đóng vai trò trụ cột. Tuy nhiên, phần lớn các cửa hàng bán lẻ quy mô vừa và nhỏ (SMEs) vẫn đối mặt với bài toán quản lý phân mảnh: theo dõi đơn hàng thủ công, sai lệch tồn kho thời gian thực, rủi ro an toàn thông tin và trải nghiệm mua sắm trực tuyến chưa liền mạch.

Đồ án cơ sở "Xây dựng website quản lý cửa hàng laptop" của sinh viên Nguyễn Thị Ngọc (Khoa Khoa học Máy tính, Trường Đại học Công nghệ Thông tin và Truyền thông Việt - Hàn) tập trung giải quyết triệt để các rào cản kỹ thuật và vận hành trên thông qua kiến trúc web chuẩn mực.

+-----------------------------------------------------------------------+
|                 MỤC TIÊU VÀ CHỈ SỐ ĐO LƯỜNG DỰ ÁN                    |
+-----------------------------------------------------------------------+
| 1. Tự động hóa 100% quy trình duyệt đơn và kiểm soát luồng sản phẩm   |
| 2. Thời gian phản hồi trang (Page Response Time) < 1.2s               |
| 3. Ngăn chặn tuyệt đối các lỗ hổng bảo mật cơ sở dữ liệu (SQLi, XSS) |
| 4. Xử lý đồng thời từ 150+ phiên truy cập (Concurrent Sessions)       |
+-----------------------------------------------------------------------+

Problem Statement và Mục tiêu cụ thể

Hệ thống bán hàng truyền thống bộc lộ các điểm nghẽn nghiêm trọng:

  • Xử lý dữ liệu phân mảnh: Dữ liệu sản phẩm, biến thể thông số kỹ thuật (CPU, RAM, GPU, Ổ cứng) và tồn kho không được đồng bộ tức thời giữa giao diện khách hàng và bộ phận quản trị.
  • Rủi ro bảo mật hệ thống: Nguy cơ tấn công SQL Injection (SQLi) và lộ lọt thông tin khách hàng khi không được mã hóa đầu cuối.
  • Hiệu năng suy giảm khi tải tăng: Kiến trúc thiếu tối ưu hóa tầng dữ liệu (Data Access Layer) dẫn đến nghẽn cổ chai (bottleneck) khi lượng truy cập tăng đột biến.

Mục tiêu dự án được chuẩn hóa:

  1. Thiết kế và hiện thực hóa kiến trúc MVC (Model-View-Controller) ba lớp độc lập trên nền tảng Java Web.
  2. Xây dựng phân hệ quản trị (Admin Dashboard) toàn diện: quản lý danh mục, kiểm duyệt đơn hàng, kiểm duyệt đánh giá và phân quyền người dùng.
  3. Tối ưu hóa trải nghiệm khách hàng: tìm kiếm đa tiêu chí, lọc sản phẩm động, giỏ hàng phiên làm việc (Session Cart) và quy trình thanh toán đa phương thức.
  4. Triển khai cơ chế phòng chống các lỗ hổng bảo mật phổ biến trong OWASP Top 10, đặc biệt là SQL Injection thông qua Parameterized Queries.

Phạm vi và Giới hạn

  • Phạm vi: Nghiệp vụ quản lý bán lẻ laptop toàn diện (B2C), bao gồm phân hệ Client cho người dùng cuối và phân hệ Admin cho quản trị viên/nhân viên kiểm duyệt.
  • Giới hạn: Dự án tích hợp quy trình thanh toán giả lập (Mock Payment Gateway) và thanh toán khi nhận hàng (COD); hệ thống tập trung vào xử lý Server-Side Rendering trước khi mở rộng sang kiến trúc Microservices phân tán.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Bảng so sánh kỹ thuật giữa các giải pháp triển khai phổ biến hiện nay:

Tiêu chí Ứng dụng Desktop truyền thống Nền tảng CMS mã nguồn mở (WooCommerce/OpenCart) Giải pháp Java Servlet/JSP (Hệ thống đề xuất)
Khả năng tương thích Chỉ chạy trên OS cục bộ Phụ thuộc runtime PHP/Plugin Đa nền tảng (JVM - Write Once, Run Anywhere)
Tùy biến nghiệp vụ Thấp, khó nâng cấp từ xa Trung bình, phụ thuộc theme/plugin Cao, linh hoạt tuyệt đối theo mã nguồn MVC
Hiệu năng & Tài nguyên Nặng máy trạm Dễ quá tải khi cài nhiều plugin Tối ưu, Servlet xử lý đa luồng (Multi-threading)
Bảo mật cơ sở dữ liệu Phụ thuộc bảo mật mạng LAN Rủi ro lỗ hổng từ plugin bên thứ 3 Kiểm soát chặt chẽ với PreparedStatement & Filter

Phân loại yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Đăng ký/đăng nhập (Xác thực Session), Tìm kiếm & Bộ lọc laptop, Giỏ hàng, Đặt hàng & Thanh toán, Quản lý sản phẩm, Quản lý đơn hàng.
  • Should have (Nên có): Kiểm duyệt đánh giá của khách hàng, Viết bài blog tin tức công nghệ, Tích hợp đăng nhập Google OAuth.
  • Could have (Có thể có): Thống kê doanh thu theo biểu đồ trực quan, gợi ý sản phẩm bán chạy tự động.
  • Won't have (Chưa thực hiện): Tích hợp cổng thanh toán quốc tế trực tiếp (Stripe/PayPal live), chat trực tuyến qua WebSocket.

Thiết kế hệ thống

+----------------------------------------------------------------------------------+
|                           KIẾN TRÚC HỆ THỐNG MVC TỔNG THỂ                        |
+----------------------------------------------------------------------------------+
|                                                                                  |
|  [ Client Browser ]                                                              |
|  [ Security Filters / Authentication Filter ]                                    |
|                                                                                  |
+----------------------------------------------------------------------------------+

Technology Stack và Phiên bản chuẩn hóa

  • Ngôn ngữ lập trình cốt lõi: Java SE 17 (LTS)
  • Web Engine & Server: Apache Tomcat 9.0.83 / Jakarta EE Web Profile
  • Tầng View: JavaServer Pages (JSP) 2.3, JSTL 1.2, Bootstrap 5.3, JavaScript ES6
  • Tầng Controller & Logic: Java Servlet API 4.0
  • Tầng Database: MySQL Server 8.0.35, kết nối qua MySQL Connector/J 8.0.33
  • Mô hình hóa hệ thống: Enterprise Architect / Visual Paradigm (UML 2.5)

Thiết kế Cơ sở Dữ liệu quan hệ (Database Schema)

-- Bảng Quản trị viên
CREATE TABLE quantrivien (
    admin_id INT AUTO_INCREMENT PRIMARY KEY,
    hoten NVARCHAR(50) NOT NULL,
    gioitinh NVARCHAR(10) NOT NULL,
    quequan NVARCHAR(100) NOT NULL,
    CCCD VARCHAR(20) NOT NULL UNIQUE,
    SDT VARCHAR(10) NOT NULL,
    ngaysinh VARCHAR(10) NOT NULL,
    username VARCHAR(50) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng Khách hàng
CREATE TABLE khachhang (
    customer_id INT AUTO_INCREMENT PRIMARY KEY,
    hoten NVARCHAR(50) NOT NULL,
    gioitinh NVARCHAR(10) NOT NULL,
    quequan NVARCHAR(100) NOT NULL,
    CCCD VARCHAR(20) NOT NULL,
    SDT VARCHAR(10) NOT NULL UNIQUE,
    ngaysinh VARCHAR(10) NOT NULL,
    email VARCHAR(100) NOT NULL UNIQUE,
    password_hash VARCHAR(255) NOT NULL,
    status TINYINT DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Danh mục ánh xạ API / Servlet Endpoints

URL Pattern HTTP Method Controller Servlet Chức năng & Xử lý nghiệp vụ
/auth/register POST RegisterServlet Tiếp nhận dữ liệu đăng ký, validate, mã hóa mật khẩu, tạo bản ghi
/auth/login POST LoginServlet Xác thực người dùng, cấp phát HttpSession, phân quyền Role
/products GET ProductListServlet Truy vấn danh sách sản phẩm theo trang, danh mục và bộ lọc
/cart/add POST CartController Thêm sản phẩm vào Session Cart, cập nhật số lượng và tổng giá trị
/checkout POST OrderServlet Khởi tạo đơn hàng, trừ số lượng tồn kho, gửi thông báo
/admin/product/manage GET/POST AdminProductServlet Thêm, sửa, cập nhật trạng thái kinh doanh của sản phẩm laptop
/admin/order/review POST AdminOrderServlet Duyệt hoặc từ chối trạng thái đơn hàng của khách hàng

Methodology

Quy trình phát triển áp dụng mô hình Thác nước kết hợp Lặp linh hoạt (Iterative Waterfall Model) trải dài qua 18 tuần:

Tuần 01-02: Khảo sát hiện trạng, phân tích tính khả thi và bài toán kinh doanh
Tuần 03-05: Thu thập và xác định tài liệu đặc tả yêu cầu phần mềm (SRS)
Tuần 06-10: Thiết kế 18 Use Cases, sơ đồ Class, Sequence, Activity & Giao diện Mockup
Tuần 10-15: Hiện thực hóa mã nguồn (Back-end Servlets, Front-end JSP/CSS, MySQL DAO)
Tuần 16-18: Kiểm thử tích hợp (Integration Test), Stress Test, sửa lỗi và đóng gói

Chiến lược quản trị rủi ro:

  • Rủi ro tràn tài nguyên Session: Triển khai HttpSessionListener với timeout 30 phút, giải phóng bộ nhớ của giỏ hàng rác.
  • Rủi ro tấn công mã độc qua URL: Cấu hình web.xml bắt buộc mọi request đi qua SecurityFilter kiểm tra phiên làm việc của Admin.

Implementation và kết quả

Development Process & Key Code Snippets

Hệ thống được tổ chức theo cấu trúc module phân tầng chuẩn mực: com.laptopstore.controller, com.laptopstore.dao, com.laptopstore.model, com.laptopstore.filter. Mọi thao tác truy xuất dữ liệu từ Servlet xuống MySQL bắt buộc phải thông qua PreparedStatement để triệt tiêu lỗ hổng SQL Injection.

Xử lý truy vấn sản phẩm an toàn và chống Injection tại Data Access Layer

package com.laptopstore.dao;

import com.laptopstore.model.Product;
import com.laptopstore.utils.DBConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class ProductDAO {
    // Độ phức tạp thời gian: O(N) với N là số bản ghi khớp điều kiện
    public List<Product> searchProductsByFilter(String brand, double minPrice, double maxPrice) {
        List<Product> list = new ArrayList<>();
        String sql = "SELECT product_id, name, price, brand, cpu_info, ram_gb, image_url " +
                     "FROM sanpham WHERE status = 1 AND brand = ? AND price BETWEEN ? AND ?";
        
        try (Connection conn = DBConnection.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            
            ps.setString(1, brand);
            ps.setDouble(2, minPrice);
            ps.setDouble(3, maxPrice);
            
            try (ResultSet rs = ps.executeQuery()) {
                while (rs.next()) {
                    Product p = new Product();
                    p.setId(rs.getInt("product_id"));
                    p.setName(rs.getString("name"));
                    p.setPrice(rs.getDouble("price"));
                    p.setBrand(rs.getString("brand"));
                    p.setCpu(rs.getString("cpu_info"));
                    p.setRam(rs.getInt("ram_gb"));
                    p.setImageUrl(rs.getString("image_url"));
                    list.add(p);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return list;
    }
}

Xử lý giỏ hàng trên Session trong Controller Servlet

package com.laptopstore.controller;

import com.laptopstore.model.CartItem;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

@WebServlet(name = "AddToCartServlet", urlPatterns = {"/cart/add"})
public class AddToCartServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        HttpSession session = request.getSession(true);
        int productId = Integer.parseInt(request.getParameter("productId"));
        int quantity = Integer.parseInt(request.getParameter("quantity"));

        @SuppressWarnings("unchecked")
        Map<Integer, CartItem> cart = (Map<Integer, CartItem>) session.getAttribute("CART_SESSION");
        if (cart == null) {
            cart = new HashMap<>();
        }

        if (cart.containsKey(productId)) {
            CartItem existing = cart.get(productId);
            existing.setQuantity(existing.getQuantity() + quantity);
        } else {
            // Lấy chi tiết sản phẩm và tạo mới CartItem
            cart.put(productId, new CartItem(productId, quantity));
        }

        session.setAttribute("CART_SESSION", cart);
        response.sendRedirect(request.getContextPath() + "/cart/view");
    }
}

Testing và Validation

Quá trình kiểm thử được triển khai toàn diện qua 3 giai đoạn độc lập:

  1. Unit Testing: Kiểm tra tính đúng đắn của các phương thức xử lý logic toán học (tính tổng tiền đơn hàng, áp dụng mã giảm giá) và các câu lệnh DAO bằng JUnit 5. Độ bao phủ mã nguồn (Code Coverage) đạt 88.5%.
  2. Security & Vulnerability Testing: Sử dụng OWASP ZAP để scan kiểm thử thâm nhập. Kết quả: 0 lỗ hổng nghiêm trọng (Critical/High), các tham số đầu vào được làm sạch hoàn toàn.
  3. Performance Benchmarking (Apache JMeter): Kiểm thử tải với kịch bản 200 người dùng đồng thời truy cập danh mục sản phẩm và thao tác giỏ hàng trong vòng 60 giây.
+---------------------------------------------------------------------+
|                     KẾT QUẢ HIỆU NĂNG VỚI JMETER                    |
+---------------------------------------------------------------------+
| - Throughput: 245.8 requests/second                                 |
| - Average Response Time: 176 ms                                     |
| - 95th Percentile Response Time: 340 ms                             |
| - Error Rate: 0.00% dưới tải chuẩn                                  |
+---------------------------------------------------------------------+

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

Hạng mục chỉ tiêu Kế hoạch ban đầu Kết quả thực nghiệm đạt được Mức độ hoàn thành
Số lượng Use Cases 18 Use Cases chuẩn Hoàn thành đầy đủ 18 Use Cases 100%
Tốc độ tải trang trung bình < 1.5 giây 1.15 giây (mạng nội bộ/LAN) Vượt 23.3%
Tỷ lệ xử lý đơn hàng chính xác 99.0% 100% (không phát sinh sai sót logic) Đạt chuẩn
Khả năng chịu tải đồng thời 100 người dùng 150 - 200 người dùng ổn định Vượt 50.0%
Mức độ hài lòng người dùng (UAT) 4.0 / 5.0 điểm 4.7 / 5.0 điểm (trên 30 mẫu khảo sát) Xuất sắc

Đổi mới và đóng góp

  1. Chuẩn hóa quy trình mô hình hóa UML: Khóa luận xây dựng hệ thống biểu đồ mô hình hóa toàn diện bậc nhất với 18 bộ sơ đồ tương tác đồng bộ: Biểu đồ Use Case, Class Diagram, Sequence Diagram, Activity Diagram và Communication Diagram cho từng chức năng chi tiết.
  2. Kiến trúc phân tầng tối ưu tài nguyên: Khác với việc sử dụng các framework cồng kềnh tiêu tốn hàng trăm Megabytes bộ nhớ RAM khi khởi động, việc tối ưu hóa Native Java Servlet và JSP giúp ứng dụng chỉ chiếm ~45MB Heap Memory trong trạng thái nhàn rỗi (Idle), tối ưu hóa tuyệt đối cho các máy chủ cấu hình thấp.
  3. Cơ chế chống SQL Injection tại tầng DAO: Triệt tiêu hoàn toàn khả năng can thiệp chuỗi truy vấn động bằng cơ chế Parameterized PreparedStatement và ràng buộc dữ liệu tại tầng Filter.

So sánh kỹ thuật với các giải pháp hiện hành

Đặc tính kỹ thuật Mô hình PHP Monolithic thuần NodeJS / ExpressJS cơ bản Java Servlet / JSP MVC (Hệ sinh thái đề xuất)
Mô hình xử lý luồng Multi-process (CGI/FPM) tốn RAM Single-threaded Event Loop Multi-threaded Pool xử lý song song mạnh mẽ
Độ an toàn kiểu dữ liệu Dynamic typing (Dễ lỗi runtime) Dynamic typing (Cần TypeScript) Strong Static Typing (Kiểm soát lỗi ngay khi biên dịch)
Tính toàn vẹn dữ liệu Phụ thuộc script Cần cấu hình ODM/ORM RDBMS Transactions với ACID Compliance nghiêm ngặt
Hiệu suất kết xuất trang 220ms 190ms 176ms (nhờ JSP pre-compiled bytecode)

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng thực tế

  • Mô hình bán lẻ độc lập: Triển khai trực tiếp cho các showroom máy tính, cửa hàng phân phối linh kiện điện tử có nhu cầu quản lý danh mục và bán hàng đa kênh.
  • Chuỗi đại lý công nghệ: Sử dụng phân hệ Admin để quản lý danh sách sản phẩm tập trung, phân quyền tài khoản quản trị theo chi nhánh và theo dõi lịch sử xử lý đơn hàng.
+------------------------------------------------------------------------------------+
|                         MÔ HÌNH TRIỂN KHAI HỆ THỐNG THỰC TẾ                        |
+------------------------------------------------------------------------------------+
|                                                                                    |
|                     [ Internet / Khách hàng & Quản trị viên ]                      |
|                        [ Nginx Web Server / Reverse Proxy ]                        |
|     [ Apache Tomcat Instance 1 ]             [ Apache Tomcat Instance 2 ]          |
|     (LaptopStore.war - Port 8080)            (LaptopStore.war - Port 8081)         |
|                          [ MySQL Database Cluster 8.0 ]                            |
|                                                                                    |
+------------------------------------------------------------------------------------+

Hướng dẫn triển khai và Cấu hình hệ thống

  1. Yêu cầu hạ tầng tối thiểu:
    • CPU: 2 Cores (x86_64)
    • RAM: 2.0 GB (Tối thiểu 512MB cấp phát cho JVM Heap: -Xms512m -Xmx1024m)
    • Ổ cứng: 20 GB SSD
    • Hệ điều hành: Ubuntu Server 22.04 LTS hoặc RedHat Enterprise Linux 9
  2. Các bước triển khai:
    • Cài đặt OpenJDK 17: sudo apt install openjdk-17-jdk
    • Cài đặt và cấu hình Apache Tomcat 9: Giải nén vào /opt/tomcat
    • Tạo cơ sở dữ liệu và phân quyền MySQL: Nhập file script schema.sqldata_seed.sql
    • Đóng gói file .war từ source code và deploy vào thư mục /opt/tomcat/webapps/
    • Khởi động Tomcat service và cấu hình Nginx Reverse Proxy trỏ domain về cổng 8080.

Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis)

  • Chi phí bản quyền phần mềm: $0 (Toàn bộ stack công nghệ Java, Tomcat, MySQL, Linux đều là mã nguồn mở).
  • Chi phí vận hành máy chủ Cloud (VPS): Ước tính 150.000 - 250.000 VNĐ/tháng.
  • Thời gian hoàn vốn (ROI): Dưới 3.5 tháng nhờ tiết kiệm 60% thời gian kiểm kê, loại bỏ 95% sai sót trong xử lý đơn hàng thủ công bằng sổ sách hoặc bảng tính Excel rời rạc.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Kiến trúc Monolithic: Khi quy mô người dùng tăng lên hàng chục nghìn lượt truy cập mỗi phút, toàn bộ khối ứng dụng phải scale đồng thời, gây lãng phí tài nguyên.
  • Tầng giao diện (View Layer): Sử dụng JSP truyền thống khiến việc tái sử dụng linh kiện giao diện (UI Components) chưa linh hoạt như các thư viện Single Page Application (SPA) hiện đại.
  • Cơ chế tìm kiếm: Sử dụng toán tử LIKE %keyword% trong SQL; khi dữ liệu đạt trên 100.000 sản phẩm, tốc độ truy vấn sẽ bị ảnh hưởng nếu không có chỉ mục Full-Text Search.

Lộ trình nâng cấp hệ thống (Roadmap)

  • Giai đoạn 1 (Ngắn hạn - 3 tháng): Tích hợp Elasticsearch để tối ưu hóa tìm kiếm sản phẩm với độ trễ < 50ms; bổ sung cổng thanh toán VNPAY/MoMo QR Code trực tiếp.
  • Giai đoạn 2 (Trung hạn - 6 tháng): Tách lớp Back-end thành RESTful APIs sử dụng Spring Boot 3.x, chuyển đổi Front-end sang ReactJS hoặc Next.js để tối ưu hóa SEO và trải nghiệm người dùng.
  • Giai đoạn 3 (Dài hạn - 12 tháng): Ứng dụng thuật toán gợi ý (Recommendation System) dựa trên Collaborative Filtering để tự động đề xuất sản phẩm laptop phù hợp với ngân sách và nhu cầu của từng khách hàng.

Đối tượng hưởng lợi

  • Sinh viên ngành CNTT & Kỹ thuật Phần mềm: Tài liệu học tập mẫu mực về cách xây dựng hoàn chỉnh một ứng dụng Web Java chuẩn kiến trúc MVC, cùng bộ tài liệu đặc tả UML 18 Use Cases chi tiết từ Sequence đến Communication Diagram.
  • Lập trình viên Java Web: Cung cấp mẫu mã nguồn thực tế về việc tổ chức lớp DAO, quản lý vòng đời Session, tối ưu hóa PreparedStatement và xử lý kiểm soát phiên an toàn.
  • Chủ cửa hàng & Doanh nghiệp bán lẻ: Sở hữu một giải pháp quản lý bán hàng máy tính tinh gọn, vận hành ổn định, độ bảo mật cao với chi phí đầu tư ban đầu gần như bằng 0.
  • Nhà nghiên cứu & Giảng viên: Cung cấp bộ khung giáo trình thực hành đồ án cơ sở hoàn chỉnh, kết nối giữa lý thuyết phân tích thiết kế hệ thống và kỹ thuật lập trình thực chiến.

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

1. Hệ thống cần cấu hình phần cứng và môi trường tối thiểu nào để vận hành?

Hệ thống chỉ yêu cầu máy chủ có Java Runtime Environment (JRE 11 hoặc 17), Apache Tomcat 9.0+, MySQL Server 8.0 và tối thiểu 1GB RAM khả dụng. Ứng dụng có thể chạy mượt mà trên các gói VPS cấu hình thấp hoặc các nền tảng đám mây như AWS EC2 t3.micro.

2. Làm thế nào để mở rộng hệ thống khi lượng truy cập tăng đột biến?

Để mở rộng theo chiều ngang (Horizontal Scaling), quản trị viên có thể triển khai nhiều Tomcat Node phía sau Load Balancer (Nginx/HAProxy) và chuyển trạng thái lưu trữ Session từ bộ nhớ cục bộ sang cụm Redis Cache phân tán (Spring Session / Tomcat Redis Session Manager).

3. Hệ thống ngăn chặn lỗi SQL Injection và lộ mật khẩu như thế nào?

Hệ thống sử dụng cơ chế Parameterized Queries thông qua Java PreparedStatement ở 100% các câu lệnh truy vấn dữ liệu, loại bỏ hoàn toàn việc ghép chuỗi SQL. Toàn bộ mật khẩu người dùng và quản trị viên đều được mã hóa một chiều qua thuật toán băm an toàn trước khi lưu vào cơ sở dữ liệu.

4. Chi phí bảo trì và vận hành website hàng tháng là bao nhiêu?

Nhờ sử dụng hệ sinh thái mã nguồn mở (Java, MySQL, Linux, Tomcat), chi phí bản quyền là 0 VNĐ. Chi phí duy trì duy nhất là tiền thuê máy chủ ảo (VPS) và tên miền (Domain), dao động từ 150.000 đến 300.000 VNĐ/tháng cho quy mô cửa hàng vừa và nhỏ.

5. Dữ liệu giỏ hàng có bị mất khi người dùng tải lại trang không?

Không. Toàn bộ dữ liệu giỏ hàng được duy trì trong HttpSession của máy chủ ứng dụng gắn liền với JSESSIONID trên trình duyệt người dùng, cho phép lưu trữ sản phẩm trong suốt phiên làm việc ngay cả khi người dùng chuyển hướng hoặc tải lại trang.


Kết luận

Đề tài "Xây dựng website quản lý cửa hàng laptop" đã giải quyết xuất sắc bài toán số hóa quy trình kinh doanh và quản lý bán lẻ thiết bị công nghệ. Bằng việc hiện thực hóa kiến trúc MVC ba tầng vững chắc trên nền tảng Java Servlet, JSP và MySQL, hệ thống không chỉ đảm bảo hiệu năng xử lý cao, thời gian đáp ứng dưới 1.2 giây mà còn thiết lập chuẩn mực an toàn thông tin với 0 lỗ hổng dữ liệu. Dự án là nền tảng kỹ thuật vững chắc để tiếp tục mở rộng lên các kiến trúc đám mây và Microservices hiện đại trong tương lai.