Hệ thống quản lý việc làm được tạo ra nhằm mục đích quản lý những công việc được tuyển dụng, ứng tuyển một cách dễ sử dụng, dễ quản lý . Hệ thống sẽ bao gồm các chức năng như đăng tin tuyển dụng, tìm kiếm việc làm theo nhiều tiêu chí, ứng tuyển, xem thống kê qua từng năm, xác nhận những nhà tuyển dụng. Nhà tuyển dụng cũng có thể xem được những đánh giá mà ứng viên đã bình luận trước đó. Người dùng trong quyền nhà tuyển dụng có thể sử dụng chức năng đăng tin tuyển dụng bằng cách điền thông tin ứng tuyển lên và những yêu cầu trong việc tuyển dụng đó. Nhà tuyển dụng còn có thể xem thông tin của các ứng viên khác. Khi đăng ký người dùng thì sẽ điền đầy đủ thông tin hồ sơ của mình. Sau khi đăng ký người dùng trong quyền ứng viên có thể cập nhật hồ sơ thông tin cá nhân của mình, tìm kiếm việc làm theo nhiều thiêu chí, tìm kiếm tên công việc muốn ứng tuyển và nộp đơn ứng tuyển. Ngoài ra, người dùng ứng viên còn có thể xem và đánh giá các nhà tuyển dụng mà họ muốn. Ứng viên khi vào sẽ thấy các công việc được hiển thị theo ngày mới nhất của hiện tại. Người dùng trong quyền Quản trị có quyền xem biểu đồ thống kê các đơn ứng tuyển qua các năm theo từng ngành nghề mà ứng viên đã chọn hoặc xác thực quyền của nhà tuyển dụng để nhà tuyển dụng có thể đăng bài tuyển dụng lên trang tìm việc làm. Đồ án này sẽ giúp cho việc quản lý việc làm trở nên hiệu quả hơn, tiết kiệm thời gian và tăng sự tương tác giữa Quản trị và nhà tuyển dụng,ứng viên.
Trang 1BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH
<PHẠM ANH PHÁT>
<HỆ THỐNG QUẢN LÝ VIỆC LÀM>
ĐỒ ÁN NGÀNH NGÀNH <CÔNG NGHỆ THÔNG TIN>
TP HỒ CHÍ MINH, <2023>
Trang 2BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC MỞ THÀNH PHỐ HỒ CHÍ MINH
Giảng viên hướng dẫn: <Dương Hữu Thành>
Trang 3LỜI CẢM ƠN
Trong quá trình thực hiện môn học đồ án này, em đã nhận được rất nhiều sự giúp đỡ
từ thầy cô trong khoa Công nghệ thông tin của Trường Đại học Mở thành phố Hồ ChíMinh Em xin giành lời cảm ơn chân thành nhất đến với giảng viên hướng dẫn Thạc SĩDương Hữu Thành đã giành thời gian để giải đáp những thắc mắc, vướng mắc trongbài tập của em Ngoài ra, thầy còn hết mình hỗ trợ em trong việc tìm kiếm, khắc phục,sửa chữa những lỗi lầm và vấn đề mà em mắc phải trong lúc thực hiện đồ án Thầy còndạy cho em những kỹ năng cần phải có khi trở thành một lập trình viên khi đi làm Emcũng xin giành lời cảm ơn này đến với các thầy cô trong khoa Công nghệ thông tin đãcho chúng em một môn học có thể thử sức với bản thân mình Cuối cùng, em xin cảm
ơn đến Trường Đại học Mở thành phố Hồ Chí Minh đã cho em một môi trường tốt,đầy đủ cơ sở vật chất và nhiều môn học thú vị cho em tiếp thu nhiều kiến thức mới,giúp cho chúng em dễ dàng trong việc suy nghĩ và sáng tạo trong suốt quá trình họctập đến nay
During the period of doing project subject, I received a lot of helpful and usefulknowledge from teaching staff in Information Technology faculty of Open University.Especially, I want to express my sincere thanks to my faculty advisor Dương HữuThành because teacher Thành always took a lot of his time to help his students tofigure out the problems and taught them the way to repair it In addition, teacherThành always listen and answer the student’s question and indicate the suitable way tofor his student’s main major I also give this sincere thanks to the teaching staff infaculty Information Technology for creating a subject that helps me cultivate myexperience and develop my competence Finally, I want to thank Open Universitywhere I have a wonderful learning environment and have full facilities Furthermore,Open University also have a lot of subject that very interesting, it’s help me absorb alot new knowledge and feel comfortable in all the period that I’ve learned
Trang 4NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
Trang 5
TÓM TẮT ĐỐ ÁN NGÀNH
Hệ thống quản lý việc làm được tạo ra nhằm mục đích quản lý những công việc đượctuyển dụng, ứng tuyển một cách dễ sử dụng, dễ quản lý Hệ thống sẽ bao gồm cácchức năng như đăng tin tuyển dụng, tìm kiếm việc làm theo nhiều tiêu chí, ứng tuyển,xem thống kê qua từng năm, xác nhận những nhà tuyển dụng Nhà tuyển dụng cũng cóthể xem được những đánh giá mà ứng viên đã bình luận trước đó
Người dùng trong quyền nhà tuyển dụng có thể sử dụng chức năng đăng tin tuyểndụng bằng cách điền thông tin ứng tuyển lên và những yêu cầu trong việc tuyển dụng
đó Nhà tuyển dụng còn có thể xem thông tin của các ứng viên khác
Khi đăng ký người dùng thì sẽ điền đầy đủ thông tin hồ sơ của mình Sau khi đăng kýngười dùng trong quyền ứng viên có thể cập nhật hồ sơ thông tin cá nhân của mình,tìm kiếm việc làm theo nhiều thiêu chí, tìm kiếm tên công việc muốn ứng tuyển và nộpđơn ứng tuyển Ngoài ra, người dùng ứng viên còn có thể xem và đánh giá các nhàtuyển dụng mà họ muốn Ứng viên khi vào sẽ thấy các công việc được hiển thị theongày mới nhất của hiện tại
Người dùng trong quyền Quản trị có quyền xem biểu đồ thống kê các đơn ứng tuyểnqua các năm theo từng ngành nghề mà ứng viên đã chọn hoặc xác thực quyền của nhàtuyển dụng để nhà tuyển dụng có thể đăng bài tuyển dụng lên trang tìm việc làm
Đồ án này sẽ giúp cho việc quản lý việc làm trở nên hiệu quả hơn, tiết kiệm thời gian
và tăng sự tương tác giữa Quản trị và nhà tuyển dụng,ứng viên
Trang 6Hệ thống quản lý việc làm của chúng em được tạo ra sẽ phù hợp với các ứng viên nhưhọc sinh, sinh viên đang có nhu cầu tìm kiếm việc làm để thực tập và các ứng viênđang trong giai đoạn tìm kiếm việc làm mới cho bản thân
Hệ thống khi phát triển sẽ có các chức năng cơ bản như một trang Web việc làm thậtnhư việc tìm kiếm việc làm theo các tiêu chí, xem thông tin chi tiết từng công việctuyển dụng, nộp đơn ứng tuyển và cũng như tạo File CV khi ứng viên cần Giúp nhàtuyển dụng tạo cơ hội việc làm cho các ứng viên bằng cách đăng tin tuyển dụng Quảntrị viên thì quan sát, kiểm tra về thông tin của các nhà tuyển dụng đã đăng ký trêntrang Web từ đó có thể xác minh được nhà tuyển dụng để cho phép họ đăng tin tuyểndụng Quản trị còn có thể xuất báo cáo thống kê dưới dạng Excel hoặc PDF
Hệ thống đã có thể thành công xử lý logic các chức năng cơ bản cũng như phụ trợ kểtrên Tuy vậy nhưng hệ thống sẽ cần phải cải tiến thêm về mặt logic vì đôi khi hệthống xử lý lỗi khá thô sơ và cần phải chi tiết về nhiều trường hợp khác nhau cũng nhưthiếu logic về một vài phần nhỏ bên trong
Trang 7MỤC LỤ
LỜI CẢM ƠN 1
NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN 2
TÓM TẮT ĐỐ ÁN NGÀNH 3
ABSTRACT 4
DANH MỤC TỪ VIẾT TẮT 7
DANH MỤC HÌNH VẼ 8
DANH MỤC BẢNG 11
MỞ ĐẦU 12
Chương 1 GIỚI THIỆU ĐỀ TÀI 13
1.1 Giới thiệu 13
1.2 Mục tiêu đề tài 13
1.2.1 Mục tiêu 13
1.2.2 Đối tượng nghiên cứu 13
1.3 Lý do chọn đề tài 13
1.4 Bố cục báo cáo 14
Chương 2 CƠ SỞ LÝ THUYẾT 15
2.1 Spring Boot 15
2.1.1 Tổng quan về Spring Framework 15
2.1.2 Kiến trúc Spring Framework 16
2.1.3 Tổng quan về Spring Boot 17
2.1.4 Kiến trúc về Spring Boot 19
2.1.5 Hibernate 20
2.1.6 Tổng quan về Spring MVC 23
2.1.7 Các thành phần cấu hình khác 28
Trang 82.2 ReactJS 28
2.2.1 Giới thiệu ReactJS 28
2.2.2 Kết hợp ReactJS với Java Spring Boot 31
Chương 3 HỆ THỐNG QUẢN LÝ VIỆC LÀM 33
3.1 Giới thiệu 33
3.2 Kiến trúc hệ thống 33
3.3 Phân tích thiết kế 34
3.3.1 Use Case 34
3.3.2 Database 37
3.4 Các nghiệp vụ đã phát triển 38
3.4.1 Cập nhật thông tin 38
3.4.2 Tìm kiếm và đánh giá nhà tuyển dụng 40
3.4.3 Tìm kiếm việc theo nhiều tiêu chí 43
3.4.4 Thống kê 46
3.4.5 Xuất Excel 48
3.4.6 Tạo File CV 49
3.4.7 Thêm đơn ứng tuyển 50
3.4.8 Lưu ID công việc để thêm Application 54
3.4.9 Xoá và xem đơn ứng tuyển Application 55
Chương 4 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 57
4.1 Kết luận 57
4.2 Hạn chế và khó khăn 57
4.3 Hướng phát triển 57
TÀI LIỆU THAM KHẢO 59
PHỤ LỤC 60
Trang 9DANH MỤC TỪ VIẾT TẮT
IoC - Inversion of Control - Kỹ thuật mốc nối
DI – Dependency Injection – Kỹ thuật bóc tách class
AOP – Aspect-Oriented Programming – Lập trình hướng khía cạnh
JDBC- Java Database Connectivity – Kết nối cơ sở dữ liệu Java
ORM – Object-Relational-Mapping – Ánh xạ đối tượng
OXM – Object-XML Mapping – Ánh xạ XML
JPA – Java Persistence API- Giao diện Lập trình ứng dụng lưu trữ Java
JMS- Java Message Service – Dịch vụ tin nhắn
DOM- Document Object Model- Đại diện cho giao diện người dùng
Trang 10DANH MỤC HÌNH VẼ
Hình 2.1.1.1 Minh hoạ IoC 15
Hình 2.1.1.2 Annotation @Repository 16
Hình 2.1.2.1 Kiến trúc Spring Framework Runtime 16
Hình 2.1.2.2 Cấu hình context:annotation-config 17
Hình 2.1.3.1 Công ty Pivotal Software 18
Hình 2.1.3.2 Annotation @Bean 18
Hình 2.1.3.3 Server Tomcat 19
Hình 2.1.4.1 Kiến trúc Spring Boot 19
Hình 2.1.5.1 Kết nối database 20
Hình 2.1.5.2 Class persistence từ Database 20
Hình 2.1.5.3 Kết quả từ persistence 21
Hình 2.1.5.4 Class trong Persistence 21
Hình 2.1.5.5 Cấu trúc Hibernate 22
Hình 2.1.5.6 Attribute Hibernate 22
Hình 2.1.5.7 Minh hoạ Hibernate 22
Hình 2.1.6.1 Thư viện JSTL - Spring Security 23
Hình 2.1.6.2 Thẻ TagLib thông dụng 23
Hình 2.1.6.3 Load jsp 24
Hình 2.1.6.4 @RequestParam 24
Hình 2.1.6.5 @PathVariable 24
Hình 2.1.6.6 Nhận PathVariable id 25
Hình 2.1.6.7 Kết quả PathVariable 25
Hình 2.1.6.8 Phần chung 26
Hình 2.1.6.9 Khai báo 26
Hình 2.1.6.10 File Properties 27
Hình 2.1.6.11 Khai báo Properties 27
Hình 2.1.6.12 addAttribute 27
Hình 2.1.6.13 Sử dụng Model 28
Hình 2.2.1.1 HTML và Javascrip 29
Hình 2.2.1.2 Cấu trúc Project ReactJS 29
Trang 11Hình 2.2.1.4 Import Bootstrap 30
Hình 2.2.1.5 Thẻ Bootstrap Spinner 30
Hình 2.2.2.1 CrossOrigin 31
Hình 2.2.2.2 Endpoints API 31
Hình 2.2.2.3 Sử dụng Endpoint 32
Hình 2.2.2.4 Sử dụng trong HTML 32
Hình 2.2.2.1 Kiến trúc hệ thống quản lý việc làm 33
Hình 3.3.1.1 Lược đồ Use Case 34
Hình 3.3.2.1 Cơ sở dữ liệu 37
Hình 3.4.1.1 Menu Hồ sơ 38
Hình 3.4.1.2 Nút thông tin 39
Hình 3.4.1.3 Lưu thông tin 39
Hình 3.4.1.4 Cập nhật dữ liệu 39
Hình 3.4.1.5 Hàm lấy thông tin 39
Hình 3.4.1.6 Hàm getUserById 40
Hình 3.4.2.1 Menu Đánh giá 40
Hình 3.4.2.2 Xem nhà tuyển dụng 40
Hình 3.4.2.3 Xem đánh giá 41
Hình 3.4.2.4 Kết quả đánh giá 41
Hình 3.4.2.5 Hàm ReivewDetail 42
Hình 3.4.2.6 Hàm lấy bình luận 42
Hình 3.4.2.7 Hàm thêm bình luận 42
Hình 3.4.2.8 Thêm vào Database 43
Hình 3.4.2.9 Thêm bình luận 43
Hình 3.4.3.1 Tìm theo tiêu chí 44
Hình 3.4.3.2 Tìm theo 2 tiêu chí 44
Hình 3.4.3.3 Controller tìm kiếm 44
Hình 3.4.3.4 Hàm getJob 45
Hình 3.4.3.5 Tiêu chí cityId 46
Hình 3.4.4.1 Thống kê 46
Hình 3.4.4.2 Biểu đồ thống kê 46
Hình 3.4.4.3 Ajax&ChartJS 47
Trang 12Hình 3.4.4.4 Lấy dữ liệu thống kê 47
Hình 3.4.5.1 Thư viện Excel Poi 48
Hình 3.4.5.2 Tạo thuộc tính Excel 48
Hình 3.4.5.3 Kết quả Excel 49
Hình 3.4.6.1 Thư viện Itext 49
Hình 3.4.6.2 Thuộc tính PDF 49
Hình 3.4.6.3 Controller CV 50
Hình 3.4.6.4 Kết quả CV 50
Hình 3.4.7.1 Giao diện nút 51
Hình 3.4.7.2 Ứng tuyển 51
Hình 3.4.7.3 Thông tin nộp đơn 51
Hình 3.4.7.4 Kết quả nộp trùng công việc 51
Hình 3.4.7.5 Hàm nộp đơn Java 52
Hình 3.4.7.6 Hàm nộp đơn Reactjs 52
Hình 3.4.7.7 Biến application React 53
Hình 3.4.7.8 Endpoint AddApplication 53
Hình 3.4.7.9 Truyền tham số 53
Hình 3.4.7.10 Truyền dữ liệu Json 54
Hình 3.4.7.11 Kết quả Application Reactjs 54
Hình 3.4.8.1 Endpoint JobID 54
Hình 3.4.8.2 Lưu JobID vào Cookie 55
Hình 3.4.9.1 Xoá và xem Application 55
Hình 3.4.9.2 Ajax deleteApp 56
Hình 3.4.9.3 Hàm xoá 56
Trang 13DANH MỤC BẢNG
Bảng 2.1 phân biệt RequestParam và PathVariable 23
Trang 14MỞ ĐẦU
Trong cuộc sống hiện đại ngày nay, ngày càng có nhiều doanh nghiệp thì đi cùng với
đó chính là sự gia tăng nguồn nhân lực của mỗi công ty của doanh nghiệp đó nhưng vìcông nghệ cũng phát triển theo thời đại nên cũng có rất nhiều trang Website giả mạomọc lên thu hút nhiều bạn trẻ học sinh, sinh viên tìm kiếm việc làm để trang trải cuộcsống hoặc mới ra trường để tìm kiếm công việc phù hợp với ngành nghề của mình Vìvậy việc tạo ra một trang Web quản lý việc làm để phục vụ cho nhu cầu ứng tuyển củacác nhà tuyển dụng cũng như nhu cầu tìm kiếm và ứng tuyển việc làm của các bạnsinh viên khi vừa mới ra trường Website sẽ cung cấp cho các bạn một nơi có thể tìmthấy được việc làm ưng ý và cũng như cung cấp thông tin của các nhà tuyển dụng đểcác bạn có thể đảm bảo chất lượng cũng như tính chân thật để không bị lừa đảo dẫnđến những hậu quả không mong muốn Trong trang Web này các bạn ngoài việc xemthông tin của nhà tuyển dụng đó, các bạn còn có thể xem được những đánh giá trước
đó về nhà tuyển dụng mà các bạn đang ứng tuyển để tìm hiểu xem công ty đó, nhàtuyển dụng đó ra sao và có thông tin của nhà tuyển dụng để dễ tra cứu hơn
Đối với các nhà tuyển dụng thì khi đăng tin tuyển dụng thì đặc biệt cần phải có sựchấp nhận của quản trị viên để xác nhận thông tin của nhà tuyển dụng đó, quản trịviên sẽ xem xét thông tin nhà tuyển dụng đang đăng ký và kiểm trả thông tin thật kỹcàng trước khi chấp thuận cho nhà tuyển dụng đó đăng tin tuyển ứng viên Việc nàynhằm tạo kết nối chặt chẽ giữa sinh viên và các nhà tuyển dụng, tránh trường hợp gặpcác nhà tuyển dụng lừa đảo hoặc đa cấp lừa sinh viên nên việc này giúp cho các bạnhọc sinh, sinh viên có thể bớt một phần lo lắng trong việc ứng tuyển không bị lừa mấttiền hoặc hậu quả khác
Website quản lý việc làm có nhiều công dụng và có thể dễ dàng mở rộng trong tươnglai Tuy hiện nay cũng có một số trang Web tìm kiếm việc làm nổi như TopCV, Chợtốt… nhưng chúng em sẽ cố gắng tạo nên một trang Web quản lý việc làm hoàn thiện
dễ sử dụng
Trang 15Chương 1 GIỚI THIỆU ĐỀ TÀI
1.1 Giới thiệu
Hệ thống quản lý việc làm là một phần mềm được thiết kế để phát triển và hỗ trợ cácứng viên dễ dàng tìm được các việc phù hợp với bản thân Hệ thống còn là một môitrường tạo kết nối giữa ứng viên và các nhà tuyển dụng với nhau Hệ thống sẽ cungcấp một giao diện trực quan từ đó người sử dụng có thể dễ dàng hiểu và sử dụng đượcmột cách linh hoạt Ngoài ra nó còn cung cấp nhưng tính năng hỗ trợ đi kèm trong khi
sử dụng như việc xem các đánh giá về các nhà tuyển dụng, cập nhật thông tin hồ sơ,đưa lên những tin tuyển dụng mới để ứng viên có thể nắm bắt được những cơ hội mớinhất cho bản thân hoặc tìm kiếm nâng cao theo nhiều tiêu chí giúp việc tìm kiếm tintuyển dụng trở nên nhanh chóng hơn, phù hợp với nhiều nhu cầu hơn
1.2 Mục tiêu đề tài
1.2.1 Mục tiêu
Mục tiêu chính của đề tài quản lý việc làm này khi em xây dựng nên đó chính là giúpcho những người tìm việc (ứng viên) có thể tương tác với các công việc của nhà tuyểndụng một cách dễ hiểu và thuận lợi nhất Hệ thống cũng sẽ cung cấp chức năng xácnhận quyền của nhà tuyển dụng để tăng sự tương tác giữa quản trị viên và nhà tuyểndụng Ngoài ra hệ thống còn có chức năng tìm kiếm, đăng tin tuyển dụng để tăng khảnăng kết nối giữa người tuyển dụng và ứng viên
1.2.2 Đối tượng nghiên cứu
Đối tượng nghiên cứu của đề tài nghiên cứu việc làm bao gồm các cá nhân, hoặc cáccông ty, các doanh nghiệp có liên quan đến việc cung cấp và tìm kiếm nhân lực và việclàm Đó có thể là người tìm việc như học sinh, sinh viên… muốn tìm kiếm công việc
để trang trải cuộc sống hoặc nhà tuyển dụng, trung tâm việc làm, cơ quan, tổ chức đàotạo việc làm
1.3 Lý do chọn đề tài
Trong nhu cầu thực tế hiện nay, tìm kiếm việc làm có tầm ảnh hưởng rất lớn đếnnhững thế hệ trẻ hiện này vì số lượng các bạn trẻ ngày càng tăng nên nhu cầu tìm kiếmviệc làm cũng tăng cao theo đó Đặc biệt là các bạn học sinh, sinh viên hiện ở các vùng
Trang 16xa lại càng không biết đâu là trang Website lừa đảo hoặc đâu là trang Website tìmkiếm việc làm chính chủ Nhiều học sinh, sinh viên đã hoặc từng bị lừa vào nhưngtrang Website lừa đảo, đa cấp khiến cho không ít những sinh viên ấy rơi vào tình trạngkhó khăn trong việc trang trải cuộc sống Từ đó chúng em có suy nghĩ tạo ra mộtWebsite tạo việc làm có thể đăng những bài tuyển dụng đã được người quản lý xácthực những nhà tuyển dụng một cách kỹ càng nhất để không xuất hiện những nhàtuyển dụng ảo hoặc đa cấp.
Ngoài ra còn do thị trường việc làm phong phú ngày càng có nhiều loại công việc phùhợp cho nhiều người, đặc biệt là trong thị trường hiện nay thì nổi nhất đó chính làngành Công nghệ thông tin vì ngành nó có thể có nhiều hướng đi cho sinh viên MộtWebsite quản lý việc làm thì có thể thu hút được nhiều người dùng và nhà tuyển dụngbiết đến để đăng bài, ứng tuyển tạo cơ hội kinh doanh giữa doanh nghiệp và ứng viên,tăng cao năng lực bản thân ứng viên Việc xây dựng Website quản lý việc làm còn cótính dễ mở rộng, tạo ra những chức năng tiện ích cho người dùng, có thể mở rộng ra vềnhững mục đích khác nhau liên quan đến việc làm
Xây dựng một Website quản lý việc làm giúp cho em có thêm kinh nghiệm và rènluyện thêm về kỹ năng lập trình của chính bản thân mình, hiểu biết và học hỏi thêmnhiều điều từ việc tham khảo các Website quản lý việc làm khác để nâng cao kiến thứcvốn có của mình Hiểu và khác phục được những vấn đề trong khi phát triển sản phẩm,rút kinh nghiệm từ những sai sót đó để bù đắp vào sau này
1.4 Bố cục báo cáo
Bố cục được chia thành 3 phần Phần 1 giới thiệu về các loại ngôn ngữ mà chúng em
sử dụng và áp dụng vào môn Đồ án ngành như Spring Boot, ReactJS Phần tiếp theo sẽgiới thiệu về những chức năng của hệ thống, đồng thời giới thiệu về kiến trúc và quátrình phân tích hệ thống quản lý việc làm Cuối cùng là sự kết luận về hệ thống củabản thân và nêu ra những hướng đi và phát triển trong tương lai
Trang 17Chương 2 CƠ SỞ LÝ THUYẾT
2.1 Spring Boot
Trong quá trình phát triển Website quản lý việc làm, chúng em sử dụng ngôn ngữchính cho trang Website đó là Spring Boot vì ngôn ngữ này khá tiện lợi trong việc sửdụng qua lại giữa các lớp (class) persistence và Controller, Service qua Hibernate
2.1.1 Tổng quan về Spring Framework
Spring Framework là một loại Framework được phát triển trên ứng dụng Web Java rấtlinh hoạt và mạnh mẽ, dễ sử dụng Vì vậy việc phát triển ứng dụng được đơn giản hoá,
nó còn cung cấp các đặc tính, cung cấp các cấu hình mặc định và các tính năng diđộng Khi sử dụng Framework thì sẽ giúp cho chương trình giảm bớt những mã nguồnphức tạp, giúp chương trình xử lý và bắt đầu nhanh hơn vì Spring Framework là mộtloại framework trong suốt, không cần phải cấu hình và cài đặt quá nhiều thông số màchỉ cần tập trung vào logic của mã nguồn
Đặc biệt trong Spring Framework còn có kỹ thuật mốc nối IoC (Inversion of Control)giúp cho chương trình dễ mở rộng, dễ khai báo các biến từ các gói hoặc các lớp khácnhau Ví dụ sau về việc mốc nối từ các class từ trong Package Service qua bên lớpindexController trong Package Controller chỉ bằng các Annotation @Autowire
Hình 2.1.1.1 Minh hoạ IoCNgoài ra, Spring Framework còn cung cấp cho chúng ta các Annotation, là cách đểgắn kết với metadata vào trong mã nguồn Java Annotation cung cấp dịch vụ phổ biểncho trình duyệt, phân biệt các tác vụ với nhau ví dụ như các Annotation thường gặpnhư @Controller để biểu thị cho lớp đó là một lớp Spring Controller, là lớp có trách
Trang 18nhiệm xử lý các yêu cầu từ HTTP và tương tác với người dùng, @Service biểu thị cholớp Service(lớp tác vụ) Spring Service trung gian thực hiện kết nối giữa lớpRepository và Controller xử lý logic mã nguồn Cuối cùng là @Repository biểu thị choSpring Repository, là lớp tương tác với dữ liệu và thực hiện các chức năngCRUD(Create, Read, Update, Deletete) dữ liệu.
Hình 2.1.1.2 Annotation @Repository
2.1.2 Kiến trúc Spring Framework
Kiến trúc của Spring Framework gồm 3 thành phần chính là Data Access/Intergraiton,Web và Core Container Ngoài 3 thành phần chính trên còn có AOP (Aspect -OrientedProgramming) là lập trình hướng khía cạnh giúp và bổ trợ cho lập trình hướng đốitượng trong Java
Hình 2.1.2.3 Kiến trúc Spring Framework Runtime
Trang 19Data Access/intergration là nhóm bao gồm JDBC, ORM, OXM, JMS là những kỹthuật cung cấp giao tiếp với Database ví dụ như ORM sẽ cung cấp cho chúng ta JPA
và Hibernate để tương tác với các lớp persistence trong Java Trong ví dụ Hibernatedưới đây, câu lệnh query đã “FROM City” là lấy đối tượng City từ trong lớp POJOchứ không phải lấy từ bảng City trong cơ sở dữ liệu
Phần quan trọng nhất của kiến trúc Spring Framework đó chính là Core Container.Thành phần Core module là nơi cung ứng cho chúng ta các chức năng như IoC, DI(Dependency Injection) [3] Beans sẽ cung cấp 1 BeanFactory là nơi tạo ra các @Beandùng để cấu hình, tạo mới hoặc xoá các Bean đó Beans được cấu hình thông qua FileXML Context hay còn gọi là giao diện ApplicationContext, là nơi cấu hình và kết hợpcác Bean lại với nhau
Hình 2.1.2.4 Cấu hình context:annotation-config
2.1.3 Tổng quan về Spring Boot
Khi nói về Sring Framework thì ta không thể không nhắc đến Spring Boot, đây có thểxem là một phần dự án nhỏ trong Spring Framework được tạo ra để việc vận hànhcũng như cấu hình hệ thống của dự án trở nên dễ dàng hơn và đáp ứng nhiều nhu cầucủa lập trình viên hiện nay Ngoài ra cấu trúc của Spring Boot cũng được xây dựngdựa trên nền tảng của Spring Framework vì vậy khi sử dụng Spring Boot sẽ giúpchúng ta càng hiểu hơn về những cấu trúc bên trong của Spring Framework
Spring Boot được phát triển bới công ty Pivotal Software có trụ sở tại San Francisco.Spring Boot là một dự án về mà nguồn mở và được phát triển mạnh mẽ bởi cộng đồnglập trình viên trên toàn thế giới
Trang 20Hình 2.1.3.5 Công ty Pivotal SoftwareKhi sử dụng Spring Boot chúng ta sẽ cảm thấy nó thực thi chương trình được mượt màhơn mà không cần thực hiện quá nhiều bước Vì khi cài đặt và sử dụng, nó đã tạo ranhiều lợi ích mà chúng ta không cần phải làm.
Auto Config: Thay vì người dùng tự cấu hình sẽ tốn nhiều thời gian nhưng khi dùngSpring Boot sẽ tự động cấu hình các phần cần thiết cho người sử dụng vì vậy ngườidùng chỉ cần Build Code sau đó là chạy chương trình bình thường
Xây dựng Annotation: Thay vì sử dụng các File XML thì ở Spring Boot sẽ thay thếngắn gọn bằng các @Bean sử dụng kỹ thuật IoC giúp cho việc khai báo trở nên nhanhchóng và bớt phức tạp Trong ví dụ ta thấy được một Annotation Bean của Cloudinarychỉ cần cấu hình các thuộc tính của biến cloudinary một cách dễ dàng và dễ hiểu Saukhi cấu hình xong thì có thể gọi và sử dụng biến đó trong các lớp khác
Hình 2.1.3.6 Annotation @Bean
Sử dụng Server Tomcat: Khi sử dụng Tomcat chúng ta chỉ cần cài đặt Server Tomcat
là có thể đơn giản hoá việc triển khai các File JAR vì giảm bớt việc cấu hình Nó còngiúp cho các File JAR được tối ưu tài nguyên vì chỉ cần đưa ra các thư viên và tàinguyên cần thiết khi sử dụng ứng dụng đó, việc này giúp tăng hiệu suất cho chươngtrình
Trang 21Hình 2.1.3.7 Server TomcatTuy Spring Boot có rất nhiều tiện lợi nhưng đi cùng với đó là không ngừng học hỏi vềSpring Boot vì để sử dụng thành thạo và dễ dàng bạn cần phải có các kiển thức cơ bảncủa phần Java Core như Java, OOP, API,… ,việc quản lý các Package và cuối cùng làJPA để có thể kết nối và tương tác giữa cơ sở dữ liệu với phần Java Core kể trên
2.1.4 Kiến trúc về Spring Boot
Kiến trúc Spring Boot được tạo ra dựa trên Spring Framework vì vậy nó sẽ bao gồmcác module trong Framework Kiến trúc gồm 4 tầng với các tác vụ khác nhau
Hình 2.1.4.8 Kiến trúc Spring BootPresentation Layer hay còn gọi là Controller layer (lớp điều khiển) là lớp trên cùng củaSpring Boot được dùng để xử lý các HTTP và các Request được gửi từ server vềclient
Business Layer hoặc là Lớp xử lý Logic, là lớp xử lý các dữ liệu và thức hiện các yêucầu phức tạp của mã nguồn Business Layer đảm bảo rằng các hàm xử phải đúng vớitác vụ khi được gọi ở lớp Presentation Layer Lớp này giúp cho mã nguỗn có thể dễbảo trì và mở rộng
Persistence Layer là tầng tương tác và quản lý cơ sở dữ liệu Lớp này cũng giống nhưData Access/Intergration trong kiến trúc của Spring Framework
2.1.5 Hibernate
Hibernate là một Framework đã được giới thiệu ở phần cấu trúc Spring Frameworktrước đó ở Hình 2.1.2 3 Hibernate sử dụng ORM giúp Java đặt được năng suất cao
Trang 22trong việc truy vấn dữ liệu trong Database Hibernate hỗ trợ những ứng dụng liênquan đến cơ sở dữ liệu như MySQL, SSMS…
Chúng ta cần phải cấu hình Hibernate để tạo sự liên kết giữa database và các lớp trongPOJO Một phần sẽ từ hàm kết nối các bảng trong POJO và một phần sẽ từ hàm kháclấy dữ liệu và đóng vai trò kết nối đến database của máy tính sẽ bao gồm các thànhphần như driverClass, username, password…
Hình 2.1.5.9 Kết nối databaseKhi sử dụng Hibernate sẽ giúp cho người sử dụng dễ dàng ánh xạ đến các thuộc tínhcủa đối tượng hiện tại trong lớp persistence mà không cần nhìn vào trong các bảng của
cơ sở dữ liệu [4] Chúng ta có thể tạo ra các lớp Persistence dựa vào lớp có sẵn củachương trình
Hình 2.1.5.10 Class persistence từ Database Sau khi chọn các bảng từ trong Database thì chúng ta sẽ nhận được các lớp trong góiPOJO đúng theo tên các bảng trong Database
Trang 23Hình 2.1.5.11 Kết quả từ persistenceBên trong các lớp sẽ có các biến tương ứng với các cột/thuộc tính trong cơ sở dữ liệu
và được gắn các Annotation để xác định các mối quan hệ như một-nhiều, nhiều-nhiềutrong Database, khi tạo ra các lớp sẽ có những câu truy vấn cơ bản có sẵn do hàm tạo
ra trong Anntation @NamedQuery [4]
Hình 2.1.5.12 Class trong Persistence Hibernate có cấu trúc khá đơn giản Cơ sở dữ liệu sẽ tương tác với JDBC và được gọiqua các Session Factory hoặc các câu Query để tương tác với các Persistence Object
và trả về các kết quả tìm được Trong Java khi mọi người thường dùng từ POJO (PlainOld Java Object) hơn là Persistence Object, thì khi Hibernate tương tác với các đốitượng trong mỗi lớp của POJO thì những đối tượng trong lớp đó cần phải có nhữngyêu cầu sau để Hibernate có thể tương tác dễ dàng hơn như các phương thức không cótham số, phải khai báo Private và phải có phương thức Getter và Setter và các lớpkhông kế thừa tường minh
Trang 24Hình 2.1.5.13 Cấu trúc HibernateNgoài ra các thuộc tính khoá ngoại khi dùng Hibernate có thể trả về cả một đối tượng
ở một bên bảng khác liên kết
Hình 2.1.5.14 Attribute HibernateTrong hình trên ta thấy được khoá ngoại của bảng hiện tại (bảng Employer ) có mộtliên kết đến bảng user bằng userID có kiểu dữ liệu là 1 User Vì vậy chúng ta có thểgọi Hibernate để lấy tất cả dữ liệu của user đó từ userID của bảng Employer chứkhông cần lấy từ bảng User Trong ví dụ ta thấy được cách sử dụng đối tượng khoángoại từ bảng khác để lấy được cả dữ liệu của user đó Có thể dùng “WHEREuserID.username” để lấy username từ bảng user để so sánh như ví dụ bên dưới
Hình 2.1.5.15 Minh hoạ Hibernate
Trang 252.1.6 Tổng quan về Spring MVC
Web (MVC -Remoting) hay còn được biết đến là Spring MVC Đây là phần nổi trộinhất của Spring Framework vì nó là nơi thực hiện các đặc trưng của Core module ởCore Container đó là IoC và DI Mô hình MVC bao gồm có Model-View-Controller.Model là nơi lưu trữ và xử lý logic các đối tượng trong Persistence Class (các lớptương tác với cơ sở dữ liệu)
View là nơi đại diện cho người dùng ứng dụng, sử dụng khuôn mẫu JSP cùng vớiJSTL (Java Standard Tag Library) để có thể sử dụng các Restful của Service Ví dụ vềTag Library về Spring Security và JSTL trong File JSP
Hình 2.1.6.16 Thư viện JSTL - Spring SecurityMột số thẻ thông dụng thường thấy khi sử dụng thư viện tag lib như của JSTL Core ta
có thẻ <c:if> để chứa điều kiện hoặc <c:forEach> để tạo vòng lặp xuất ra các dữ liệucủa nhiều đối tượng
Hình 2.1.6.17 Thẻ TagLib thông dụng Controller tương tác với các Model, tiếp nhận và xử lý các yêu cầu của người dùng,thực hiện các điều hướng từ Request
Trong Spring MVC còn có Front Controller là trung gian giữa Request của người dùng
và Controller Front Controller sẽ nhận những yêu cầu của người dùng rồi sau đóchuyển những request đó sang Controller để xử lý các tác vụ thông qua HTTPRequest Trong Spring Boot Front Controller sẽ được cấu hình ở DispatcherServlet đểthay thế cho Front Controller (DispatcherServlet hoạt động tương tự như FrontController) để xử lý các HTTP Request Dispatcher còn là nơi giúp chúng ta chạy cáccấu hình mà chúng ta thiết lập trước đó như: cấu hình Hibernate, Tiles, SpringSecurity…
Trang 26DispatcherServlet sẽ gọi những phương thức phù hợp trong Controller để xử lý yêucầu của người dùng như GET, POST, DELETE…DispatcherServlet sẽ dùngViewResolver để tìm đến những File JSP tương ứng với Controller của trang Web đó
và những lớp Controller khi được DispatcherServlet gọi thì phải gắn @Controller hoặc
@RestController để nó có thể nhận diện được đó là lớp thuộc Controller
Hình 2.1.6.18 Load jspTrong hình minh hoạ trên ngoài return “index” để trả về đúng yêu cầu người là vềtrang index.jsp thì còn có @RequestMapping để vào trang /index.jsp còn có
@RequestParam để hiển thị các tham số lên thanh URL
Hình 2.1.6.19 @RequestParamNgoài RequestMapping để chuyển trang và RequestParam chúng ta còn có mộtAnnotation được sử dụng thường xuyên đó là @PathVariable để hiển thị phần chúng
ta lên trên thanh URL, nó cũng có công dụng cũng khá giống với RequestParam nhưngkhông được sử dụng như RequestParam
Hình 2.1.6.20 @PathVariableTrong Hình 2.1.6 20 ta thấy được trong @GetMapping chúng ta có /JobDetail/{id}thì {id} đó sẽ được nhận dạng từ biến int id bên dưới truyền lên và phần AnnotationPathVariable để nhận diện rằng biến int id bên dưới đó sẽ truyền vào đâu thì thuộc tínhvalue sẽ gán biến int id vào trong {id} đó
Trang 27Hình 2.1.6.21 Nhận PathVariable id
Ví dụ khi ta ấn vào nút “Xem công việc” thì nó sẽ truyền id của công việc hiện tại lênthanh URL và chuyển thành trang JobDetail của công việc đó như kết quả
Hình 2.1.6.22 Kết quả PathVariableTóm lại, từ ví dụ ta thấy được rằng @RequestParam và @PathVariable dù đều làtruyền dữ liệu từ request URL nhưng chúng lại có công dụng và mục đích sử dụngkhác nhau Thông thường RequestParam sẽ được dùng cho các tham số tuỳ chọn hoặccác tham số không phải path còn PathVariable thì dùng các tham số là path
RequestParam PathVariableCách sử dụng Dưới dạng câu lệnh
Query hoặc URL Dưới dạng URLKiểu tham số Dưới dạng Query String/
Form Data
Dưới dạng URL
Bắt buộc truyền giá trị NOT NULL NOT NULL
Số lượng tham số Một hoặc nhiều tham số Duy nhất một tham số
Bảng 2.1 phân biệt RequestParam và PathVariableKhi sử dụng Spring MVC chúng ta sử dụng thành phần Apache Tiles (mộtFramework) giúp cho việc tái sử dụng mã nguồn của các trang Web trở nên tối ưu hơn
và tiết kiệm tài nguyên hơn khi xây dựng phần Front-End Tiles giúp cho chúng ta tách
ra những phần dùng chung cho tất cả các trang Web như Header, Footer hoặc các khaibáo <script> của bootstrap hoặc jquery ở một trang chung sau đó lắp ghép sẵn vào các
Trang 28trang Web mới trong chương trình Đầu tiên tạo thư mục Tiles.XML để khai báo cáctrang Web để sử dụng các thành phần chung kể trên.
Hình 2.1.6.23 Phần chung
Ở đây chúng ta dùng thẻ <definition> để định nghĩa từng phần cũng như định nghĩatrang Web nào sẽ hiện các thành phần đó lên khi chạy chương trình.Trong hình ảnhtrên là định nghĩa 3 thành phần base, header và footer của mỗi trang Web sẽ có 3 thànhphần dùng chung đó, còn dưới đây là định nghĩa để từng trang Web có thể sử dụng 3thành phần trên
Hình 2.1.6.24 Khai báo Khi khai báo 1 trang Web dùng những thành phần chung đó thì chúng ta sẽ cho trangWeb đó kế thừa (extends) lại thành phần baseLayout đã khai báo ở phần ví dụ trước đó
và gán đường dẫn dẫn đến trang Web đó trong thư mục của chương trình ở phần
“value”
Thêm vào đó Spring MVC còn có phần đọc File Properties giúp cho lập trình viên tăngphần bảo mật các thông tin cần thiết hoặc cũng như kết hợp với khác như việc thôngbáo các Message khác nhau Đầu tiên chúng ta tạo 1 File Properties để chứa các thôngtin cần thiết để gọi ra
Trang 29Hình 2.1.6.25 File PropertiesKhi khai báo ở đây thì chúng ta chỉ cần gọi phần bên trái ra chứ không cần khai báotrực tiếp phần bên phải ra trong chương trình, nó góp phần bảo mật những phần quantrọng mà chúng ta không muốn bị lộ ra từ bên ngoài Sau đây là một ví dụ để lấy ra cácthành phần của cloudinary có trong File Properties (lưu ý cần phải khai báo
@PropertiesSource để đọc được File có đuôi là properties)
Hình 2.1.6.26 Khai báo Properties
Ta thấy được chúng ta không cần gọi trực tiếp các dữ liệu ra mà chỉ cần gọi trong câulệnh getProperty() đúng tên với phần bên trái thì chương trình sẽ được ánh xạ đúngvào thành phần bên trái của File Properties.Trong Spring MVC, khi muốn kết nối dữliệu lấy được giữa các hàm với View (jsp) thì chúng ta sẽ có một hàm “addAttribute”
Hình 2.1.6.27 addAttributeĐầu tiên, chúng ta sẽ khai báo một biến Model để nhận dữ liệu và sử dụng hàmaddAttribute từ Spring Framework có sẵn, biến Model này sẽ giúp chúng ta kết nốigiữa View và Controller với nhau Như trong hình 2.1.6.12 ta thấy được khi gọi hàmgetCity để lấy toàn bộ các Thành phố trong cơ sở dữ liệu thì tất cả các dữ liệu lấy được
sẽ được đưa vào trong model có tên là “CITY” Nếu như muốn lấy các dữ liệu đó ra
Trang 30thì bên View chúng ta sẽ sử dụng thư viện TagLib đã ví dụ về các TagLib thông dụng
đã nói ở bên trên Hình 2.1.6 17
Hình 2.1.6.28 Sử dụng ModelChúng ta sẽ sử dụng thư viện của JSTL để tạo ra vòng lặp forEach với items mà chúng
ta truyền vào đó là tên model CITY mà chúng ta đã tạo ra trước đó bên Controller dướidạng 1 tên khai báo là var=”ct” Khi đó tất cả các dữ liệu trong model CITY sẽ đượcthay thế ngắn gọn bằng ct để lập trình viên dễ gọi ra những thuộc tính trong bảng City.Trong từng thẻ option sẽ được gán 1 giá trị value đó là id của City hiện tại vàct.nameCity sẽ hiển thị ra tên của từng thành phố vào trong thanh select đó
2.1.7 Các thành phần cấu hình khác
2.2 ReactJS
2.2.1 Giới thiệu ReactJS
ReactJS là một thư viện mở rộng của JavaScript được sử dụng phổ biến rộng rãi trênthế giới, ReactJS được sử dụng để tạo ra giao diện người dùng và được phát triển bởiFacebook [5]
ReactJS sử dụng kiến trúc dựa trên các thành phần (components) để xây dựng nên giaodiện người dùng Điều này giúp cho việc bảo trì và mở rộng của ReactJS trở nên dễdàng và tiện lợi vì nó giúp cho mã nguồn trong khi viết bằng ReactJS có thể dễ đọchơn vì đa phần các ngôn ngữ khác sẽ cảm thấy rất khó để đọc được các thành phần đãliên kết nằm ở đâu và đã được gọi ra khi nào
ReactJS sử dụng cú pháp JSX (JavaScript XML) là một cú pháp để viết những thànhphần và thẻ trong HTML trong cùng 1 File JavaScript [5] Điều này giúp cho việc đọc
mã nguồn khi vừa viết HTML vừa chỉnh sửa các chức năng trong JavaScript trở nên
dễ đọc và dễ hiểu rằng chúng đang được gọi ra ở đâu
Trang 31Hình 2.2.1.29 HTML và Javascrip Cấu trúc ReactJS của một Project cơ bản sẽ gồm các một nơi để chứa các component
để gọi lên các View và một nơi để cấu hình các API gọi từ Axios
Hình 2.2.1.30 Cấu trúc Project ReactJSKhi cấu hình xong các component thì chúng ta phải khai báo vào trong App.js đểchương trình ánh xạ đến các component đó và trả ra View của từng component Lưukhi sử dụng thẻ có liên quan đến Router thì chúng ta cần phải cài đặt react router trướcbằng cách mở một Terminal CMD và gõ lệnh “install react-router-dom@6” để sửdụng các thư viện router để ánh xạ đến từng đường dẫn path dựa vào từng thành phầnđược khai báo trong element như trong ví dụ thì đường dẫn mặc định path=”/” sẽ dẫnđến thành phần thẻ <Home> là component được tạo ra từ Home.js cũng chính là trangWeb Home
Hình 2.2.1.31 Khai báo component Home và Login