1. TRƯỜNG ĐẠI HỌC AN GIANG
KHOA KỸ THUẬT – CÔNG NGHỆ - MÔI TRƯỜNG
Sinh viên: Nguyễn Thiện An – DH114081
GVHD: Th.S Huỳnh Lý Thanh Nhàn
BÁO CÁO KHÓA LUẬN TỐT NGHIỆP
Đề tài: TÌM HIỂU FRAMEWORK SPRING
VÀ XÂY DỰNG ỨNG DỤNG QUẢN LÝ NHẠC PHÍA CLIENT
2. Nội dung
• Lý do thực hiện đề tài
• Cơ sở lý thuyết:
• Spring framework
• AngularJS
• Cài đặt ứng dụng
• Kết luận
2
3. Lý do thực hiện đề tài
- 16.2% dự án là hoàn thành đúng hạn và nằm trong giới
hạn ngân sách.
- Và hơn 83.8% dự án thất bại hoặc không đáp ứng được
những yêu cầu ban đầu
Do các thành phần quá phụ thuộc lẫn nhau, chồng
chéo, không có tính sử dụng lại.
- Ngoài ra chi phí cho việc bảo trì và mở rộng hệ thống
luôn lớn hơn nhiều lần so với các pha khác. 3
3 3
5
7
15
67
Xác định yêu cầu Đặt tả Thiết kế
Lập trình Kiểm thử Bảo trì
4. Lý do thực hiện đề tài (tt)
- Hầu hết các hệ thống đều được phát triển trên
nền web.
- Công nghệ di động đang ngày càng trở nên phổ
biến, số lượng người sử dụng và truy cập qua các
thiết bị di động tăng một cách nhanh chóng.
4
=> Do đó chúng tôi thực hiện đề tài “Tìm hiểu Framework Spring và xây dựng
ứng dụng quản lý nhạc phía client”.
5. Spring framework
5
- Là framework Java mã nguồn mở
được sử dụng nhiều nhất hiện nay.
- Spring có cách tạo và liên kết các
thành phần rất riêng và hữu ích nhờ
vào IoC container và Dependencies
Injection (DI).
- Được giới thương mại công nhận
như một framework có tầm quan
trọng trong chiến lược kiến tạo phần
mềm
6. Spring framework (tt)
6
Spring được sử dụng rộng rãi nhờ:
- Đơn giản: Spring framework thực sự rất đơn giản vì nó áp dụng mô hình
POJO (Plain Old Java Objects) và POJI (Plain Old Java Interfaces).
- Dễ dàng kiểm soát lỗi: Môi trường giả lập đơn giản. Có thể sử dụng
Console để kiểm thử các thành phần riêng lẽ.
- Ít phụ thuộc: Trong Spring các đối tượng ít phụ thuộc lẫn nhau, đây là vấn
đề cốt lõi của Spring framework -> dễ sửa đổi, nâng cấp bảo trì.
7. Spring MVC
7
- Spring MVC cung cấp kiến trúc
Model – View - Controller và các
components sẵn có để sử dụng và
phát triển ứng dụng web một cách
nhanh chóng và linh hoạt.
- Spring MVC được thiết kế xung
quanh Dispatcher Servlet để xử lý tất
cả các HTTP request và HTTP
response.
8. Spring MVC (tt)
8
Mô hình MVC là kết quả của việc tách các khía cạnh khác nhau của ứng dụng (logic
đầu vào, các xử lý logic, UI) trong khi đó cung cấp một sự kết hợp giữa các thành
phần đó một cách “lỏng lẻo”.
- Model: đóng gói dữ liệu ứng dụng và bao gồm các POJO.
- View: Chịu trách nhiệm nhận giá trị của model và vẽ ra trang HTML mà trình
duyệt có thể hiển thị được.
- Controller: Chịu trách nhiệm nhận và xử lý các yêu cầu từ người dùng và tạo các
model phù hợp và trả về cho view
10. Spring Security
10
- Spring Security cung cấp các giải pháp để bảo vệ một ứng dụng được phát triển
bằng Spring framework.
- Thực hiện 2 nhiệm vụ chính của việc bảo mật ứng dụng là "xác thực"
(authentication) và "ủy quyền" (authorization) hay "kiểm soát truy cập" (access -
Scontrol)
• Xác thực là quá trình xác nhận và chứng thực một principal.
• Uỷ quyền đề cập đến quá trình quyết định có một principal được phép thực
hiện những hành động gì trong phạm vi ứng dụng của chúng ta.
12. AngularJS
12
Ngày nay các ứng
dụng web hiện đại
thường được xây
dựng như một Single
Page Application (SPA)
và AngularJS là một
framework tuyệt vời
để xây dựng 1 SPA
14. AngularJS (tt)
14
Đối với Angular, View sẽ là DOM, Controller là các hàm JavaScript, còn Model sẽ là
dữ liệu được lưu ở thuộc tính của các đối tượng trong JavaScript.
MVC giúp chúng ta tách ứng dụng thành 3 thành phần khác nhau. Model (xử lý, truy
xuất database), View (giao diện) và Controller (điều hướng yêu cầu từ người dùng)
16. AngularJS (tt)
16
Directives thực sự là đặc điểm tạo nên một khoảng cách lớn giữa Angular và bất kỳ
framework JavaScript khác.
Directives đề cập đến một tính năng để mở rộng HTML, việc dùng directive sẽ giảm
thiểu được số lượng thẻ HTML, code HTML nhìn sẽ gọn gàng và sáng sủa hơn.
Directtive không chỉ giới hạn một phần tử HTML mà còn có thể là thuộc tính, lớp
hoặc các chú thích HTML. AngularJS cung cấp cho chúng ta 3 loại directive:
• Directive dạng element (một thẻ HTML) viết tắt là E
• Directive dạng attribute (thuộc tính của một thẻ HTML) viết tắt là A
• Directive dạng class(class CSS) viết tắt là C
17. Cài đặt ứng dụng
17
Mô hình ứng dụng Music Manager
18. Cài đặt ứng dụng (tt)
18
Module Client và Module Server của ứng dụng
21. Cài đặt ứng dụng (tt)
21Response cho request update 1 bài hát
22. Cài đặt ứng dụng (tt)
22Giao diện chương trình
23. Kết quả đạt được
23
Về mặt lý thuyết:
- Nắm được kiến trúc tổng quan của Spring Framework cũng như các nguyên lý cơ
bản và cơ chế hoạt động của framework này.
- Nắm được mô hình web MVC trong Spring framework và các cơ chế để bảo mật
một ứng dụng web được hỗ trợ trong module Spring Security.
- Hiểu cơ chế giao tiếp giữa client và server trong mô hình web hiện đại theo hướng
RESTful service; cách giao tiếp giữa các thành phần của một hệ thống hoặc giữa các
hệ thống với nhau thông qua mô hình Messaging system.
24. Kết quả đạt được (tt)
24
Về mặt ứng dụng:
- Thiết kế và cài đặt được ứng dụng web với mô hình web server và data server tách
biệt nhau, giao tiếp với nhau thông qua ActiveMQ.
- Xây dựng được ứng dụng web dạng SPA mà việc giao tiếp với server thông qua
RESTful service với sự hỗ trợ của AngularJS.
- Thiết kế giao diện người dùng với HTM5 và Bootstrap có hỗ trợ responsive.
- Xây dựng thành công ứng dụng quản lý nhạc với đầy đủ các chức năng cơ bản.
- Xây dựng thành công một ứng dụng quản lý nhạc trên nền web có áp dụng các
công nghệ mới trong quá trình phát triển một ứng dụng Web enterprise hiện đại.
25. Hạn chế và khó khăn
25
Các chức năng cơ bản của ứng dụng đã hoàn thành tốt, tuy nhiên do yêu cầu và
phạm vi đề tài chỉ dừng lại ở mức demo công nghệ nên ứng dụng chưa hấp dẫn.
Hạn chế về vật chất, không có host trên internet có cài đặt đầy đủ các phần mềm
cần thiết tạo khó khăn trong việc thực hiện demo chương trình trên internet. Vấn đề
triển khai những công nghệ nêu trên không khó về mặt kỹ thuật nhưng phải xây
dựng một cơ sở hạ tầng đầy đủ và tốt để có thể thực thi ứng dụng
26. Hướng phát triển
26
Tiếp tục tìm hiểu về một số cơ chế xác thực và phân quyền trong module Spring
Security như cơ chế xác thực Oauth, Oauth2, OpenID,… để xây dựng ứng dụng với
cơ chế bảo mật hơn.
Bên cạnh đó tiếp tục tìm hiểu các module còn lại của Spring Framework như Spring
AOP nhằm tích hợp vào hệ thống để thực hiện một số chức năng đặc biệt như ghi
log người dùng.
Tìm hiểu về web socket và kết hợp với AngularJS để hướng đến việc xây dựng một
ứng dụng web động với thời gian thực.
27. Cám ơn quý thầy
cô và các bạn đã
lắng nghe.
27
Notas do Editor
Trong một khảo sát với khoảng 8.000 dự án phần mềm, Standish Group cho biết có chỉ có:
Bên cạnh đó chi phí cho việc bảo trì và mở rộng hệ thống luôn lớn hơn nhiều lần so với các pha khác trong quy trình phát triển một hệ thống
=> Vì vậy trong quy trình phát triển phần mềm hiện đại, xây dựng và phát triển một hệ thống bao giờ cũng đặt việc tạo ra các thành phần riêng rẽ độc lập, có sự phân biệt rõ ràng về trách nhiệm, có tính sử dụng lại cao lên làm ưu tiên hàng đầu. Bởi vì một khi đã tạo ra các thành phần như vậy, chúng ta sẽ tiết kiệm được rất nhiều thời gian và công sức trong quá trình bảo trì và mở rộng hệ thống sau này
Bởi vì các ứng dụng web đem lại khả năng phát triển và triển khai sản phẩm nhanh chóng, giảm thời gian đưa sản phẩm ra thị trường, có khả năng cập nhật tính năng liên tục hàng ngày
Ứng dụng web có thời gian phát triển nhanh, với chi phí phát triển và triển khai thấp, tin cậy, có thể truy cập từ bất cứ đâu, mọi người có thể sử dụng mà không mất thời gian tìm hiểu nhờ giao diện trực quan
Xu hướng thiết kế và viết các ứng dụng thích hợp với các thiết bị di động đang trở thành một xu hướng tất yếu
1. Sau khi nhận một HTTP request, DispatcherServlet gửi yêu cầu đến HandlerMapping (một bản đồ cấu hình URL) để xác định controller nào sẽ xử lý yêu cầu này.
2. Controller sẽ nhận các request và gọi các phương thức dịch vụ (service methods) phù hợp dựa trên việc sử dụng các method GET/POST… Nếu yêu cầu đó cần truy xuất cơ sở dữ liệu thì Controller sẽ ủy nhiệm cho một business logic hay nhiều hơn một model để lấy thông tin và gửi dữ liệu về cho Controller. Lúc này Controller đóng gói mô hình dữ liệu và tên của một view sẽ được tải lên thành đối tượng ModelAndView và gửi trả về cho DispathcherServlet
3. DispatcherServlet gửi gói ModelAndView cho ViewResolver để tìm xem view (thông thường là một trang JSP, HTML) nào sẽ được load lên.
4. Sau khi hoàn tất, DispatcherServlet sẽ chuyển dữ liệu từ model đến view và cuối cùng hiển thị trên trình duyệt
Một principal thường có nghĩa là một người sử dụng, thiết bị hoặc một số hệ thống khác mà có thể thực hiện một hành động trong ứng dụng.
Để được ủy quyền thì quá trình xác thực là cần thiết và phải được thực hiện trước, ủy quyền chỉ được thực hiện khi xác thực thành công.
Đây là những khái niệm rất phổ biến cho hầu hết các ứng dụng và nó không phải là riêng của Spring Security
- Cơ chế này cũng được áp dụng trong Music Manager
Một SPA là một ứng dụng web hiển thị vừa vặn trên một mặt của trang với mục đích giúp người dùng có trải nghiệm giống như đang dùng ứng dụng trên desktop và làm tăng hiệu suất của ứng dụng. Hay nói một cách khác là ứng dụng chạy bên trong trình duyệt mà không yêu cầu phải tải lại toàn bộ trang web mỗi lần sử dụng.
Những đặc trưng nổi bật của AngularJS: kiến trúc MVC, Two-way binding, Templates, Expressions, Modules, Scopes, Dependency injection, Directives, Routing, Services, Filters, Form validation, Testing,…
Two-way binding cùng với Directive là hai trong những đặc trưng nổi bật mang lại sức mạnh cho AngularJS
Khi làm việc với các mô hình MVC framework khác chúng ta sẽ rơi vào trường hợp model và view chỉ được ghép với nhau một lần duy nhất, vì vậy mọi sự cập nhật dữ liệu từ một trong hai lớp đó đều không liên quan gì đến lớp còn lại. Hệ quả là developer phải viết thêm phần “đồng bộ hóa” giữa hai lớp này. Đó chính là one-way binding
Two-way binding trong AngularJS là tính năng đồng bộ hóa giữa model và view. Quá trình đồng bộ luôn xảy ra giữa model và view. Mọi sự thay đổi dữ liệu trong lớp này, ngay lập tức được cập nhật vào lớp kia [7, 11]. Chúng ta chỉ cần “bind” một lần, và mọi thứ hoạt động trơn tru
Cũng vì dữ liệu mà view hiển thị thực chất là sự ánh xạ từ model, nên controller cũng hoàn toàn không cần các thao tác data binding phức tạp và phụ thuộc vào cấu trúc DOM của view, kết quả là controller sẽ không quan tâm xem view của chúng ta là gì. Và dĩ nhiên, logic giữa controller và view được bóc tách rất rõ ràng. Code của chúng ta sẽ rất dễ để debug, viết unit-test
Nhằm mục đích áp dụng các lý thuyết cũng như các kỹ thuật đã nêu ở phần trên, chúng tôi sẽ phân tích và cài đặt một ứng dụng quản lý nhạc trên nền web.
Ứng dụng được xây dựng theo mô hình sau
Chúng tôi sẽ chia ứng dụng thành 2 module lớn: Module server và module client.
- Module server sẽ chịu trách nhiệm tương tác với database.
Module client bao gồm việc xây dựng các API dưới dạng RESTful web service. HTML, CSS, Bootstrap và AngularJS sẽ được sử dụng để thiết kế giao diện và lập trình phía front-end. Phía back-end sẽ sử dụng Spring framework bao gồm Spring MVC để cài đặt các API RESTful service, Spring Security để xác thực và phân quyền người dùng và Camel Client được sử dụng để giao tiếp với database server thông qua ActiveMQ.
Việc giao tiếp qua lại giữa client và server sẽ được cài đặt theo mô hình một Messaging System
Luồng thực thi của ứng dụng
Trong một hệ thống gửi nhận thông điệp thì cấu trúc của message là rất quan trọng. Để giao tiếp với nhau các thành phần của hệ thống phải hiểu được cấu trúc của message, vì vậy cấu trúc của nó thường được các thành phần thống nhất với nhau ngay từ khi bắt đầu xây dựng hệ thống. Việc thiết kế message phải đảm bảo được tính mềm dẻo và dễ dàng mở rộng của hệ thống.
Nếu request của client cần phải thao tác với CSDL thì một message sẽ được controller build và chuyển nó cho producer để gửi nó lên MOM. Module server sẽ chịu trách nhiệm xử lý message này và kết quả sau khi xử lý xong sẽ được gửi lại cho producer đã gửi lên
Về mô hình gửi nhận message, message trong hệ thống sẽ được cài đặt theo mô hình point – to – point vì mô hình này có sự đảm bảo chặt chẽ về việc một message thì chỉ được xử lý một lần, điều này là phù hợp với ứng dụng của chúng ta