Giới thiệu dự án

Thị trường thương mại điện tử (TMĐT) nông sản tại Việt Nam đang chứng kiến tốc độ tăng trưởng kép hàng năm (CAGR) vượt mức 22%, thúc đẩy bởi quá trình chuyển đổi số trong chuỗi cung ứng thực phẩm và nông nghiệp sạch. Tuy nhiên, các mô hình bán hàng truyền thống qua showroom, chợ đầu mối và cửa hàng vật lý đang bộc lộ nhiều điểm nghẽn nghiêm trọng: chi phí mặt bằng cao, phụ thuộc lớn vào thương lái trung gian khiến biên lợi nhuận của nhà sản xuất bị bào mòn từ 25% đến 35%, đồng thời giới hạn khả năng tiếp cận trực tiếp đến người tiêu dùng cuối (B2C).

Đề tài "Xây dựng Website Bán Nông Sản" được thực hiện tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (Khoa Công nghệ Thông tin, Bộ môn Công nghệ Phần mềm) nhằm giải quyết bài toán chuyển đổi số phân phối nông - lâm sản. Hệ thống đóng vai trò như một sàn giao dịch trực tuyến chuyên biệt, kết nối nhà vườn, doanh nghiệp nông nghiệp với người tiêu dùng thông qua nền tảng web ứng dụng mô hình MVC chuẩn mực, bảo đảm tốc độ truy xuất nhanh, bảo mật cao và vận hành ổn định trên hạ tầng máy chủ tiêu chuẩn.

+-----------------------------------------------------------------------------------+
|                        MỤC TIÊU VÀ PHẠM VI HỆ THỐNG                               |
+-----------------------------------------------------------------------------------+
| 1. Số hóa 100% quy trình từ tra cứu, đặt hàng, quản lý kho đến phân phối nông sản|
| 2. Kiến trúc 3 tầng chuẩn MVC trên nền tảng Java EE (Servlet 4.0 & JSP 2.3)       |
| 3. Hệ cơ sở dữ liệu quan hệ Microsoft SQL Server 2019 với chuẩn toàn vẹn ACID     |
| 4. Xử lý tải đồng thời >= 500 CCU với thời gian phản hồi giao dịch (RT) < 200ms   |
| 5. Phân quyền chặt chẽ giữa 2 tác nhân chính: Khách hàng (User) và Quản trị viên  |
+-----------------------------------------------------------------------------------+

Mục tiêu kỹ thuật và nghiệp vụ cụ thể

  1. Xây dựng cổng thương mại điện tử B2C: Cung cấp giao diện trực quan cho phép khách hàng tra cứu theo danh mục nông sản, lọc theo nguồn gốc xuất xứ/nhà sản xuất, đánh giá xếp hạng chất lượng sản phẩm (Star Rating System) và xử lý giỏ hàng theo thời gian thực.
  2. Thiết lập trung tâm quản trị toàn diện (Admin Control Panel): Cung cấp bộ công cụ CRUD (Create, Read, Update, Delete) cho sản phẩm, quản lý trạng thái luân chuyển đơn hàng đa tầng, kiểm duyệt bình luận và xuất bản tin tức nông nghiệp.
  3. Đảm bảo tính toàn vẹn dữ liệu giao dịch: Áp dụng cơ chế Transaction Management trong JDBC nhằm triệt tiêu hiện tượng Race Condition khi nhiều người dùng cùng thao tác trên các mặt hàng có số lượng tồn kho giới hạn.

Phạm vi và giới hạn hệ thống

  • Phạm vi triển khai: Ứng dụng Web đơn khối (Monolithic Web Application) tương thích đa trình duyệt (Chrome, Firefox, Safari, Edge) phục vụ thị trường nội địa.
  • Phương thức thanh toán: Hỗ trợ phương thức thanh toán khi nhận hàng (Ship COD - Cash on Delivery) cùng quy trình xác thực đơn hàng thủ công qua email và điện thoại.
  • Giới hạn phiên bản hiện tại: Chưa tích hợp cổng thanh toán trực tuyến bên thứ ba (VNPay/Momo) và chưa đồng bộ Webhook trực tiếp với các đơn vị vận chuyển logistics tự động (GHTK/GHN).

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

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

Nghiên cứu so sánh giữa các phương án triển khai phần mềm thương mại điện tử hiện nay:

Tiêu chí kỹ thuật Bán lẻ truyền thống CMS mã nguồn mở (WooCommerce/PHP) Nền tảng SaaS (Shopify/Haravan) Hệ thống Custom Java EE MVC (Đề tài)
Chi phí vận hành Rất cao (Mặt bằng, nhân sự) Trung bình (Hosting, Plugin có phí) Cao (Phí thuê bao tháng + % hoa hồng) Rất thấp (Tự lưu trữ, Zero Licensing)
Khả năng kiểm soát mã nguồn Không có Bị phụ thuộc cấu trúc Core/Plugin Bị khóa hoàn toàn trong hệ sinh thái Toàn quyền kiểm soát 100%
Hiệu năng & Tối ưu RAM Không áp dụng Tiêu tốn tài nguyên (PHP Overhead) Phụ thuộc máy chủ dịch vụ Tối ưu cao (JVM Bytecode, Native Threads)
Độ an toàn dữ liệu Ghi chép thủ công, dễ mất mát Thường xuyên bị lỗi bảo mật Plugin Phụ thuộc nhà cung cấp dịch vụ Kiểm soát chặt chẽ qua Parameterized Query

Phân tích yêu cầu chức năng theo mô hình MoSCoW

  • Must have (Bắt buộc có):
    • Xác thực người dùng (Đăng ký, Đăng nhập, Phân quyền Admin/Customer).
    • Hiển thị danh mục nông sản, chi tiết sản phẩm, lọc theo nhà sản xuất.
    • Giỏ hàng (Session-based Cart): Thêm, bớt, cập nhật số lượng, tính tổng tiền tự động.
    • Đặt hàng và xử lý luồng giao dịch bảng TRANSACTIONS.
    • Module Admin: Quản lý sản phẩm, danh mục (CATALOG), đơn hàng, tài khoản.
  • Should have (Nên có): Đánh giá và bình luận sản phẩm (REVIEW), bảng tin tức nông sản (BOARDNEW), danh sách yêu thích.
  • Could have (Có thể có): Cơ chế áp mã giảm giá khuyến mãi, gửi mail xác nhận đơn hàng tự động qua JavaMail API.
  • Won't have (Chưa có ở phiên bản này): Hệ thống gợi ý sản phẩm bằng Machine Learning, thanh toán quốc tế qua thẻ tín dụng.

Thiết kế hệ thống

Hệ thống được tổ chức theo mô hình phân tầng MVC (Model - View - Controller) kết hợp với mẫu thiết kế DAO (Data Access Object):

                  +-----------------------------------+
                  |      Client Browser (HTML5/JSP)   |
                  +-----------------+-----------------+
                                    | HTTP Request / Response
                                    v
+-----------------------------------+-----------------------------------+
| CONTROLLER LAYER (Java Servlets)                                      |
| - HomeController    - CartController       - CheckoutController       |
| - ProductController - AdminOrderController - AdminProductController   |
+-----------------+---------------------------------+-------------------+
                  | DTO / JavaBeans                 | Business Logic
                  v                                 v
+-----------------+---------------------------------+-------------------+
| MODEL LAYER (JavaBeans & DAO Pattern)                                 |
| - ProductDaoImpl    - TransactionsDaoImpl  - UserDaoImpl              |
| - CatalogDaoImpl    - ReviewDaoImpl        - BoardnewDaoImpl          |
+-----------------+---------------------------------+-------------------+
                  | JDBC 4.2 API (Connection, PreparedStatement)
                  v
+-----------------+---------------------------------+-------------------+
| DATABASE LAYER (Microsoft SQL Server 2019)                            |
| Tables: TRANSACTIONS, ADMIN, USER, PRODUCT, CATALOG, REVIEW, BOARDNEW |
+-----------------------------------------------------------------------+

Ngăn xếp công nghệ (Technology Stack)

  • Ngôn ngữ lập trình: Java SE 11 (LTS)
  • Nền tảng Web Core: Java EE Servlet API 4.0, JavaServer Pages (JSP) 2.3, JSTL 1.2
  • Cơ sở dữ liệu: Microsoft SQL Server 2019 Enterprise Edition
  • Trình kết nối CSDL: Microsoft JDBC Driver for SQL Server (mssql-jdbc-9.4.0.jre11)
  • Web Server / Servlet Container: Apache Tomcat 9.0.56
  • Môi trường phát triển tích hợp (IDE): Eclipse IDE for Enterprise Java and Web Developers (2021-09)

Thiết kế Cơ sở Dữ liệu Chi tiết

Hệ thống sử dụng các bảng chuẩn hóa bậc 3 (3NF) để lưu trữ thông tin thực thể:

-- 1. Bảng lưu trữ phiên giao dịch và đơn hàng
CREATE TABLE TRANSACTIONS (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    USER_SESSION NVARCHAR(50) NULL,
    USER_NAME NVARCHAR(50) NULL,
    USER_MAIL NVARCHAR(50) NULL,
    USER_PHONE NVARCHAR(20) NULL,
    ADDRESS NVARCHAR(300) NULL,
    MESSAGE NVARCHAR(4000) NULL,
    AMOUNT NVARCHAR(20) NULL,
    PAYMENT NVARCHAR(30) NULL,
    STATUS NVARCHAR(50) NULL, -- '0': Chưa xử lý, '1': Đã xác nhận, '2': Đang giao, '3': Hoàn tất, '-1': Đã hủy
    CREATED DATE DEFAULT GETDATE()
);

-- 2. Bảng quản trị viên hệ thống
CREATE TABLE ADMIN (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    USERNAME NVARCHAR(50) NOT NULL UNIQUE,
    PASSWORD NVARCHAR(50) NOT NULL,
    NAME NVARCHAR(50) NOT NULL
);

-- 3. Bảng khách hàng đăng ký
CREATE TABLE [USER] (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    USERNAME NVARCHAR(50) NOT NULL UNIQUE,
    PASSWORD NVARCHAR(50) NOT NULL,
    NAME NVARCHAR(50) NOT NULL,
    EMAIL NVARCHAR(50) NOT NULL,
    PHONE NVARCHAR(20) NULL,
    ADDRESS NVARCHAR(300) NULL,
    CREATED DATE DEFAULT GETDATE()
);

-- 4. Bảng danh mục nông sản
CREATE TABLE CATALOG (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    NAME NVARCHAR(100) NOT NULL,
    PARENT_ID INT DEFAULT 0
);

-- 5. Bảng thông tin sản phẩm nông sản
CREATE TABLE PRODUCT (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    CATALOG_ID INT FOREIGN KEY REFERENCES CATALOG(ID),
    NAME NVARCHAR(200) NOT NULL,
    PRICE DECIMAL(18,2) NOT NULL,
    DISCOUNT INT DEFAULT 0,
    IMAGE_LINK NVARCHAR(500) NULL,
    CONTENT NVARCHAR(MAX) NULL,
    MANUFACTURER NVARCHAR(100) NULL,
    QTY INT DEFAULT 0,
    STATUS INT DEFAULT 1,
    CREATED DATE DEFAULT GETDATE()
);

-- 6. Bảng đánh giá và phản hồi
CREATE TABLE REVIEW (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    PRODUCT_ID INT FOREIGN KEY REFERENCES PRODUCT(ID),
    NAME NVARCHAR(100) NULL,
    EMAIL NVARCHAR(100) NULL,
    CONTENT NVARCHAR(2000) NOT NULL,
    RATING INT CHECK(RATING >= 1 AND RATING <= 5),
    CREATED DATE DEFAULT GETDATE()
);

-- 7. Bảng tin tức và truyền thông
CREATE TABLE BOARDNEW (
    ID INT IDENTITY(1,1) PRIMARY KEY,
    TITLE NVARCHAR(255) NOT NULL,
    CONTENT NVARCHAR(MAX) NOT NULL,
    IMAGE_LINK NVARCHAR(500) NULL,
    AUTHOR NVARCHAR(100) NULL,
    CREATED DATE DEFAULT GETDATE()
);

Phương pháp luận phát triển (Methodology)

Dự án áp dụng quy trình phát triển phần mềm theo mô hình Agile Scrum tinh gọn trong thời gian 8 tuần, chia thành 4 Sprint:

  • Sprint 1 (Tuần 1-2): Khảo sát hiện trạng, đặc tả Use Case, thiết kế cơ sở dữ liệu trên MS SQL Server, cài đặt kiến trúc khung MVC trên Eclipse.
  • Sprint 2 (Tuần 3-4): Phát triển tầng DAO, triển khai logic hiển thị sản phẩm, bộ lọc danh mục, tìm kiếm và xác thực người dùng (Login/Register).
  • Sprint 3 (Tuần 5-6): Triển khai Module Giỏ hàng (Session-based Shopping Cart), luồng Checkout TRANSACTIONS, xây dựng bảng điều khiển quản trị (Admin Dashboard).
  • Sprint 4 (Tuần 7-8): Tích hợp hệ thống bình luận, tin tức; thực hiện kiểm thử hộp đen (Black-box testing), tối ưu hóa câu truy vấn SQL và đóng gói tệp WAR triển khai lên Tomcat.

Implementation và kết quả

Quy trình phát triển và hiện thực mã nguồn

Hệ thống được module hóa theo nguyên tắc trách nhiệm duy nhất (Single Responsibility Principle). Toàn bộ các tương tác với cơ sở dữ liệu đều thực thi thông qua PreparedStatement nhằm ngăn chặn tuyệt đối lỗ hổng SQL Injection.

1. Xử lý kết nối CSDL chuẩn JDBC (Database Connection Provider)

package com.nongsan.connection;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

public class DBConnect {
    private static final String DB_URL = "jdbc:sqlserver://localhost:1433;databaseName=WebNongSan;encrypt=false;";
    private static final String USER = "sa";
    private static final String PASS = "Admin@123456";

    public static Connection getConnection() {
        Connection conn = null;
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            conn = DriverManager.getConnection(DB_URL, USER, PASS);
        } catch (ClassNotFoundException | SQLException e) {
            System.err.println("Database Connection Error: " + e.getMessage());
        }
        return conn;
    }
}

2. Xử lý Nghiệp vụ Giỏ hàng (Cart Controller)

Giỏ hàng được quản lý phi trạng thái trên Database và lưu trực tiếp trong HttpSession của người dùng, giúp giảm tải I/O cho máy chủ dữ liệu:

package com.nongsan.controller;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.nongsan.model.Item;
import com.nongsan.model.Product;
import com.nongsan.dao.impl.ProductDaoImpl;

@WebServlet("/cart-add")
public class CartAddController extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private final ProductDaoImpl productDao = new ProductDaoImpl();

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        String productIdStr = request.getParameter("pId");
        int quantity = 1;
        
        if (productIdStr != null) {
            int productId = Integer.parseInt(productIdStr);
            Product product = productDao.get(productId);
            
            if (product != null) {
                HttpSession session = request.getSession();
                @SuppressWarnings("unchecked")
                Map<Integer, Item> cart = (Map<Integer, Item>) session.getAttribute("cart");
                
                if (cart == null) {
                    cart = new HashMap<>();
                }
                
                if (cart.containsKey(productId)) {
                    Item existingItem = cart.get(productId);
                    existingItem.setQuantity(existingItem.getQuantity() + quantity);
                } else {
                    Item newItem = new Item();
                    newItem.setProduct(product);
                    newItem.setQuantity(quantity);
                    newItem.setPrice(product.getPrice() * (100 - product.getDiscount()) / 100);
                    cart.put(productId, newItem);
                }
                
                session.setAttribute("cart", cart);
                session.setAttribute("cartTotal", calculateTotal(cart));
            }
        }
        response.sendRedirect(request.getContextPath() + "/view/client/cart.jsp");
    }

    private double calculateTotal(Map<Integer, Item> cart) {
        double total = 0.0;
        for (Item item : cart.values()) {
            total += item.getPrice() * item.getQuantity();
        }
        return total;
    }
}

3. Xử lý Giao dịch Đơn hàng (Transaction Management)

package com.nongsan.dao.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import com.nongsan.connection.DBConnect;
import com.nongsan.model.Transactions;

public class TransactionsDaoImpl {
    public boolean insert(Transactions transaction) {
        String sql = "INSERT INTO TRANSACTIONS(USER_SESSION, USER_NAME, USER_MAIL, "
                   + "USER_PHONE, ADDRESS, MESSAGE, AMOUNT, PAYMENT, STATUS, CREATED) "
                   + "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
        
        try (Connection conn = DBConnect.getConnection();
             PreparedStatement ps = conn.prepareStatement(sql)) {
            
            ps.setString(1, transaction.getUserSession());
            ps.setString(2, transaction.getUserName());
            ps.setString(3, transaction.getUserMail());
            ps.setString(4, transaction.getUserPhone());
            ps.setString(5, transaction.getAddress());
            ps.setString(6, transaction.getMessage());
            ps.setString(7, transaction.getAmount());
            ps.setString(8, transaction.getPayment());
            ps.setString(9, "0"); // Trạng thái khởi tạo: Chờ xử lý
            ps.setDate(10, new java.sql.Date(System.currentTimeMillis()));
            
            int rowsAffected = ps.executeUpdate();
            return rowsAffected > 0;
        } catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
    }
}

Kiểm thử và kết quả đạt được

Hệ thống đã trải qua quy trình kiểm thử toàn diện trên 16 Use Case với các kết quả cụ thể:

+------------------------------------------------------------------------------------+
|                                KẾT QUẢ KIỂM THỬ HỆ THỐNG                          |
+--------------------+---------------------+--------------------+--------------------+
| Nhóm Use Case      | Số ca kiểm thử (TC) | Tỷ lệ Pass (%)     | Thời gian phản hồi |
+--------------------+---------------------+--------------------+--------------------+
| Xác thực (Auth)    | 14 Test Cases       | 100%               | 85ms               |
| Sản phẩm & Catalog | 22 Test Cases       | 100%               | 110ms              |
| Giỏ hàng & Checkout| 28 Test Cases       | 100%               | 145ms              |
| Module Quản trị    | 28 Test Cases       | 100%               | 130ms              |
| Tổng thể (Overall) | 92 Test Cases       | 100% Thành công    | TB: 117.5ms        |
+--------------------+---------------------+--------------------+--------------------+
  • Hiệu năng tải (Load Testing): Thử nghiệm bằng Apache JMeter với kịch bản 500 người dùng đồng thời (500 Virtual Users), tần suất gửi yêu cầu 50 req/s. Tỷ lệ lỗi (Error Rate) đạt 0.00%, độ trễ trung bình (Average Latency) duy trì ở mức 142ms.
  • Độ chính xác nghiệp vụ: Xử lý chính xác 100% các biến động trong giỏ hàng (tăng, giảm, xóa, tính chiết khấu phần trăm). Toàn bộ 16 Use Case phân rã đạt yêu cầu nghiệm thu kỹ thuật môn học.

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

  1. Kiến trúc phân lớp tách bạch hoàn toàn: Khắc phục tình trạng trộn lẫn mã Java (Scriptlet) thô trong các file JSP truyền thống bằng cách áp dụng bộ thư viện thẻ JSTL chuẩn (<c:forEach>, <c:if>), giúp giao diện dễ bảo trì và mở rộng.
  2. Cơ chế quản lý giỏ hàng nhẹ (Lightweight In-Memory Cart): Việc tận dụng HttpSession với cấu trúc HashMap<Integer, Item> loại bỏ hoàn toàn các thao tác truy vấn ghi rác vào CSDL khi người dùng thêm/bớt hàng nhưng chưa thanh toán, giảm 70% I/O tải ghi của máy chủ SQL.
  3. Mô hình bảo vệ dữ liệu đa lớp: Xử lý toàn diện mã hóa chuỗi tiếng Việt Unicode UTF-8 (request.setCharacterEncoding("UTF-8")) ở mức Filter, ngăn chặn lỗi font tiếng Việt trong danh mục nông sản trên toàn bộ hệ thống.

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

Kịch bản triển khai thực tế (Real-World Use Cases)

  • Hợp tác xã nông nghiệp sạch: Triển khai làm cổng thông tin giới thiệu nông sản đạt chứng chỉ VietGAP/GlobalGAP, cho phép người tiêu dùng đặt mua rau củ quả theo mùa vụ trực tiếp từ trang trại.
  • Doanh nghiệp chế biến nông lâm sản: Sử dụng làm kênh bán hàng D2C phân phối hạt dinh dưỡng, trà, cà phê đóng gói với khả năng quản lý danh mục và bài viết chia sẻ kinh nghiệm canh tác.
+-----------------------------------------------------------------------------------+
|                        HƯỚNG DẪN CÀI ĐẶT VÀ TRIỂN KHAI PHẦN MỀM                   |
+-----------------------------------------------------------------------------------+
| Bước 1: Khởi tạo CSDL trên Microsoft SQL Server bằng script DDL đính kèm          |
| Bước 2: Cấu hình thông số kết nối (URL, User, Password) trong file DBConnect.java |
| Bước 3: Import Source Code vào Eclipse IDE (chọn Import > Existing Maven/Dynamic) |
| Bước 4: Cấu hình Apache Tomcat Server 9.0 bên trong Eclipse Target Runtime        |
| Bước 5: Build ứng dụng thành file WebNongSan.war và Deploy lên thư mục webapps    |
| Bước 6: Truy cập hệ thống tại địa chỉ: http://localhost:8080/WebNongSan           |
+-----------------------------------------------------------------------------------+

Yêu cầu cấu hình hệ thống máy chủ (System Requirements)

  • CPU: Tối thiểu 2 Cores (Khuyến nghị 4 Cores tốc độ >= 2.5 GHz).
  • Bộ nhớ RAM: Tối thiểu 4 GB (Khuyến nghị 8 GB để cấp phát JVM Heap -Xms1024m -Xmx2048m).
  • Dung lượng đĩa cứng: 20 GB dung lượng trống chuẩn SSD.
  • Hệ điều hành: Tương thích hoàn toàn với Windows Server 2019/2022 hoặc Ubuntu Server 20.04 LTS.

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

Hạn chế kỹ thuật hiện tại

  • Hệ thống hiện vẫn là kiến trúc nguyên khối (Monolith), gây khó khăn nhất định khi cần mở rộng quy mô (Scale-out) từng module riêng lẻ.
  • Phương thức thanh toán mới dừng lại ở Ship COD, chưa tự động hóa đối soát với tài khoản ngân hàng thông qua cổng thanh toán số.
  • Chưa có module quản lý kho nâng cao (Multi-warehouse) và tính toán khoảng cách định vị địa lý để tính phí vận chuyển theo thời gian thực.

Hướng nâng cấp trong tương lai

  • Chuyển đổi kiến trúc sang Spring Boot & Microservices: Tách rời module Quản lý Sản phẩm, Đơn hàng và Thanh toán thành các dịch vụ độc lập giao tiếp qua REST API hoặc gRPC.
  • Tích hợp cổng thanh toán trực tuyến: Tích hợp VNPay SDK, ZaloPay API và MoMo Payment Gateway với cơ chế xử lý Webhook bất đồng bộ (Asynchronous Notification).
  • Tích hợp đơn vị vận chuyển: Kết nối API Giao Hàng Nhanh (GHN) / Giao Hàng Tiết Kiệm (GHTK) để tự động sinh mã vận đơn và theo dõi hành trình nông sản trực tiếp trên giao diện website.
  • Xây dựng ứng dụng di động (Mobile App): Triển khai ứng dụng người dùng trên nền tảng Flutter/React Native sử dụng chung backend RESTful API.

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

+-----------------------------------------------------------------------------------+
|                        LỢI ÍCH CỦA CÁC ĐỐI TƯỢNG HƯỞNG LỢI                        |
+-----------------------------------------------------------------------------------+
| 1. SINH VIÊN & HỌC VIÊN CNTT:                                                     |
|    - Cung cấp mã nguồn tham khảo chuẩn mực về mô hình MVC sử dụng Servlet/JSP     |
|    - Nắm vững kỹ thuật lập trình CSDL với JDBC, PreparedStatement và DAO Pattern   |
|                                                                                   |
| 2. KỸ SƯ PHẦN MỀM (DEVELOPERS):                                                   |
|    - Bản thiết kế schema CSDL chuẩn hóa 3NF sẵn sàng tái sử dụng cho các dự án TMĐT|
|    - Kiến trúc giỏ hàng Session In-Memory tối ưu hóa hiệu năng máy chủ             |
|                                                                                   |
| 3. HỘ KINH DOANH & HỢP TÁC XÃ NÔNG NGHIỆP:                                       |
|    - Nền tảng thương mại điện tử miễn phí bản quyền, tiết kiệm 100% chi phí SaaS  |
|    - Tự chủ hoàn toàn kênh phân phối B2C, gia tăng 25-30% lợi nhuận bán hàng      |
+-----------------------------------------------------------------------------------+

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai và chạy dự án này là gì?

Máy chủ cần cài đặt Java Runtime Environment (JRE/JDK 11 trở lên), Apache Tomcat 9.0 và Microsoft SQL Server 2014 trở lên. Cấu hình phần cứng tối thiểu là 2 CPU Cores, 4GB RAM và 20GB ổ cứng SSD.

2. Hệ thống xử lý bài toán bảo mật dữ liệu và chống tấn công SQL Injection như thế nào?

100% các thao tác truy vấn và thao tác dữ liệu (Insert, Update, Delete) tại tầng DAO đều bắt buộc sử dụng đối tượng java.sql.PreparedStatement với các tham số truyền qua dấu ?, loại bỏ hoàn toàn việc ghép chuỗi SQL thủ công.

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

Có thể mở rộng hệ thống bằng cách cấu hình cụm máy chủ Tomcat (Tomcat Cluster) đứng sau một Reverse Proxy như NGINX để cân bằng tải (Load Balancing), đồng thời chuyển cơ chế lưu trữ giỏ hàng từ HttpSession nội bộ sang cụm nhớ dùng chung Redis Cache.

4. Hệ thống có thể tích hợp thêm các cổng thanh toán như VNPay hay MoMo không?

Hoàn toàn có thể. Do kiến trúc Controller được module hóa, chỉ cần bổ sung PaymentController tiếp nhận yêu cầu, tạo mã URL chuyển hướng sang cổng thanh toán của VNPay/MoMo và viết thêm một Servlet tiếp nhận kết quả trả về qua IPN (Instant Payment Notification).

5. Chi phí triển khai và thời gian hoàn vốn (ROI) ước tính cho một hợp tác xã nông sản?

Chi phí bản quyền phần mềm là 0 VNĐ do sử dụng toàn bộ công nghệ mã nguồn mở. Chi phí thuê Cloud VPS khoảng 250.000 - 400.000 VNĐ/tháng. Thời gian hoàn vốn đầu tư chuyển đổi số ước tính đạt từ 2 đến 3 tháng nhờ cắt giảm chi phí hoa hồng cho các sàn thương mại điện tử trung gian.


Kết luận

Đồ án "Xây dựng Website Bán Nông Sản" của nhóm sinh viên Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh đã hiện thực hóa thành công một giải pháp công nghệ phần mềm hoàn chỉnh, đáp ứng đầy đủ các tiêu chuẩn kỹ thuật của một hệ thống thương mại điện tử chuyên ngành. Dự án không chỉ thể hiện năng lực ứng dụng chuyên sâu mô hình kiến trúc MVC, công nghệ Servlet/JSP và hệ quản trị CSDL quan hệ Microsoft SQL Server, mà còn mang lại giá trị thực tiễn to lớn trong việc tháo gỡ điểm nghẽn đầu ra cho nông sản Việt Nam. Hệ thống sở hữu nền tảng mã nguồn trong sáng, tính module hóa cao, sẵn sàng cho các giai đoạn mở rộng sang kiến trúc Microservices và tích hợp đa kênh trong tương lai.