Giới thiệu dự án

Sự bùng nổ của mạng toàn cầu (World Wide Web - WWW) và xu hướng chuyển dịch từ các hệ thống web tĩnh sang các nền tảng ứng dụng mạng xã hội tương tác cao đòi hỏi các kiến trúc phần mềm phía máy chủ (Server-side) phải có khả năng xử lý nghiệp vụ phức tạp, bảo mật cao và dễ bảo trì. Trong giai đoạn chuyển giao công nghệ phần mềm tại Việt Nam, ngành dịch vụ số chứng kiến sự tăng trưởng hơn 25% mỗi năm về nhu cầu nghe nhạc trực tuyến và kết nối cộng đồng. Tuy nhiên, phần lớn các hệ thống web thời điểm này được xây dựng theo mô hình truyền thống (Model 1), dẫn đến hiện tượng trộn lẫn logic xử lý nghiệp vụ (Business Logic) với mã hiển thị giao diện (Presentation Layer), gây khó khăn nghiêm trọng khi mở rộng quy mô và kiểm thử mã nguồn.

Khóa luận tốt nghiệp chuyên ngành Công nghệ Thông tin tại Trường Đại học Quảng Nam (thực hiện bởi sinh viên Nguyễn Công Chính, dưới sự hướng dẫn của ThS. Đỗ Quang Khôi và quá trình thực tập tại FPT Software Đà Nẵng) đã tập trung giải quyết bài toán: Nghiên cứu kiến trúc Apache Struts Framework trên nền tảng Java EE và ứng dụng xây dựng hệ thống website Mạng xã hội Âm nhạc trực tuyến.

+-----------------------------------------------------------------------+
|                 HỆ THỐNG MẠNG XÃ HỘI ÂM NHẠC                          |
+-----------------------------------------------------------------------+
|  +---------------------+   +---------------------+   +--------------+ |
|  |     Client View     |   |   ActionServlet     |   |  JavaBeans   | |
|  | (JSP / Struts Tags) |-->|   (Struts 1.3.10)   |-->|   & Model    | |
|  +---------------------+   +---------------------+   +--------------+ |
|             ^                         |                      |        |
|             |                         v                      v        |
|             +----------------- [struts-config.xml] <--> [Database]    |
+-----------------------------------------------------------------------+

Mục tiêu dự án

  1. Làm chủ kiến trúc MVC (Model 2): Phân tích chuyên sâu cơ chế chuyển tiếp yêu cầu của ActionServlet, vòng đời xử lý HttpServletRequest/HttpServletResponse, và hệ thống cấu hình ánh xạ luồng dữ liệu XML.
  2. Quy chuẩn hóa quy trình cấu hình Struts: Xây dựng quy trình chuẩn tích hợp Apache Struts Framework (phiên bản 1.3.10) trên môi trường phát triển Eclipse IDE và Apache Tomcat Server.
  3. Phát triển nền tảng Mạng xã hội Âm nhạc: Xây dựng hoàn chỉnh ứng dụng web âm nhạc đa tương tác với 4 nhóm tác nhân (Admin, Moderator, Thành viên, Người dùng vãng lai).
  4. Tối ưu hóa hiệu năng và bảo mật: Tách biệt hoàn toàn tầng dữ liệu (Model) với tầng hiển thị (View JSP/Taglib), hạn chế tối đa lỗi thực thi mã độc và giảm tải thời gian phản hồi máy chủ xuống dưới 200ms.

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

  • Phạm vi kỹ thuật: Tập trung khai thác mẫu thiết kế Model-View-Controller chuẩn của Struts 1.3, sử dụng Java Servlet API, JavaServer Pages (JSP), Struts Custom Taglibs, Struts Tiles Plugin, Struts Validator kết hợp Ajax, jQuery, Bootstrap cho tầng giao diện người dùng (Client-side).
  • Giới hạn: Ứng dụng tập trung vào kiến trúc máy chủ đơn (Monolithic Server Architecture), cơ sở dữ liệu quan hệ SQL và định dạng streaming âm thanh chuẩn MP3 thông qua giao thức HTTP tiêu chuẩn.

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

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

Tại thời điểm nghiên cứu, các giải pháp phát triển web đang phân hóa mạnh mẽ giữa các nền tảng CGI, ASP cổ điển, PHP và Java Model 1:

Tiêu chí so sánh Kiến trúc Model 1 (JSP/CGI/PHP Script) Kiến trúc Model 2 / MVC (Apache Struts 1.3)
Phân tách trách nhiệm Thấp: Logic dữ liệu, SQL và HTML trộn lẫn trong một file Cao: Tách biệt rõ ràng Model (JavaBeans), View (JSP), Controller (ActionServlet)
Khả năng tái sử dụng Kém: Nhân bản mã nguồn khi thay đổi định dạng giao diện Tối ưu: Dễ dàng hỗ trợ nhiều tầng hiển thị (Web HTML, WML, Mobile UI)
Kiểm soát luồng (Routing) Phân tán: Mỗi trang tự điều hướng bằng script nội tuyến Tập trung: Quản lý toàn bộ điều hướng qua struts-config.xml
Xác thực dữ liệu (Validation) Thủ công trên từng tệp, dễ sót lỗi bảo mật Khung ActionForm kết hợp Struts Validator tự động kiểm tra Client/Server
Bảo trì & Mở rộng Chi phí cao, rủi ro phát sinh lỗi dây chuyền lớn Dễ dàng mở rộng module, bảo trì độc lập giữa Dev và UI Designer

Ma trận phân loại yêu cầu chức năng (MoSCoW)

  • Must Have (Bắt buộc): Luồng đăng ký/đăng nhập, nghe nhạc trực tuyến, quản lý bài hát, quản trị phân quyền đa cấp, điều hướng trung tâm qua struts-config.xml.
  • Should Have (Nên có): Tạo/chỉnh sửa Album/Playlist cá nhân, bình luận thời gian thực qua Ajax, hệ thống tích lũy điểm thưởng thành viên.
  • Could Have (Có thể có): Chia sẻ liên kết lên các mạng xã hội bên ngoài, tùy biến giao diện với Struts Tiles.
  • Won't Have (Chưa thực hiện): Tích hợp cổng thanh toán trực tuyến và mã hóa bản quyền nhạc DRM.

Thiết kế hệ thống

Kiến trúc hệ thống triển khai theo mô hình 3 tầng phân cấp rõ rệt:

[ Trình duyệt Web (Client Browser) ]
                 |  HTTP Request (*.do)
                 v
+-------------------------------------------------------------+
| TẦNG ĐIỀU KHIỂN (CONTROLLER LAYER)                          |
| - ActionServlet (org.apache.struts.action.ActionServlet)   |
| - File cấu hình trung tâm: struts-config.xml                |
| - RequestProcessor & ActionMapping                          |
+-------------------------------------------------------------+
                 |
                 v
+-------------------------------------------------------------+
| TẦNG NGHIỆP VỤ & DỮ LIỆU (MODEL LAYER)                     |
| - Action Classes (Kế thừa org.apache.struts.action.Action)  |
| - Form Beans (Kế thừa ActionForm / DynaActionForm)          |
| - Business Logic Beans & Data Access Objects (DAO)          |
+-------------------------------------------------------------+
                 |
                 v
+-------------------------------------------------------------+
| CƠ SỞ DỮ LIỆU (DATABASE LAYER)                              |
| - Hệ quản trị CSDL Quan hệ (RDBMS)                         |
| - Thực thể: NguoiDung, BaiHat, Playlist, BinhLuan, Diem...  |
+-------------------------------------------------------------+
                 |
                 v (Forward response)
+-------------------------------------------------------------+
| TẦNG HIỂN THỊ (VIEW LAYER)                                  |
| - JSP Pages kết hợp Struts Taglibs (html, bean, logic)      |
| - Tiles Templates Engine & Client-side Frameworks           |
+-------------------------------------------------------------+

Technology Stack & Versioning

  • Core Platform: Java Development Kit (JDK 1.7 / Java EE 6).
  • Web Framework: Apache Struts Framework v1.3.10.
  • Web Container/Server: Apache Tomcat Server v7.0.
  • Client-side Libraries: JSP 2.2, HTML5, CSS3, JavaScript (ECMAScript 3/5), jQuery v1.11, Bootstrap v3.3.
  • Database System: Microsoft SQL Server / MySQL 5.6 kết nối qua JDBC Driver.

Thiết kế cơ sở dữ liệu cốt lõi

Hệ thống sử dụng mô hình cơ sở dữ liệu quan hệ chuẩn hóa bậc 3 (3NF) với các bảng chính:

  • NguoiDung (MaND, TenDangNhap, MatKhau, HoTen, Email, MaQuyen, DiemTichLuy)
  • QuyenHan (MaQuyen, TenQuyen -> Mapping: 1-Admin, 2-Moderator, 3-ThanhVien)
  • BaiHat (MaBH, TenBH, CaSi, TheLoai, DuongDanFile, LuotNghe, MaND_Upload)
  • Playlist (MaPL, TenPL, MoTa, NgayTao, MaND)
  • Playlist_ChiTiet (MaPL, MaBH, ThuTu)
  • BinhLuan (MaBL, MaBH, MaND, NoiDung, NgayBL, TrangThai)

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

Dự án áp dụng mô hình phát triển phần mềm lặp tăng trưởng (Iterative Waterfall/V-Model rút gọn) phù hợp với quy trình kiểm thử phần mềm nghiêm ngặt tại FPT Software Đà Nẵng:

  • Giai đoạn 1 (Tuần 1-3): Khảo sát nghiệp vụ, thu thập yêu cầu và phân tích ca sử dụng (Use Case Diagrams: Admin, Moderator, Thành viên, Người dùng chung).
  • Giai đoạn 2 (Tuần 4-6): Nghiên cứu lý thuyết Struts Framework, xây dựng cấu hình mẫu dự án (web.xml, struts-config.xml, Taglibs).
  • Giai đoạn 3 (Tuần 7-14): Thiết kế sơ đồ lớp (Class Diagram), cơ sở dữ liệu và hiện thực hóa các module xử lý nghiệp vụ (Action, FormBean, DAO).
  • Giai đoạn 4 (Tuần 15-18): Kiểm thử tích hợp (Integration Test), kiểm thử chấp nhận người dùng (UAT), tối ưu hóa hiệu năng và đóng gói tài liệu.

Implementation và kết quả

Chi tiết hiện thực mã nguồn (Technical Implementation)

1. Cấu hình Controller trung tâm trong web.xml

Toàn bộ các yêu cầu HTTP có phần mở rộng *.do được điều hướng tự động về ActionServlet của Struts:

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="struts-music-social" version="2.4"
         xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
         http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>Music Social Network with Struts</display-name>
    
    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
            <param-name>config</param-name>
            <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
</web-app>

2. Cấu hình định tuyến nghiệp vụ trong struts-config.xml

Ánh xạ các yêu cầu quản lý và tương tác nghe nhạc/playlist qua các lớp Action và FormBean:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC 
  "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN" 
  "http://struts.org/dtds/struts-config_1_3.dtd">
<struts-config>
    <form-beans>
        <form-bean name="SongActionForm" type="com.music.form.SongActionForm" />
        <form-bean name="CommentActionForm" type="com.music.form.CommentActionForm" />
    </form-beans>

    <global-forwards>
        <forward name="error" path="/error.jsp" />
        <forward name="loginRedirect" path="/login.do" redirect="true" />
    </global-forwards>

    <action-mappings>
        <!-- Mapping chức năng nghe bài hát chi tiết -->
        <action path="/playSong" 
                type="com.music.action.PlaySongAction" 
                name="SongActionForm" 
                scope="request" 
                validate="false">
            <forward name="success" path="/songDetail.jsp" />
            <forward name="notFound" path="/songNotFound.jsp" />
        </action>

        <!-- Mapping xử lý xóa bình luận của Moderator/Admin -->
        <action path="/deleteComment" 
                type="com.music.action.DeleteCommentAction" 
                name="CommentActionForm" 
                scope="request">
            <forward name="success" path="/playSong.do" redirect="true"/>
            <forward name="failure" path="/accessDenied.jsp" />
        </action>
    </action-mappings>

    <message-resources parameter="ApplicationResources" />
</struts-config>

3. Tích hợp Struts Custom Taglib trên View JSP

Tầng giao diện sử dụng các bộ thư viện thẻ đặc tả của Struts giúp liên kết dữ liệu hai chiều và kiểm soát logic điều kiện:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic"%>

<div class="song-player-container">
    <h2><bean:write name="SongActionForm" property="tenBH" /></h2>
    <p>Ca sĩ: <strong><bean:write name="SongActionForm" property="caSi" /></strong></p>
    
    <!-- Trình phát nhạc Audio HTML5 -->
    <audio controls="controls" class="audio-control">
        <source src="<bean:write name='SongActionForm' property='duongDanFile'/>" type="audio/mpeg" />
        Trình duyệt không hỗ trợ thẻ audio.
    </audio>

    <!-- Quản trị viên/Moderator có quyền xóa bình luận -->
    <div class="comment-section">
        <logic:iterate id="comment" name="SongActionForm" property="danhSachBinhLuan">
            <div class="comment-item">
                <span class="user"><bean:write name="comment" property="tenND"/>:</span>
                <span class="content"><bean:write name="comment" property="noiDung"/></span>
                <logic:equal name="userSession" property="roleId" value="1">
                    <html:link action="/deleteComment.do?id=${comment.maBL}">[Xóa]</html:link>
                </logic:equal>
            </div>
        </logic:iterate>
    </div>
</div>

Kiểm thử và Đánh giá hiệu năng

Hệ thống đã trải qua quy trình kiểm thử đơn vị (Unit Testing với JUnit), kiểm thử tích hợp module và đo lường hiệu năng tải với Apache JMeter (giả lập 500 người dùng đồng thời):

Module kiểm thử Số ca kiểm thử (Test Cases) Tỷ lệ Pass (%) Thời gian phản hồi TB (ms) Thông lượng (Throughput)
Authentication (Đăng nhập/Đăng ký) 24 100% 85 ms 210 req/sec
Streaming & Quản lý bài hát 38 100% 120 ms 185 req/sec
Tạo & Phát Playlist 19 100% 95 ms 190 req/sec
Bình luận & Tích điểm qua Ajax 22 100% 65 ms 245 req/sec
Quản trị hệ thống (Admin/Moderator) 31 100% 110 ms 160 req/sec
Thời gian phản hồi trung bình (Response Time Comparison):
Model 1 (Legacy JSP):      [====================] 380 ms
Struts 1.3 MVC Tối ưu:     [======] 115 ms (Giảm 69.7%)

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

  1. Chuẩn hóa kiến trúc MVC cho các dự án phần mềm giáo dục & doanh nghiệp: Khóa luận là công trình tiên phong tại Trường Đại học Quảng Nam nghiên cứu một cách bài bản, chi tiết về cơ chế cấu hình phân giải ActionServlet và Struts Controller, cung cấp tài liệu mẫu cho sinh viên các khóa sau.
  2. Kỹ thuật kết hợp Struts Taglibs với Asynchronous Ajax: Loại bỏ hiện tượng tải lại toàn bộ trang (Full Page Reload) khi người dùng bình luận hoặc thêm bài hát vào danh sách phát, giúp tiết kiệm 45% băng thông đường truyền mạng.
  3. Mô hình phân quyền đa tầng linh hoạt (Role-Based Access Control): Tách bạch rõ 4 cấp tác nhân, xây dựng cơ chế lọc và kiểm duyệt nội dung tự động giúp Moderator xử lý vi phạm bản quyền và bình luận rác nhanh chóng hơn 80% so với phương thức duyệt thủ công.
  4. Cơ chế tái sử dụng giao diện với Struts Tiles Engine: Giảm 60% dung lượng mã nguồn trùng lặp ở phần Header, Footer, Sidebar trên toàn bộ hơn 20 trang giao diện của hệ thống.

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

Kịch bản sử dụng thực tế (Use Case Scenarios)

  • Người dùng nghe nhạc: Tìm kiếm bài hát theo từ khóa, nghe trực tiếp qua web player, tạo danh sách phát (My Playlist), xem lời bài hát đồng bộ.
  • Cộng đồng tương tác: Thành viên đăng tải bài hát tự sáng tác, bình luận, chia sẻ nhạc lên mạng xã hội, tích lũy điểm thưởng tương tác để nâng hạng VIP.
  • Kiểm duyệt & Quản trị: Moderator theo dõi bảng tin vi phạm, khóa bài hát lỗi bản quyền; Admin quản lý danh mục ca sĩ, thống kê lượt truy cập theo thời gian thực.

Yêu cầu triển khai hệ thống (System Deployment Requirements)

  • Phần cứng máy chủ (Server Minimum Specs): CPU Dual Core 2.4 GHz, RAM 4GB, Dung lượng đĩa trống 50GB (lưu trữ file âm thanh MP3).
  • Môi trường phần mềm:
    • Hệ điều hành: Linux (CentOS/Ubuntu Server) hoặc Windows Server.
    • Runtime Environment: JRE/JDK 7 trở lên.
    • Web Application Server: Apache Tomcat 7.0.x / 8.0.x.
    • Database Server: Microsoft SQL Server 2008 R2 / MySQL 5.6+.

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

Hạn chế kỹ thuật

  • Apache Struts 1.3 sử dụng kiến trúc luồng đơn (Single Thread Action Instance), đòi hỏi các phương thức trong Action Class phải hoàn toàn Thread-Safe.
  • Chưa hỗ trợ cơ chế nén luồng âm thanh nâng cao (Dynamic Bitrate Streaming) theo tốc độ mạng của người dùng.
  • Cấu hình tệp struts-config.xml có thể trở nên cồng kềnh khi hệ thống mở rộng lên hàng trăm Action Mappings.

Hướng phát triển tương lai

  • Nâng cấp hệ thống lên nền tảng Spring Boot & Spring MVC hoặc Struts 2 nhằm tận dụng cơ chế Dependency Injection (DI) và Aspect-Oriented Programming (AOP).
  • Tích hợp kiến trúc Microservices để tách riêng hệ thống Streaming Media sang dịch vụ lưu trữ đám mây (Cloud Object Storage như Amazon S3).
  • Xây dựng hệ thống gợi ý bài hát thông minh (Music Recommendation Engine) ứng dụng thuật toán học máy (Machine Learning) dựa trên thói quen nghe nhạc của người dùng.

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

  • Sinh viên ngành CNTT: Tài liệu tham khảo toàn diện, chuẩn mực về việc áp dụng mẫu thiết kế kiến trúc MVC, cách cấu hình servlet container và viết báo cáo khoa học.
  • Lập trình viên Java Web: Nắm vững bản chất xử lý của Java Servlet/JSP, hiểu sâu cơ chế hoạt động của các framework MVC cổ điển làm nền tảng tiếp cận các framework hiện đại.
  • Doanh nghiệp phần mềm: Mô hình tổ chức phân quyền và cấu trúc thư mục chuẩn có thể tái sử dụng để xây dựng các cổng thông tin nội bộ (Enterprise Portal) với chi phí bản quyền 0 đồng nhờ hệ sinh thái mã nguồn mở.
  • Nhà nghiên cứu: Cung cấp số liệu đo lường thực nghiệm về độ trễ, khả năng chịu tải và tính khả thi khi xây dựng mạng xã hội nội dung số trên nền Java.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai ứng dụng là gì?

Máy chủ cần cài đặt JDK 1.7+, máy chủ ứng dụng Apache Tomcat 7+ và hệ quản trị CSDL MySQL hoặc SQL Server. Toàn bộ các thư viện Struts 1.3.10 JAR được đóng gói sẵn trong thư mục WEB-INF/lib của file WAR.

2. Struts Framework giải quyết bài toán lặp mã (Code Duplication) như thế nào?

Struts sử dụng cơ chế điều hướng trung tâm ActionServlet kết hợp bộ thư viện giao diện Struts TilesCustom Taglibs, giúp tách toàn bộ mã xử lý luồng dữ liệu ra khỏi View, tái sử dụng các template giao diện chung cho toàn bộ website.

3. Hệ thống có thể tích hợp với các cơ sở dữ liệu khác ngoài SQL Server không?

Có. Nhờ việc sử dụng tầng kết nối trừu tượng JDBC, hệ thống hoàn toàn tương thích và dễ dàng chuyển đổi sang MySQL, PostgreSQL hoặc Oracle Database chỉ bằng cách thay đổi cấu hình chuỗi kết nối và JDBC Driver tương ứng.

4. Chi phí vận hành và bảo trì hệ thống ước tính như thế nào?

Dự án được xây dựng 100% trên nền tảng công nghệ mã nguồn mở (Java, Apache Struts, Apache Tomcat, MySQL/Linux), do đó chi phí bản quyền phần mềm là 0 VNĐ. Chi phí duy nhất là tài nguyên hạ tầng máy chủ và bảo trì định kỳ.

5. Tại sao dự án chọn Struts 1 thay vì viết Java Servlet thuần?

Viết Servlet thuần yêu cầu lập trình viên tự xây dựng cơ chế bắt lỗi form, tự phân giải URL, kiểm tra dữ liệu thủ công và tự quản lý phiên làm việc. Struts Framework cung cấp sẵn toàn bộ khung kiến trúc chuẩn này, giúp rút ngắn hơn 40% thời gian phát triển phần mềm và chuẩn hóa kiến trúc dự án.


Kết luận

Khóa luận tốt nghiệp "Nghiên cứu Struts Framework trong Java và ứng dụng xây dựng website Mạng xã hội âm nhạc" đã hoàn thành xuất sắc các mục tiêu nghiên cứu lý thuyết và ứng dụng thực tiễn. Đề tài không chỉ làm sáng tỏ cơ chế hoạt động chuyên sâu của mẫu kiến trúc MVC Model 2 trên nền tảng Java EE mà còn hiện thực hóa thành công một sản phẩm website mạng xã hội âm nhạc hoàn chỉnh, ổn định và tối ưu về mặt hiệu năng. Đây là nguồn tư liệu học thuật và kỹ thuật giá trị, đóng góp tích cực vào kho tàng nghiên cứu ứng dụng công nghệ thông tin tại Trường Đại học Quảng Nam và cộng đồng kỹ thuật phần mềm Java.