Tải bản đầy đủ (.docx) (100 trang)

Xây dựng website hỗ trợ tìm kiếm việc làm

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.59 MB, 100 trang )

XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA HỆ THỐNG THÔNG TIN
---------------------∇---------------------
KHOÁ LUẬN TỐT NGHIỆP
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM
VIỆC LÀM

Giảng viên hướng dẫn: TS.NGUYỄN ĐÌNH THUÂN
Sinh viên thực hiện:
NGUYỄN HỮU HỮU - MSSV :06520200
NGUYỄN TIẾN LONG - MSSV:06520268
Lớp : HTTT01
Khoá : 1 (2006-2011)
1
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
TP. Hồ Chí Minh, tháng 3 năm 2011
MỞ ĐẦU
Trong thời đại công nghệ phát triển như ngày nay, nhu cầu tìm việc trực tuyến trở là
một yêu cầu thiết yếu trong cuộc sống. Yêu cầu công việc và nguồn nhân lực là rất lớn. Do
đó xây một hệ thống xử lý trực tuyến nhanh, ổn định và dễ dàng cho Người dùng là một yêu
cầu gây khó khăn trong kỹ thuật phân tích và xử lý của website. Qua cách nhìn nhận đó,
nhóm tìm hiểu kỹ thuật mới xây dựng website nhằm đáp ứng tiêu chí trên.
Khóa luận này được chia làm 3 phần:
- Phần 1: Khảo sát thực tế, tìm hiểu nhu cầu người dùng.
- Phần 2: Phương pháp phân tích thiết kế và công nghệ nền tảng.
- Phần 3: Phân tích thiết kế hệ thống và hiện thực hệ thống.
- Phần 4: Hướng phát triển và kết luận
LỜI CẢM ƠN
2


XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Trước tiên chúng em xin gửi lời cảm ơn chân thành tới TS.Nguyễn Đình
Thuân đã dành thời gian để hướng dẫn chúng em hoàn thành khóa luận tốt nghiệp
này. Ngoài ra chúng em cũng gửi lời cảm ơn tới các thầy cô khoa Hệ thống thông tin
thuộc trường Đại học công nghệ thông tin - Đại học quốc gia TP.Hồ Chí Minh đã rất
tận tâm hướng dẫn việc học tập của chúng em và các bạn sinh viên khác trong suốt
những năm tháng học tập tại trường. Đồng thời lời cảm ơn này cũng xin dành cho
anh Nguyễn Quan Thái đã góp ý và nhiệt tình cung cấp dữ liệu cho em. Cuối cùng
chúng em xin cảm ơn cha mẹ là những người sinh ra và dưỡng dục chúng em tới
ngày hôm nay. Chúng em xin dành thành quả của khóa luận này để tặng những người
mà chúng em tri ân.
Do kiến thức và thời gian có hạn nên khóa luận này chắc chắn không tránh
khỏi thiếu sót, mong các thầy cô chân thành góp ý.
Sinh viên
Nguyễn Hữu Hữu
Nguyễn Tiến Long
3
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
NHẬN XÉT
(Của giảng viên hướng dẫn)
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
NHẬN XÉT
(Của giảng viên phản biện)
4
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................

.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
.........................................................................................................................................
MỤC LỤC
DANH MỤC SƠ ĐỒ, HÌNH
5
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
CHƯƠNG 1 : GIỚI THIỆU ĐỀ TÀI
1.1. TỔNG QUAN VỀ ĐỀ TÀI
Trong thời đại ngày nay, nhu cầu việc làm và nhân lực là rất lớn, do đó xây một hệ thống
cho phép nhà tuyển dụng đăng tin tìm việc làm, qua đó người tìm việc có thể tìm thấy các
việc làm phù hợp với khả năng là rất cần thiết.
Hệ thống phục vụ cho đối tượng chính yếu là sinh viên và các doanh nghiệp, là cầu nối
giữa sinh viên và các doanh nghiệp.
Ngoài ra hệ thống còn cho phép các trung tâm đào tạo đăng các tin tức đào tạo, các khóa
huấn luyện, qua đó người tìm việc có thể tìm được các khóa đào tạo để rèn luyện và nâng

cao các kỹ năng mà từ đó có thể tìm được công việc phù hợp hơn với nhu cầu thực tế.
1.2. Ý NGHĨA ĐỀ TÀI
Trước thực tế nhu cầu tìm kiếm việc làm cùng với sự phát triển của công nghệ thông tin
mạnh mẽ của Việt Nam, việc xây dựng một hệ thống tìm việc trực tuyến hiệu quả là một
công cụ hết sức cần thiết. Mặc dù có rất nhiều trang web đăng tuyển dụng và tìm việc nhanh
nhưng vẫn còn nhiều vấn đề về việc người tìm việc tạo hồ sơ như sau:
- Những nội dung nhập liệu quá nhiều.
- Nội dung nhập liệu quá rời rạc chưa hướng tới người dùng như là người dùng
đang ở tình trạng nào? Yêu cầu công việc gì? Và cần nhập nội dung gì?
Vì vậy, việc phân tích nội dung tạo hồ sơ cho người tìm việc là hết sức quan trọng. Việc
phân tích tình trạng người dùng, các dạng hồ sơ, nhóm thông tin cần điền vừa hướng đến
tiêu chí người tìm việc dễ dàng trong việc tạo hồ sơ cũng như các nhà tuyển dụng vừa ý khi
nhận những hồ sơ theo các chuẩn mà họ yêu cầu ứng trực tiếp do hệ thống hỗ trợ.
6
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Cùng với sự tích hợp công nghệ mới, nhóm tìm hiểu và phân tích nhu cầu người dùng
dựa trên tiêu chí tốc độ xử lý nhanh và thao tác đơn giản giúp người dùng dễ dàng trong
việc tìm công việc phù hợp tạo và gửi hồ sơ ứng tuyển vừa ý nhà tuyển dụng.
Khóa luận hướng tới việc phân tích tiêu chí của người dùng, xây dựng công thông tin
điện tử dựa trên công nghệ … để cung cấp cho người tìm việc nói chung và các bạn sinh
viên nói riêng công cụ để tạo hồ sơ trực tuyến, là nơi các ứng viên tìm kiếm việc làm phù
hợp với khả năng. Bên cạnh đó nhà tuyển dụng và trung tâm đào tạo cũng có thể dễ dàng
đăng tin tuyển dụng hoặc tin đào tạo lên website.
Trong quá trình thực hiện khóa luận này nhóm đã áp dụng được những điều được học
trong nhà trường vào thực tế và cũng đã biết được thêm các công nghệ mã nguồn mở trên
nền ngôn ngữ JAVA như Java server pages framework, Spring framework, Hibernate
framework. Ngoài ra nhóm còn tìm hiểu qui trình phát triển phần mềm ICONIX áp dụng
khóa luận.
1.3. KHẢO SÁT THỰC TẾ
Hiện nay, nhu cầu tìm kiếm việc làm theo khả năng và nhu cầu tìm kiếm nguồn nhân lực

gặp nhiều khó khăn khiến các nhà tuyển dụng không tìm được nhân viên phù hợp cũng như
nhân viên không tìm được vị trí công việc phù hợp.
Thực tế hiện nay có rất nhiều website tìm việc và tuyển dụng rất hiệu quả như là
VietNamWork.com, Timviecnhanh.com,… giúp người tìm việc tìm thấy những công việc rất
dễ dàng nhưng ở khâu tạo hồ sơ vẫn chưa thỏa mãn được nhu cầu của Người dùng cụ thể là
ở bước nhập liệu bị ràng buộc quá nhiều thông tin.
Hệ thống hiện thực trong khóa luận này nhằm đáp ứng nhu cầu trên: Giúp người tìm
việc tạo hồ sơ dễ dàng và thuận lợi trong việc gửi hồ sơ đến các nhà tuyển dụng.
Đánh giá website tìm việc khác hiện nay: ????????????
Cần phát triển thêm những điểm nào??????????????
7
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
CHƯƠNG 2: PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ VÀ CÔNG NGHỆ
NỀN TẢNG
2.1. PHƯƠNG PHÁP PHÂN TÍCH THIẾT KẾ
2.1.1. Giới thiệu qui trình phát triển phần mềm ICONIX:
8
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Hình 2.1.1a. Mô hình qui trình ICONIX
Có 6 bước trong qui trình ICONIX được thực hiện như sau:
- Bước 1: Phân tích yêu cầu:
• Yêu cầu chức năng: Định nghĩa ra các chức năng hệ thống sẽ làm.
• Mô hình hóa phạm vi: Hiểu được không gian vấn đề và các thuật ngữ nhập
nhằng trong khâu phân tích giữa khách hàng và người phân tích yêu cầu.
• Yêu cầu hành vi: Định ra hệ thống và người dùng sẽ tương tác thế nào dựa vào các
bản phác thảo giao diện (GUI prototype) và xác định tất cả các trường hợp sử dụng
sẽ hiện thực. Tuy nhiên ở bước này không yêu cầu phải xác định đầy đủ hết tất cả
các trường hợp sử dụng. Trong các bước sau sẽ giúp chúng ta xác định thêm các
trường hợp sử dụng mà chưa xác định được ở bước này.
• Hoàn tất mốc thứ nhất: xem xét các trường hợp sử dụng đã xác định được có phù

hợp với yêu cầu của khách hàng hay chưa.
- Bước 2: Phân tích và thiết kế sơ bộ:
• Robustness analysis(Phân tích sơ bộ): Vẽ ra các mô hình robustness(bức
tranh về các đối tượng trong usecase), vẽ lại luồng đi như trong đặc tả
usecase
9
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
• Cập nhật domain model: ở bước này chúng ta sẽ tìm các lớp còn thiếu ,
loại bỏ sự nhập nhằng trong việc đặt tên lớp, thêm thuộc tính và các
phương thức cho cho các lớp.
• Đặt tên tất cả chức năng logic phần mềm cần thiết để usecase hoạt động
• Viết lại bản nháp đặc tả usecase đầu tiên
- Bước 3 (Cột mốc 2) : Đánh giá lại khâu phân tích và thiết kế sơ bộ.
- Bước 4 : Thiết kế chi tiết
• Mô hình sequence: Dựa trên bản nháp đặc tả usecase đầu tiên vẽ ra các sơ
đồ trình tự. Mục tiêu của bước này là xác định ra các hành vi của các lớp.
• Cập nhật lại các mô hình domain trong khi đang vẽ sở đồ trình tự. Ở bước
này mô hình miền (domain model) gần như tiến sát đến mô hình lớp (class
diagram) vì chúng ta xác định được thêm các thuộc tính và các phương
thức ở bước này.
• Tinh chỉnh lại các mô hình tĩnh
- Bước 5 (Cột mốc 3) : Đánh giá lại khâu phân tích một cách kỹ lưỡng và chi tiết
trước khi đi vào hiện thực chương trình.
- Bước 6 : Hiện thực chương trình:
• Lập trình và kiểm thử tưng đơn vị nhỏ: Dựa vào các bản thiết kế ở các
bước trên tiến hành việc lập trình và kiểm thử từng đơn vị nhỏ(các hàm
trong các class).
• Tích hợp các chức năng lại với nhau và kiêm thử theo kịch bản và tình
huống như đặc tả usecase
• Xem lại sự tương đương giữa các đoạn mã và cập nhật lại các mô hình để

chuẩn bị cho khâu tiếp theo của việc phát triển hệ thống.
2.1.2. Điểm khác biệt giữa qui trình ICONIX và các qui trình khác:
Qui trình ICONIX đưa ra cách để làm sao từ bước đặc tả usecase đến bước
hiện thực chương trình một cách nhanh và hiệu quả nhất, giảm tải một số khâu chiếm
quá nhiều thời gian trong các qui trình lớn khác, ví dụ như qui trình RUP thường xảy
ra tình trạng analysis paralysis( tê liệt phân tích).
Việc đưa thêm lược đồ vững mạnh(robustness diagram) giúp cho việc vẽ các
lược đồ tuần tự(sequence diagram) và các mô hình lớp(class diagram) dễ dàng hơn.
Lược đồ vững mạnh là cầu nối giữa các bản đặc tả usecase và việc vẽ các lược đồ
tuần tự, giúp cho người thiết kế tách bạch rõ ràng các hành vi của hệ thống, hạn chế
sự nhập nhằng và thiếu sót khi vẽ lược đồ tuần tự, bởi vì khi vẽ các robustness
10
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
diagram chúng ta sẽ khám phá ra các chức năng hành vi ẩn mà không nhìn thấy được
lúc viết đặc tả usecase. Nhờ đó mà lược đồ tuần tự khi vẽ sẽ sát với yêu cầu thực tế
của khách hàng hơn.
Đưa ra mô hình lĩnh vực(domain modeling): đây là mô hình tiền thân của mô
hình lớp (class diagram). Mô hình này được đưa ra trước tiên nhằm đưa ra một từ
điển thuật ngữ sử dụng trong dự án. Mục đích là làm cho mọi người hiểu rõ hơn về
không gian của dự án bằng các thuật ngữ rõ ràng. Mô hình này giúp xác định phạm
vi và các hình thức – nền tảng của việc xây dựng các trường hợp sử dụng( usecases).
Mô hình này cũng giúp cho việc trao đổi giữa các thành viên trong dự án được thuận
tiện và dễ hiểu hơn dựa vào bảng các thuật ngữ được đưa ra.
Bản đặc tả usecase được cập nhật dần theo từng cột mốc của qui trình phát
triển, các qui trình khác thường yêu cầu bản đặc tả usecase chi tiết và bao quát được
hết các luồng đi khác của usecase tại một khâu trong qui trình.
2.1.3. Tại sao lại chọn qui trình ICONIX:
- Chỉ cần sử dụng một tập con các lược đồ lõi của UML: dùng 4 trong 14 lược đồ của
UML.
- Qui trình này dễ dàng được theo dõi ngay từ bước đầu tiên của việc phát triển dự án.

- Các đặc tả uscase bao quát được hết toàn bộ các bổi cảnh của usecase, và được cập
nhật lại sau bước vẽ robustness diagram và sequence diagram.
- Hướng đến việc thiết kế dự án theo hướng đối tượng từ các usecase.
- Là qui trình thực tế đã được kiểm chứng qua nhiều dự án lớn.
2.1.4. Áp dụng qui trình ICONIX vào khóa luận:
Qui trình ICONIX là một qui trình rất hay trong việc phát triển phần mềm, để
áp dụng được qui trình ICONIX một cách hiệu quả đòi hỏi nhiều kinh nghiệm làm
việc thực tế.
Trong quá trình làm khóa luận này nhóm đã tìm hiểu và vận dụng được những
kiến thức sau:
- Khâu phân tích yêu cầu.
- Khâu phân tích thiết kế sơ bộ.
- Thiết kế chi tiết.
11
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
2.2. CÔNG NGHỆ NỀN TẢNG:
Trong mục này sẽ giới thiệu về 3 công nghệ được áp dụng vào khóa luận đó là:
Spring, JSF, Hibernate.
2.2.1. Spring framework:
2.2.1.1. Tổng quan về spring:
Spring framework là một bộ khung hỗ trợ lập trình ứng dụng bằng ngôn ngữ
JAVA. Spring được phát triển bởi Rod Johnson và được giới thiệu lần đầu tiên
trong cuốn Expert One-on-One J2EE Design and Development năm 2002.
2.2.1.2. Các thành phần chính của Spring:
Hình 2.2.1.2a. Các Thành Phần Của Spring
 Spring Core Container: Core container cung cấp chức năng cơ bản của
Spring. Thành phần chính của nó là Bean Factory, một cài đặt của Factory
pattern. BeanFactory áp dụng IoC pattern để tách bạch và giảm sự phụ
thuộc giữa các thành phần của ứng dụng.
 Spring Context/Application Context: Spring context là một file cấu

hình để cung cấp thông tin ngữ cảnh của Spring. Spring context cung cấp
các dịch vụ cấp cao như truy cập JNDI, tích hợp EJB, e-mail,
internalization, validation, và scheduling functionality.
 Spring AOP (Aspect-Oriented):
12
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
o Lập trình hướng khía cạnh(aspect oriented programing) là một sự
bổ sung thêm cho lập trình hướng đối tượng, giúp cho các lập trình
viên tập trung vào phần xử lý nghiệp vụ hơn thay vì phải lặp đi lặp
lại các đoạn mã cùng thực hiện một chức năng nào đó nhiều lần, ví
dụ như: ghi nhật ký(logging), thực thi các giao tác(transaction).
o Spring AOP module tích hợp chức năng lập trình hướng khía cạnh
vào Spring framework thông qua cấu hình của nó. Spring AOP
module cung cấp các dịch vụ quản lý giao dịch cho các đối tượng
trong bất kỳ ứng dụng nào sử dụng Spring.
o Với Spring AOP chúng ta có thể tích hợp declarative transaction
management vào trong ứng dụng mà không cần dựa vào EJB
component. Spring AOP module cũng đưa lập trình metadata vào
trong Spring. Sử dụng cái này chúng ta có thể thêm ký
pháp(annotation) vào mã trình(source code) để hướng dẫn Spring,
nơi và làm thế nào để liên hệ với các khía cạnh (aspects).
 Spring DAO: Tầng JDBC và DAO đưa ra một cây phân cấp các ngoại
lệ(exception) để quản lý kết nối đến cơ sở dữ liệu(database), kiểm soát
ngoại lệ và thông báo lỗi được ném ra bởi các nhà cung cấp cơ sở dữ liệu.
Tầng ngoại lệ(exception) đơn giản là kiểm soát lỗi và giảm khối lượng mã
nguồn mà chúng ta cần viết như mở và đóng kết nối. Module này cũng
cung cấp các dịch vụ quản lý giao dịch cho các đối tượng trong ứng dụng
Spring.
 Spring ORM: Spring có thể tích hợp với một vài ORM framework để
cung cấp Object Relation tool bao gồm: JDO, Hibernate, OJB và iBatis

SQL Maps.
 Spring Web module: Nằm trên application context module, cung cấp các
ngữ cảnh cho các ứng dụng web, hỗ trợ tích hợp với các bộ khung làm
13
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
việc nổi tiếng khác như Struts, JSF và Webwork… Web module cũng làm
giảm bớt các công việc điều khiển nhiều request và gắn các tham số của
request vào các đối tượng domain.
 Spring MVC Framework: MVC Framework thì cài đặt đầy đủ đặc tính
của MVC pattern để xây dựng các ứng dụng Web. MVC framework thì
cấu hình thông qua giao diện và chứa được một số kỹ thuật view bao
gồm: JSP, Velocity, Tiles và generation of PDF và Excel file.
2.2.1.3. Trình bày cơ chế đảo ngược kiểm soát (Inversion of Control) và tiêm
sự phụ thuộc (Dependence Injection)
Hình 2.2.1.3a. Tổng quan về Spring IOC
14
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
- Cơ chế Inversion of Control dịch ra là cơ chế đảo ngược sự kiểm soát,
nhằm giảm tải mức độ phụ thuộc giữa các đối tượng. Với sự hỗ trợ của cơ
chế đảo ngược sự kiểm soát này chúng ta không cần phải tạo đối tượng
ngay trong mã nguồn mà mô tả chúng sẽ được tạo ra thế nào, hơn thế nữa,
chúng ta không cần không cần phải kết nối các thành phần(components)
và các dịch vụ(services) một cách trực tiếp mà chỉ cần mô tả thành phần
nào cần dịch vụ nào trong một tập tin cấu hình.
- Để hiểu rõ hơn ta đi vào ví dụ sau:
Ví dụ này sẽ có một lớp là Speaker(hiểu nôm na là cái loa) và có một phương thức là
sayHello().
Hình 2.2.1.3b.
Cài đặt một hàm main ngay trong lớp để test cho nhanh
15

XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Hình 2.2.1.3c.
Trong hàm main bên trên chúng ta có truy cập đến một tập tin tên là beans.xml. Tập
tin này rất quan trọng đối với các ứng dụng chạy trên Spring. Nó chứa các thông tin cấu
hình của các bean được dùng trong ứng dụng. Với ví dụ này thì nội dung tập tin beans.xml
như sau:
Hình 2.2.1.3d.
Bây giờ chạy hàm main thì dòng chữ Hello Spring sẽ được in ra.
Mặc dù là một ví dụ đơn giản nhưng cũng giúp bạn hình dung phần nào về Spring. Nó sẽ
giúp ích rất nhiều cho bạn khi đi vào các khái niệm khá phức tạp của Spring sau này.
Như đã thấy trong hàm main, việc khởi tạo đối tượng Speaker từ lớp Speaker không làm
theo cách truyền thống mà là:
Speaker speaker = new Speaker();
Thay vào đó, speaker được tạo thành bằng cách:
Speaker speaker = (Speaker)factory.getBean(“Speaker”);
Trong đó, factory là một đối tượng của lớp BeanFactory (Spring có hơn một ngàn
lớp/interface như vậy) có tác dụng như một nhà máy sản xuất (tạo ra) các đối tượng khi
người dùng đưa các yêu cầu vào, ở trường hợp này người dùng đã yêu cầu factory tạo ra 1
đối tượng từ mẫu có tên là Speaker.
Quan ví dụ trên chúng ta chỉ mới thấy được thay vì phải tạo đối tượng trong hàm
main thì lại tạo bằng cách của Spring, tuy nhiên vẫn chưa thấy rõ lắm sự khác biệt. Để hiểu
rõ hơn ta mở rộng ví dụ thêm như sau:
16
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Bây giờ, giả sử các cái loa trước khi sayHello thì cần phải đi qua một bộ phiên dịch
Translator. Ta sẽ viết lớp Translator có một phương thức traslate in ra dòng chữ Hello. Để
lớp này có thể in ra được nhiều thứ tiếng ta sẽ viết dưới dạng 1 interface:
public interface Translator{ public void translate(); }
Sau đó viết lớp EnglishTranslator để hiện thực interface này:
Hình 2.2.1.3e.

Ta thêm vào lớp Speaker thêm một thuộc tính gọi là translator
Hình 2.2.1.3e.
Tiếp đến viết hàm main để chạy thử. Trong hàm main này không dùng Spring để tạo
đối tượng nữa mà dùng theo cách truyền thống như sau để so sánh sự khác biệt:
17
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Hình 2.2.1.3f.
Chạy thử sẽ in ra câu chào bằng tiếng Anh. Nếu không thích tiếng anh ta có thể in ra
câu chào bằng tiếng Việt bằng cách viết tiếp một class VietnameseTranslator như sau:
Hình 2.2.1.3g.
Để in ra đuợc tiếng Việt ta phải chỉnh lại hàm main một chút. Thay vì viết:
Translator translator = new EnglishTranslator();
Ta viết:
Translator translator = new VietnameseTranslator();
Như vậy rõ ràng sự bất tiện xuất hiện mỗi khi ta muốn thay đổi qua lại giữa tiếng
Anh và tiếng Việt. Sự phụ thuộc giữa đối tượng thuộc lớp Speaker và Translator được giải
quyết trong chương trình nghĩa là khi nào muốn tiếng Việt thì ta chỉnh lại đoạn code một ít.
Sự điều khiển (control) phụ thuộc (dependency) giữa các đối tượng do chương trình đảm
trách. Nó là cách thông thường ta vẫn làm. Gọi là sự điều khiển bình thường.
Bây giờ ta sửa lại hàm main để sử dụng Spring:
18
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Hình 2.2.1.3h.
Ta thấy hàm main bây giờ không dính dáng gì đến Vietnamese và English
nữa.
Sửa lại file beans.xml
Hình 2.2.1.3i.
File beans.xml bây giờ đảm nhận việc lắp ráp EnglishTranslator hoặc là
VietnameseTranslator. Sự điều khiển (control) đã được đảo ngược (inversion) sang cho
BeanFactory đảm trách. Hay nói cách khác Spring đã tiêm đối tượng EnglishTranslator

(hoặc là VietnameseTransslator) vào trong đối tượng Speaker (Injection Dependency). Đó là
nguyên lý chính yếu nhất, nổi tiếng nhất của Spring.
2.2.2. JSF:
19
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
2.2.2.1. Tổng quan về JSF
JSF là một bộ khung làm việc (framework) được phát triển dự trên mẫu thiết
kế(design pattern) MVC(một trong những mẫu thiết kế nổi tiếng thường dùng cho
các hệ thống lớn). JSF bao gồm các thành phần giao diện phía server và các API để
trình bày các gói giao diện người dùng, quản lý trạng thái của các gói đó, xử lý các
sự kiện phát ra từ các gói giao diện khi người dùng thao tác lên các gói giao diện đó,
xác thực dữ liệu, chuyển đổi dữ liệu, phân luồng điều hướng giữa các trang, hỗ trợ
đa ngôn ngữ và cung cấp các mở rộng cho các gói giao diện người dùng này.
JSF tách bạch rõ ràng giữa phần giao diện người dùng và các hành vi tương
ứng của các thành phần. Lấy một ví dụ đơn giản: khi người dùng nhấp chuột vào một
nút trên giao diện trang web(UI component) thì sẽ phát ra một sự kiện để gửi đến
backing bean(sẽ được trình bày phần sau) đang chờ lắng nghe và xử lý sự kiện được
phát ra từ nút đó.
2.2.2.2. Các thành phần quan trọng của JSF:
UI Component (còn gọi là một control hay đơn giản là component) : một
đối tượng có trạng thái, được chứa trên server, cung cấp các chức năng cụ thể để
tương tác với một người dùng cuối. UI component là những JavaBean với các
thuộc tính, phương thức, sự kiện. Chúng được tổ chức thành một cây các
component thường hiển thị như một trang.
Renderer: Trả lời cho việc hiển thị một UI component và trao đổi một dữ
liệu nhập của người dùng vào giá trị của component. Renderer có thể được thiết
kế để làm việc với một hoặc nhiều UI component, và một UI component có thể tập
hợp với nhiều renderer khác nhau.
Validator: Trả lời cho việc chắc chắn rằng giá trị nhập vào bởi người dùng
được chấp nhận. Một hoặc nhiều validator có thể được tập hợp với một UI

component
Backing beans: Các Java Bean xác định tập hợp các giá trị từ các UI
component và bổ sung các phương thức lắng nghe cho các sự kiện(event listener).
Chúng cũng có thể nắm giữ các tham chiếu đến các UI component.
Converter: Chuyển đổi một giá trị của component thành một chuỗi để hiển
thị. Một UI component có thể được tập hợp với một converter duy nhất.
20
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Event/listener: JSF sử dụng mô hình event/listener JavaBeans (cũng được
sử dụng cho Swing). UI component (và những đối tượng khác) tạo ra các event, và
các listener có thể đăng ký để xử lý các sự kiện. Các backing bean sẽ hiện thực các
phương án để xử lý các sự kiện phát ra từ các UI component.
Messages: Thông tin hiển thị cho người dùng. Chỉ bất kỳ thành phần ứng
dụng trong (backing beans, validators, converter …) có thể tạo ra thông tin hoặc
thông điệp lỗi nhằm hiển thị cho Người dùng.
Navigation: Khả năng định vị và điều phối từ trang này đến trang khác. JSF
có một hệ thống định vị mạnh mẽ tích hợp với những event listeners(bộ lắng nghe sự
kiện).
2.2.2.3. Vòng đời của việc xử lý request: gồm 6 bước
Hình 2.2.2.3a.
Bước 1: Restore View: Hiển thị thay thế tất cả các component tạo nên một
trang cụ thể. Nó có thể lưu trữ trên client (thông thường trong một field ẩn trên trình
duyệt) hoặc trên server (thông thường trong session)
Bước 2: Apply Request Values: Mỗi UI component chấp nhận dữ liệu nhập
có một giá trị được submit thay thế giá trị dữ liệu gốc từ user. Trong suốt bước này,
21
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
framework ấn định giá trị được submit dựa trên tham số gởi đi trong request. Quá
trình này gọi là decoding.
Bước 3: Process Validation: trong bước này, JSF đặt cây component và hỏi

mỗi component có chắc chắn rằng giá trị submit là có thể chấp nhận không. Bởi vì
giá trị được submit của mỗi component nhập vào được cập nhật bởi bước 2,
component bây giờ có hầu hết dữ liệu hiện thời của user. Trước khi validation xảy
ra, giá trị được submit được chuyển đổi, bằng mỗi converter đã đăng ký cho
component hoặc converter mặc định.
Bước 4: Update Model Values: Bây giờ chúng ta đã chắc chắn về giá trị
cục bộ của các component đã được cập nhật và chính xác và đúng kiểu, có thể
chuyển đi với bất kỳ bean nào được tập hợp hoặc mô hình các đối tượng. Bởi vì các
đối tượng được tập hơp với các component thông qua các phát biểu JSF EL, đây là
nơi các phát biểu này được kiểm tra và các thuộc tính được cập nhật dựa trên giá trị
cụ bộ của component.
Bước 5: Invoke Application: Gửi dữ liệu xuống cho các phương thức ở các
cấp phái dưới xử lý( hay gọi các hàm ở cấp dưới). Bước này xảy ra trong backing-
beans.
Bước 6: Render Response: Tại thời điểm này, tất cả xử lý bởi framework
và ứng dụng đã hoàn tất. Tất cả chờ được gởi đi trả lời cho người dùng, và đây là
mục tiêu chính của bước này. Mục tiêu thứ hai là lưu lại trạng thái hiển thị để nó có
thể được phục hồi trong bước Restore View nếu user yêu cầu lại. Trạng thái hiển thị
lưu lại trong bước này bởi vì thường thì hiển thị được lưu trên phía máy khách(phía
người dùng), vì thế nó là một phần của phản hồi nhằm gởi trả cho người dùng.
Trong trường hợp này, JSF đang lưu trạng thái trên server, vì thế hiển thị hầu hết
được lưu trữ trong session của người dùng.
2.2.3. Hibernate:
2.2.3.1. Tổng quan về hibernate
Hiện nay các hệ quản trị CSDL dựa trên mô hình quan hệ, hệ quản trị
CSDL đối tượng gần cũng đã được một số hãng CSDL như Oracle phát triển
nhưng cũng chưa phổ biến. Trong khi đó xu hướng lập trình hiện tại lại chủ yếu
theo phương pháp hướng đối tượng. Như vậy để lưu trữ các đối tượng bạn phải
22
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM

ánh xạ và xây dựng các bảng để lưu trữ và ánh xạ các điều kiện sang các câu truy
vấn. Công việc này phải lặp đi lặp lại khiến lập trình viên thấy nhàm chán và việc
truy cập không được hoàn toàn linh hoạt, hơn nữa không mấy ai giỏi cả về lập
trình lẫn quản trị CSDL. Vì thế Hibernate framework ra đời nhằm giúp gắn kết
việc lập trình hướng đối tượng và CSDL quan hệ. Đối với người lập trình thì mọi
câu truy vấn đều có thể thực hiện trên đối tượng và họ gần như trong suốt đối với
việc lưu trữ CSDL như thế nào. Còn với người quản trị CSDL thì họ cũng chỉ cần
quan tâm đến việc tối ưu hóa CSDL của mình.
Hibernate là một bộ khung(framework) mã nguồn mở ánh xạ giữa đối
tượng và các mối quan hệ của các đối tượng dựa trên mối quan hệ các bảng của
hệ cơ sở dữ liệu quan hệ. Hibernate giúp cho các lập trình viên hạn chế việc phụ
thuộc quá nhiều vào các JDBC API. Hibernate hỗ trợ tất cả các hệ cơ sở dữ liệu
lớn. Đặc biệt HQL (Hibernate Query Language) được thiết kế như là một mở
rộng cho SQL, cung cấp một cầu nối giữa đối tượng và các mối quan hệ giữa các
đối tượng lại với nhau. Hibernate cung cấp các cơ chế truy vấn, cập nhật dữ liệu,
quản lý giao tác, khai báo các câu lệnh truy vấn và định nghĩa các mối quan hệ
giữa các thực thể.
2.2.3.2. Vòng đời của đối tượng trong Hibernate:
23
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
Hình 2.2.3.2a.
Dựa vào hình trên ta có thể thấy được trạng thái của các đối tượng có thể
được chuyển đổi từ trạng thái transient sang trạng thái persistent và từ trạng thái
persistent sang trạng thái detached. Dưới đây là các chú giải về các trạng thái của
đối tượng trong hibernate và các phương thức tương ứng.
Trong Hibernate một đối tượng có thể có 3 trạng thái:
- Transient: Khi một đối tượng được khởi tạo thì nó không được lưu trữ
ngay lập tức vào cơ sở dữ liệu mà nó được lưu tạm trên bộ nhớ. Đối tượng
này không có quan hệ với session hiện tại của Hibernate,ta có thể hiểu
nôm na là đối tượng này chưa liên quan đến dòng nào trong cơ sở dữ liệu

và có thể bị thu gom bởi garbage collector khi không còn được tham
chiếu bởi bất kì đối tượng nào.
- Persistent: Đối tượng có quan hệ với session hiện tại của Hibernate và
trạng thái của nó được đồng bộ với một dòng dữ liệu hợp lệ trong cơ sở dữ
liệu. Đối tượng ở trạng thái này được khởi tạo khi thực thi hàm save().
Khi một đối tượng persistent tham gia một giao tác thì đối tượng này sẽ
được đồng bộ hóa với cơ sở dữ liệu khi giao tác này được hoàn tất. Đôi
khi đối tượng persistent được đồng bộ hóa với cơ sở dữ liệu trước khi
giao tác được hoàn tất để chắc chắn rằng giao tác này biết được những
thay đổi của giao tác thực thi trước đó.
Khi giao tác này kết thúc, các đối tượng persistent sẽ chưa cập nhật vào cơ
sở dữ liệu, hibernate sẽ kiểm tra những đối tượng nào bị thay đổi và chỉ cập nhật
chúng vào cơ sở dữ liệu. Tiến trình này được gọi là dirty checking. Dirty objects là
các đối tượng đã được thay đổi nhưng chưa được đồng bộ hóa vào cơ sở dữ liệu.
Tiến trình này làm tăng hiệu hiệu suất của một số hệ cơ sở dữ liệu nhưng cũng làm
giảm hiệu suất đối với một số hệ cơ sở dữ liệu khác. Do đó Hibernate cho phép
Người dùng có thể thiết lập cơ chế này bằng cách thêm thuộc tính dynamic-update
= “true” trong lớp ánh xạ(mapping class), với cách này hibernate sẽ tự động sinh ra
các đoạn mã SQL để chỉ cập nhật trường nào bị thay đổi.
24
XÂY DỰNG WEBSITE HỖ TRỢ TÌM KIẾM VIỆC LÀM
- Detached: Đối tượng đã từng có trạng thái persistent nhưng hiện tại đã
không còn giữ quan hệ hoặc liên quan với session. Ở đây chúng ta nói một
đối tượng có quan hệ với Session nghĩa là session có tham chiếu đến đối
tượng đó, hay một cách khác là chịu sự quản lý của session. Các đối tượng
có trạng thái detached sẽ được giải phóng bởi garbage collector của JVM.
2.2.3.3. Giải thích về các phương thức được dùng trong vòng đời của các đối
tượng trong hibernate:
- save(): dùng để lưu một đối tượng với trạng thái transient thành đối tượng
persistent trả về mã đối tượng(id), persist() giống save() nhưng không trả

về gì cả.
- saveOrUpdate(): nếu là đối tượng mới thì lưu xuống db, nếu không thì
update xuống cơ sở dữ liệu, cái này sẽ chọn ra để kiểm tra trước khi save
hoặc update.
- merge(): kiểm tra xem có đối tương nào với mã số(id) như thế tồn tại
trong session không, nếu có thì update vào đối tượng đã tồn tại đó, nếu
không thì tạo mới một đối tượng và save xuống.
- load(): dùng để load một đối tượng từ database lên, nó sẽ có trạng thái
persistent, ném ra ngoại lệ(throw exception) nếu mã đối tượng(id) không
tồn tại.
- get(): giống load(), trả về null nếu không tồn tại.
- refresh(): làm tươi mới(refresh) một đối tượng đang ở trạng thái
persistent.
- delete(): load đối tượng lên và xoá nó đi, nếu không muốn load lên thì
dùng session.createQuery(“delete from user where”).executeUpdate().
- evict(): tách một đối tượng ra khỏi session, biến nó từ trạng thái persistent
thành transient.
- isDirty(): Các dirty objects là những đối tượng bị thay đổi nhưng chưa
được đồng bộ hóa với cơ sở dữ liệu. Hibernate cho phép Người dùng có
thể thiết lập cơ chế này bằng cách thêm thuộc tính dynamic-update =
“true” trong lớp ánh xạ(mapping class), với cách này hibernate sẽ tự động
sinh ra các đoạn mã SQL để chỉ cập nhật trường nào bị thay đổi. Hàm
isDirty() kiểm tra xem session có đồng bộ hóa với cơ sở dữ liệu hay
không.
25

×