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

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" được thực hiện bởi sinh viên Nguyễn Công Chính (MSSV: 2112011002), ngành Công nghệ Thông tin, Trường Đại học Quảng Nam, dưới sự hướng dẫn của ThS. Đỗ Quang Khôi.

Bối cảnh thực tiễn được tác giả nêu rõ xuất phát từ sự phát triển mạnh mẽ của công nghệ thông tin và mạng toàn cầu (World Wide Web). Web đã trở thành phương thức truyền tải thông tin nhanh chóng, kinh tế và hiệu quả, thu hút sự tham gia phát triển của các tập đoàn công nghệ lớn như IBM, Microsoft, Sun Microsystems cùng cộng đồng mã nguồn mở. Nhiều bộ khung phát triển (framework) mã nguồn mở cho nền tảng Java đã ra đời và ứng dụng rộng rãi trong các doanh nghiệp phần mềm tại Việt Nam như Struts, Spring, Hibernate, JSF. Tuy nhiên, tại thời điểm thực hiện đề tài, trong phạm vi nội bộ Trường Đại học Quảng Nam chưa có sinh viên nào đi sâu nghiên cứu và ứng dụng bộ khung Struts Framework vào các đồ án thực tế. Bên cạnh đó, các tài liệu hiện có thường tập trung vào lý thuyết tổng quan mà thiếu các hướng dẫn cấu hình cụ thể một dự án Struts hoàn chỉnh trong môi trường phát triển tích hợp (như Eclipse).

Mục tiêu nghiên cứu của đề tài được xác định gồm 02 nhiệm vụ cụ thể:

  1. Nghiên cứu và nắm vững kiến trúc, nguyên lý hoạt động của Struts 1 Framework trên nền tảng Java Web, qua đó hệ thống hóa tài liệu tham khảo cho người mới học cũng như lập trình viên đang làm việc với Struts.
  2. Ứng dụng Struts 1 Framework để phân tích, thiết kế và xây dựng một hệ thống website nghe nhạc trực tuyến tích hợp các tính năng mạng xã hội.

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Mô hình kiến trúc Struts MVC (Model-View-Controller) trong lập trình web Java sử dụng JSP/Servlet.
  • Phạm vi kỹ thuật: Nghiên cứu và áp dụng các công nghệ lập trình giao diện phía client (HTML, CSS, JavaScript, jQuery, Ajax, Bootstrap) kết hợp các thành phần xử lý phía server của Struts 1 Framework và hệ quản trị cơ sở dữ liệu.

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng trên nền tảng lý thuyết phát triển ứng dụng web phân tầng của Java Enterprise:

  • Nền tảng xử lý phía máy chủ (Server-side): Sử dụng công nghệ Java Servlet và JSP (JavaServer Pages). Luận văn làm rõ cơ chế của hai lớp kế thừa cốt lõi là GenericServlet (xử lý giao thức tổng quát) và HttpServlet (chuyên biệt cho giao thức HTTP với các phương thức doGet, doPost, doPut, doDelete), cùng hai đối tượng ngữ cảnh HttpServletRequest và HttpServletResponse.
  • Mô hình kiến trúc phần mềm: Phân tích sự chuyển dịch từ kiến trúc Model 1 (trộn lẫn logic nghiệp vụ và hiển thị trong JSP/Servlet, gây trùng lặp mã và khó bảo trì) sang kiến trúc Model 2 (MVC). Trong mô hình MVC, Controller tiếp nhận yêu cầu điều hướng, Model đảm nhận tương tác dữ liệu và logic nghiệp vụ, còn View nhận dữ liệu kết xuất giao diện.
  • Khung công nghệ Struts 1 Framework: Được phát triển bởi Craig McClanahan và tài trợ bởi Apache Jakarta. Kiến trúc cốt lõi bao gồm bộ điều khiển trung tâm ActionServlet, các lớp điều phối nghiệp vụ kế thừa từ Action, các lớp ánh xạ dữ liệu biểu mẫu ActionForm, cùng các bộ công cụ mở rộng:
    • Thư viện thẻ JSP Struts: Cung cấp 4 bộ thẻ chuyên dụng gồm html (sinh biểu mẫu tương tác với Struts API), bean (thao tác với JavaBean), logic (xử lý rẽ nhánh và điều kiện lặp), và nested (hỗ trợ lồng ghép dữ liệu phân cấp).
    • Plugin mở rộng: Tiles (quản lý bố cục mẫu giao diện) và Validator (hỗ trợ kiểm tra tính hợp lệ của dữ liệu trên cả client và server).

Phương pháp nghiên cứu được tác giả áp dụng bao gồm:

  1. Phương pháp thu thập và tổng hợp tài liệu: Nghiên cứu giáo trình, bài báo khoa học, tài liệu kỹ thuật chuyên ngành và tài liệu hướng dẫn trực tuyến về Java Web và Struts.
  2. Phương pháp phân tích và tổng hợp lý thuyết: Đánh giá, đối sánh các công nghệ web, vòng đời của Servlet/JSP và cơ chế chuyển tiếp yêu cầu trong Struts.
  3. Phương pháp phân tích và thiết kế hệ thống: Sử dụng ngôn ngữ mô hình hóa hợp nhất (UML) để xây dựng biểu đồ ca sử dụng (Use Case), biểu đồ hoạt động (Activity Diagram), biểu đồ thành phần (Component Diagram), biểu đồ triển khai (Deployment Diagram) và thiết kế lược đồ cơ sở dữ liệu quan hệ.

Nguồn dữ liệu của đề tài bao gồm các đặc tả công nghệ chính thức của Sun Microsystems / Apache Software Foundation và dữ liệu kiểm thử chức năng được xây dựng trong môi trường phát triển tại FPT Software Đà Nẵng.

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

Hệ thống "Website Mạng xã hội âm nhạc" được thiết kế phân quyền rõ ràng theo 4 nhóm tác nhân (Actors) với các chức năng tương ứng:

Tác nhân Mô tả vai trò và chức năng chính
Người quản lý (Admin) Điều hành và quản lý toàn bộ hệ thống website; quản trị tài khoản, kiểm duyệt dữ liệu toàn cục.
Người điều hành (Moderator) Duy trì trật tự và an ninh mạng xã hội; thực hiện khóa tài khoản vi phạm, xóa bình luận không phù hợp và quản lý bài viết.
Thành viên (Member) Người dùng có tài khoản: Đăng nhập/đăng xuất, xem và chỉnh sửa thông tin cá nhân, tải (upload) bài hát, tạo/sửa/xóa album cá nhân, chia sẻ bài hát, quản lý bình luận cá nhân, tích lũy điểm thưởng.
Người dùng chung (Guest) Khách truy cập chưa đăng nhập: Xem trang chủ, nghe nhạc trực tuyến, tìm kiếm bài hát/nghệ sĩ, đọc bình luận và đăng ký tài khoản thành viên.

Về mặt cấu hình triển khai dự án Struts 1 trên nền tảng Java Web, tác giả thiết lập tập tin cấu hình triển khai web.xml nhằm đăng ký servlet điều khiển trung tâm và định tuyến các yêu cầu có đuôi *.do:

<web-app id="struts-demo" version="2.4" xmlns="http://java.com/xml/ns/j2ee"
  xmlns:xsi="http://www.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.com/xml/ns/j2ee http://java.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Struts Demo</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>

Tập tin struts-config.xml đóng vai trò định tuyến luồng xử lý giữa các lớp Action và các trang JSP:

<?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-beans>
  <global-forwards>
    <forward name="howdy" path="/myStart.do" />
  </global-forwards>
  <action-mappings>
    <action path="/myStart" forward="/start.jsp" />
    <action path="/myTest" type="test.TestAction">
      <forward name="success" path="/success.jsp" />
      <forward name="failure" path="/failure.jsp" />
    </action>
  </action-mappings>
  <message-resources parameter="StrutsDemoResources" />
</struts-config>

Khai báo các thư viện thẻ chuẩn của Struts trên giao diện JSP:

<%@ taglib uri="http://struts.org/tags-bean" prefix="bean"%>
<%@ taglib uri="http://struts.org/tags-html" prefix="html"%>
<%@ taglib uri="http://struts.org/tags-logic" prefix="logic"%>
<%@ taglib uri="http://struts.org/tags-nested" prefix="nested"%>

Các mô-đun chức năng nghiệp vụ trọng tâm của website được đặc tả chi tiết:

Tên mô-đun Thành phần dữ liệu giao diện Thuộc tính / Kiểu Hành động (Actions) & Phản hồi
Xóa bình luận - Song name
- Playlist Name
- Your comment
- Member info
- Older comment
- BaiHat.TenBH (String)
- Playlist.TenPL (String)
- BinhLuan.noiDung (String)
- Thông tin tài khoản
- Danh sách bình luận cũ
- Submit: Thêm bình luận mới.
- Delete: Xóa bình luận.
- Success: Thông báo "Đã xóa bình luận".
- Failure: Thông báo "Thao tác thất bại, vui lòng làm lại".
Nghe một bài hát - Song name
- Playlist Name
- Your comment
- Member info
- Recommend Comment
- Older comment
- BaiHat.TenBH (String)
- Playlist.TenPL (String)
- BinhLuan.noiDung (String max)
- Thông tin tài khoản
- Nhập nội dung bình luận
- Bình luận đã đăng
- Play: Bắt đầu phát bài hát.
- Pause/Play: Tạm dừng/tiếp tục phát.
- Lyric: Hiển thị lời bài hát.
- Download: Tải tập tin âm nhạc.
- Submit: Đăng bình luận.
Chạy một playlist - Tên thành viên
- Playlist Name
- Mô tả playlist
- Member info
- Older comment
- Bình luận
- ThanhVien.HoTen (String)
- Playlist.TenPL (String)
- Playlist.MoTa (String max)
- Thông tin tài khoản
- Bình luận đã đăng
- BinhLuan.NoiDung (String)
- Play: Phát toàn bộ danh sách nhạc.
- Pause/Play: Tạm dừng/tiếp tục phát.
- Lyric: Xem lời bài hát đang phát.
- Download: Tải nhạc.
- Submit: Gửi bình luận cho playlist.

Nội dung chính theo từng chương

Chương 1: Tổng quan về lập trình web

Chương 1 trình bày lịch sử hình thành của World Wide Web từ mốc ngày 06/08/1991 khi mã nguồn WWW được công bố trên diễn đàn alt.hypertext bởi Tim Berners-Lee và Jeff Groff. Tác giả phân tích sự cạnh tranh giữa WWW và công nghệ Gopher của Đại học Minnesota, bước ngoặt thương mại hóa năm 1993 khi Gopher thu phí và sự ra đời của trình duyệt Mosaic bởi Marc Andreessen, dẫn đến sự bùng nổ vượt trội của lưu lượng web từ cuối năm 1994.

Chương này cũng tổng hợp bức tranh công nghệ web đa tầng:

  • Công nghệ phía Client: HTML (từ HTML 4, XHTML đến định hướng HTML5), CSS, JavaScript (chuẩn hóa bởi ECMA theo đặc tả ECMAScript), Ajax (kết hợp XMLHttpRequest với DOM để trao đổi dữ liệu không đồng bộ), jQuery (thư viện JavaScript phát hành năm 2006 bởi John Resig, chiếm hơn 52% trong top 10.000 website lớn), Flash và Microsoft Silverlight.
  • Công nghệ phía Server: Phân tích cơ chế hoạt động, ưu và nhược điểm của các giải pháp từ sơ khai đến hiện đại, bao gồm CGI (Common Gateway Interface), Java Applet, ASP (Active Server Pages của Microsoft), PHP (Hypertext Preprocessor), ColdFusion, Groovy/Grails, Perl, Python, Ruby, Server-side JavaScript (SSJS) và .NET Framework.

Chương 2: Phát triển website trên nền tảng Java và Struts Framework

Chương 2 đi sâu vào cấu trúc nội tại của các ứng dụng web xây dựng bằng ngôn ngữ Java:

  • Cơ chế Servlet: Trình bày chi tiết vòng đời của một Servlet qua 4 giai đoạn nối tiếp: khởi tạo qua phương thức init(), xử lý yêu cầu qua phương thức service() (điều phối đến doGet, doPost...), hủy qua destroy(), và giải phóng bộ nhớ bởi Garbage Collector của máy ảo JVM.
  • Cơ chế JSP: Phân tích bản chất của JSP là bộ tiền xử lý văn lệnh (Java Scripting Preprocessor). Vòng đời JSP trải qua 5 bước: biên dịch trang sang mã nguồn Servlet (.java) và tạo mã byte (.class), nạp trang vào bộ nhớ, khởi tạo qua jspInit(), thực thi xử lý qua phương thức _jspService(), và dọn dẹp giải phóng vùng nhớ qua jspDestroy().
  • Kiến trúc Model 1 so với Model 2 (MVC): So sánh sự hạn chế của Model 1 (thắt chặt logic và giao diện, khó tái sử dụng) với ưu thế của Model 2 (tách bạch rõ ràng giữa Model - View - Controller).
  • Bộ khung Struts 1: Giới thiệu kiến trúc framework do Apache Jakarta quản lý, mô tả luồng xử lý tuần tự: trình duyệt gửi yêu cầu *.do -> ActionServlet tiếp nhận -> điều hướng đến lớp con của Action tương ứng -> tương tác với các đối tượng Model (JavaBean, EJB hoặc Webservices) -> đóng gói dữ liệu vào ActionForm -> chuyển tiếp (forward) kết quả hiển thị sang trang JSP (View). Chương kết thúc bằng hướng dẫn chi tiết cách cấu hình tập tin web.xml và struts-config.xml.

Chương 3: Xây dựng website Mạng xã hội âm nhạc

Chương 3 tập trung vào quy trình thiết kế và hiện thực hóa sản phẩm phần mềm:

  • Đặc tả yêu cầu và mô hình hóa UML: Xác định 4 nhóm tác nhân (Admin, Moderator, Thành viên, Người dùng chung), xây dựng biểu đồ ca sử dụng tổng quát của hệ thống và biểu đồ ca sử dụng chi tiết cho từng tác nhân. Mô hình hóa luồng nghiệp vụ thông qua các biểu đồ hoạt động (Activity Diagram).
  • Thiết kế cơ sở dữ liệu: Xây dựng sơ đồ quan hệ thực thể (ERD) thể hiện liên kết giữa các bảng dữ liệu lưu trữ tài khoản, phân quyền, bài hát (BaiHat), danh sách phát (Playlist), bình luận (BinhLuan), album và lịch sử tích điểm.
  • Thiết kế mô-đun và giao diện: Đặc tả chi tiết cấu trúc dữ liệu đầu vào/đầu ra và các hành vi (Action) của các phân hệ chức năng: đăng ký, đăng nhập, quên mật khẩu, trang quản trị của Admin, quản lý bài hát, nghe nhạc theo playlist, trang cá nhân và trang tích điểm thành viên.
  • Kiến trúc hệ thống: Trình bày mô hình triển khai phần mềm thông qua biểu đồ thành phần (Component Diagram) và biểu đồ triển khai (Deployment Diagram) trên máy chủ web hỗ trợ Java Container.

Kết quả và đóng góp

Khóa luận đã hoàn thành các kết quả cụ thể sau:

  • Kết quả kỹ thuật: Xây dựng thành công một website mạng xã hội âm nhạc hoàn chỉnh dựa trên Struts 1 Framework và ngôn ngữ Java. Hệ thống đáp ứng đầy đủ các chức năng phân quyền cho 4 nhóm người dùng, quản lý phát nhạc trực tuyến, phát danh sách nhạc (playlist), quản lý tương tác mạng xã hội (bình luận, chia sẻ, tích điểm thành viên) và phân hệ quản trị nội dung.
  • Hệ thống hóa kiến thức: Cung cấp tài liệu tổng quan và chi tiết về lịch sử phát triển công nghệ web, vòng đời hoạt động của Servlet/JSP, cùng hướng dẫn thực hành cấu hình dự án Struts 1 trên môi trường phát triển (Eclipse/NetBeans) và máy chủ Java Web.
  • Đóng góp so với các nghiên cứu trước: Khóa luận là công trình đầu tiên tại Khoa Công nghệ Thông tin - Trường Đại học Quảng Nam nghiên cứu và ứng dụng toàn diện bộ khung Struts Framework trong Java vào việc xây dựng một sản phẩm phần mềm thực tế, kết hợp giải quyết bài toán cấu hình dự án rõ ràng vốn ít được các tài liệu lý thuyết trước đây đề cập chi tiết.

Hạn chế và hướng nghiên cứu tiếp

  • Hạn chế: Nghiên cứu tập trung chuyên sâu vào Struts phiên bản 1 (Struts 1.x), sử dụng cách thức cấu hình thủ công qua tập tin XML truyền thống và thư viện struts-config.xml. Đề tài chưa mở rộng so sánh hiệu năng trực tiếp với các framework Java Web hiện đại hơn hoặc các phiên bản Struts nâng cao.
  • Hướng nghiên cứu tiếp: Văn bản đề cập khả năng áp dụng công cụ quản lý dự án tự động (như Apache Maven) để tự động hóa việc tích hợp thư viện, đồng thời mở rộng nghiên cứu và nâng cấp ứng dụng lên các framework Java tiên tiến như Struts 2, Spring MVC, JavaServer Faces (JSF) hoặc tích hợp các tầng lưu trữ dữ liệu chuyên sâu như Hibernate.

Giá trị tham khảo

Khóa luận là nguồn tài liệu hữu ích cho:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm: Dùng làm tài liệu tham khảo khi làm quen với lập trình web Java phân tầng, tìm hiểu mô hình MVC thực tế và cách tổ chức một đồ án tốt nghiệp xây dựng phần mềm theo chuẩn công nghệ phần mềm.
  • Lập trình viên và người nghiên cứu Java Web: Cung cấp tài liệu tham khảo chi tiết về cơ chế vòng đời của Servlet/JSP, cách cấu hình bộ khung Struts 1 (web.xml, struts-config.xml), cách sử dụng bộ thẻ Struts Taglibs (bean, html, logic, nested) và quy trình thiết kế hệ thống tương tác đa người dùng bằng biểu đồ UML.

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

1. Điểm khác biệt cốt lõi giữa kiến trúc Model 1 và Model 2 (MVC) trong Java Web được tác giả phân tích là gì?
Trong Model 1, toàn bộ việc tiếp nhận yêu cầu, xác thực tính hợp lệ, xử lý nghiệp vụ và kết xuất giao diện đều gom chung vào Servlet hoặc trang JSP, dẫn đến tình trạng lặp lại mã nguồn và gắn kết quá chặt giữa giao diện và nghiệp vụ. Trong khi đó, Model 2 (MVC) phân tách hoàn toàn các tầng: một Servlet trung tâm (ActionServlet/Controller) tiếp nhận mọi yêu cầu, xử lý và làm việc với tầng Model để chuẩn bị dữ liệu, sau đó chuyển hướng sang trang JSP (View) để sinh phản hồi, giúp tăng khả năng tái sử dụng mã nguồn và hỗ trợ đa dạng giao diện (Web, Wireless, GUI).

2. Quá trình xử lý một yêu cầu (Request Lifecycle) trong Struts Framework diễn ra theo trình tự nào?
Trình tự gồm 4 bước: (1) Trình duyệt gửi yêu cầu (định dạng *.do) đến ứng dụng; (2) Bộ điều khiển trung tâm ActionServlet tiếp nhận yêu cầu; (3) ActionServlet chuyển tiếp đến lớp con của Action thích hợp để tương tác với thành phần Model (JavaBean, EJB) và chuẩn bị dữ liệu hiển thị; (4) Action chuyển quyền điều khiển tới trang JSP (View) để kết xuất mã HTML trả về cho trình duyệt.

3. Vòng đời của một trang JSP gồm những giai đoạn nào theo mô tả trong khóa luận?
Chu trình sống của trang JSP gồm 5 giai đoạn: Biên dịch trang (chuyển đổi .jsp thành mã nguồn Servlet .java và biên dịch ra .class), nạp trang vào bộ nhớ của máy chủ, khởi tạo trang thông qua phương thức jspInit(), thực thi xử lý yêu cầu và tạo phản hồi qua phương thức _jspService(), và dọn dẹp giải phóng tài nguyên bộ nhớ thông qua phương thức jspDestroy().

4. Hệ thống website Mạng xã hội âm nhạc phân quyền cho những tác nhân nào và tác nhân Moderator có quyền hạn gì?
Hệ thống phân quyền cho 4 tác nhân: Người quản lý (Admin), Người điều hành (Moderator), Thành viên (ThanhVien), và Người dùng chung (NguoiDungChung). Trong đó, tác nhân Moderator chịu trách nhiệm duy trì an ninh trật tự của mạng xã hội, bao gồm 3 chức năng chính: khóa tài khoản thành viên vi phạm, xóa bình luận không phù hợp và quản lý bài viết.

Kết luận

Khóa luận tốt nghiệp của sinh viên Nguyễn Công Chính đã hệ thống hóa đầy đủ cơ sở lý thuyết về lập trình web trên nền tảng Java, làm rõ nguyên lý kiến trúc Model 2 và cơ chế hoạt động của bộ khung Struts 1 Framework. Đề tài đã ứng dụng thành công các kiến thức nghiên cứu vào việc phân tích, thiết kế và xây dựng hoàn chỉnh hệ thống "Website Mạng xã hội âm nhạc" với đầy đủ các mô hình UML, cấu trúc cơ sở dữ liệu và các chức năng phân quyền nghiệp vụ. Đây là công trình đầu tiên tại Trường Đại học Quảng Nam nghiên cứu ứng dụng Struts Framework, mang lại giá trị tham khảo thực tế cho việc học tập và phát triển ứng dụng Java Web.