93
PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP 1. Mục đích nội dung của ĐATN Tìm hiểu công nghệ Struts, Hibernate và Spring. Xây dựng Demo ứng dụng tuyển dụng. 2. Các nhiệm vụ cụ thể của Đồ án tốt nghiệp Thực tập tại công ty TriaxVN để tìm hiểu về công nghệ Struts, Hibernate và Spring. Tìm hiểu nghiệp vụ và phân tích bài toán tuyển dụng. Xây dựng và cài đặt chương trình ứng dụng Demo. 3. Lời cam đoan của sinh viên: Tôi – Nguyễn Tuấn Minh – cam kết ĐATN là công trình nghiên cứu của bản thân tôi dưới sự hướng dẫn của Ths. Bùi Thị Hòa. Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn của bất kỳ công trình nào khác. Hà Nội, ngày 20 tháng 5 năm 2008 Tác giả ĐATN Nguyễn Tuấn Minh 4. Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảo vệ : Hà Nội, ngày 20 tháng 5 năm 2008 Giáo viên hướng dẫn Ths. Bùi Thị Hòa

[123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Embed Size (px)

Citation preview

Page 1: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

PHIẾU GIAO NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

1. Mục đích nội dung của ĐATN

Tìm hiểu công nghệ Struts, Hibernate và Spring.

Xây dựng Demo ứng dụng tuyển dụng.

2. Các nhiệm vụ cụ thể của Đồ án tốt nghiệp

Thực tập tại công ty TriaxVN để tìm hiểu về công nghệ Struts, Hibernate và Spring.

Tìm hiểu nghiệp vụ và phân tích bài toán tuyển dụng.

Xây dựng và cài đặt chương trình ứng dụng Demo.

3. Lời cam đoan của sinh viên:

Tôi – Nguyễn Tuấn Minh – cam kết ĐATN là công trình nghiên cứu của bảnthân tôi dưới sự hướng dẫn của Ths. Bùi Thị Hòa.

Các kết quả nêu trong ĐATN là trung thực, không phải là sao chép toàn văn củabất kỳ công trình nào khác.

Hà Nội, ngày 20 tháng 5 năm 2008Tác giả ĐATN

Nguyễn Tuấn Minh

4. Xác nhận của giáo viên hướng dẫn về mức độ hoàn thành của ĐATN và cho phép bảo vệ :

Hà Nội, ngày 20 tháng 5 năm 2008Giáo viên hướng dẫn

Ths. Bùi Thị Hòa

Page 2: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆP

Nội dung của đồ án này bao gồm những công việc sau:

Tìm hiểu về xu hướng phát triển ứng dụng Web trong giai đoạn hiện nay, thếhệ Web 2.0 và kỹ thuật AJAX.

Nghiên cứu, tìm hiểu công nghệ Struts, Hibernate và Spring. Đây là các côngnghệ mã nguồn mở nổi tiếng nhất trong lĩnh vực lập trình ứng dụng Web dựatrên ngôn ngữ Java sử dụng theo mô hình MVC.

Áp dụng các công nghệ Struts, Hibernate, Spring và Ajax để xây dựngchương trình ứng dụng tuyển dụng trực tuyến.

Với những nội dung của đồ án được trình bày như trên, báo cáo đồ án tốt nghiệpđược chia thành 3 chương. Nội dung của mỗi chương được trình bày như sau:

Chương 1: Giới thiệu chung về xu hướng phát triển các ứng dụng Webtrong những năm gần đây. Trong đó, bao gồm việc tìm hiểu về công nghệWeb 2.0, kỹ thuật lập trình Ajax, kiến trúc J2EE trong Java và sơ lược mộtsố Framework mã nguồn mở nổi tiếng trong xây dựng ứng dụng Web dựatrên ngôn ngữ Java.

Chương 2: Tập trung đi sâu tìm hiểu các công nghệ Struts, Hibernate vàSpring với việc kế thừa các ưu điểm của mô hình lập trình Web điển hình:mô hình MVC. Đồng thời phân tích, đánh giá các điểm mạnh và điểm yếucủa từng framework trong quá trình tích hợp xây dựng ứng dụng Web.

Chương 3: Dựa vào những kiến thức đã nghiên cứu từ chương 1 vàchương 2. Ở chương 3, tác giả áp dụng chúng để xây dựng một bài toándemo, đó là bài toán tuyển dụng. Đây là một bài toán mang nhiều ý nghĩathực tế và hoàn toàn có thể triển khai thành ứng dụng trong xã hội. Tuynhiên, do thời gian hạn chế và do kinh nghiệm của người thiết kế còn thiếunhiều nên bài toán mới chỉ dừng lại với một số module nhất định. Tác giảcũng hi vọng ứng dụng có thể được xây dựng hoàn chỉnh và triển khaiđược trong thời gian sắp tới.

Phần kết luận và đánh giá : Trong phần này, tác giả đưa ra một số kết quả đã thựchiện được trong quá trình thực hiện đồ án tốt nghiệp. Đồng thời đưa ra một số đánhgiá về chương trình cũng như một số giải pháp và hướng phát triển của các côngnghệ Struts, Hibernate và Spring trong tương lai.

Page 3: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

ABSTRACT OF THESIS

The content of this thesis includes the following parts :

Research on the trend of Web application development nowadays, web 2.0 generation as well as AJAX technique.

Studying and doing research Struts, Hibernate and Spring technology. Theyare the best open source code technology in field of Web applicationprograming based on Java language and using MVC model.

Using Struts, Hibernate, Spring and Ajax technology to build a onlineapplication programe.

As the content was stated in the above paragraph, graduation thesis divide into 3chapters. The content of each chapter was disposed in the following detail :

Chapter 1: General introduction about trend of web applicationdevelopment in some recent years. This chapter focus on studying web2.0 technology, Ajax programing technique, J2EE architecture in Java aswell as some the best open source code Frameworks in web applicationbased on Java language.

Chapter 2: This chapter goes into the details of Struts, Hibernate andSpring technology by inheriting advantages of typical Web programingmodel: MVC model. At the same time, this part analyses and evaluatesstrengths and weaknesses of each framework in Web application,construction and integration process.

Chapter 3: Base on recherches from two chapters above, the author, inthis chapter, applies theses knowledges to design a demo. This is arecruitment demo (program) which is significant in pratice and capableof applying in the society. However, because of lack of time andexperiences, the program limits at some modules. The author hopes thatthis program will be fullfilled and applied in the near future.

Conclusion and assess: In this part, the author gives some results achieved incompleting graduation thesis. Also, the author evalutates and gives some solutionsand orientation to develop Struts, Hibernate and Spring technology in the future.

Page 4: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

LỜI NÓI ĐẦU

Ngày nay, ngành công nghệ thông tin đang phát triển như vũ bão và đi vào mọimặt của đời sống, kinh tế, xã hội của con người. Đóng góp vào sự phát triển đó, vaitrò của Web ngày càng trở nên quan trọng và là một công cụ đắc lực dẫn tới mọithành công trong nhiều lĩnh vực trọng điểm. Với sự bùng nổ của truyền thông nhưhiện nay thì Web là phương thức lan truyền thông tin nhanh chóng, hiệu quả vàkinh tế nhất. Rất nhiều tập đoàn sản xuất phần mềm lớn như IBM, Microsoft, SunMicroSystem … đã tham gia vào lĩnh vực xây dựng và phát triển các ứng dụngWeb. Tuy nhiên, các ứng dụng Web phát triển nhanh và mạnh mẽ như hiện naykhông thể không kể đến một cộng đồng, đó là cộng đồng mã nguồn mở. Sự đónggóp của họ là vô cùng lớn lao với mục đích cao cả là phát triển công nghệ và phụcvụ cộng đồng. Rất nhiều dự án lớn đã ra đời từ cộng đồng mã nguồn mở, có thể kểđến một số framework nổi tiếng như : Struts, Hibernate, Spring, JSF …

Ở Việt Nam, phát triển các ứng dụng Web là hướng đi đầy tiềm năng và hứa hẹncho tất cả những ai yêu thích công nghệ thông tin nói chung và những kỹ sư phầnmềm nói riêng.

Với tư cách là một kỹ sư phần mềm tương lai cùng với niềm đam mê công nghệWeb, đặc biệt là các công nghệ mã nguồn mở, em đã chọn cho mình đề tài “Côngnghệ Struts, Hibernate và Spring trong xây dựng ứng dụng Web Tuyển dụng”.Trong thời gian thực hiện đồ án, nghiên cứu, tìm hiểu công nghệ em đã đạt đượcmột số kết quả nhất định. Đó là cơ sơ quan trọng giúp em nắm bắt công nghệ và cóthể làm việc tốt sau này.

Để có thể hoàn thành đồ án, đó là nhờ công lao to lớn của các thầy cô giáotrong trường Đại học Bách Khoa Hà Nội nói chung và các thầy cô trong khoaCông nghệ Thông tin, bộ môn công nghệ phần mềm nói riêng. Em xin gửi tới cácthầy cô lời cám ơn chân thành nhất.

Em xin cám ơn cô Bùi Thị Hòa – Giảng viên chính bộ môn Công nghệ phầnmềm, khoa Công nghệ Thông tin, trường Đại học Bách Khoa Hà Nội đã nhiệttình giúp đỡ, hướng dẫn, chỉ bảo tận tình trong suốt thời gian em làm đồ án tốtnghiệp.

Em cũng xin gửi lời cám ơn đến Công ty Triax Việt Nam, các anh chị trongcông ty: Anh Shishikura, chị Khánh Ngọc, anh Việt, anh Công… đã tạo mọi điềukiện, giúp đỡ và góp ý để em có thể hoàn thành tốt đồ án.

Cuối cùng, em xin gửi lời cám ơn chân thành tới gia đình, bạn bè đã động viên,chăm sóc, đóng góp ý kiến và giúp đỡ trong quá trình học tập, nghiên cứu và thựchiện tốt đồ án tốt nghiệp.

Hà Nội, tháng 5 năm 2008

Sinh viên: Nguyễn Tuấn Minh

Page 5: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

MỤC LỤC

CHƯƠNG I : TỔNG QUAN VỀ CÔNG NGHỆ WEB JAVA TRONG NHỮNG NĂM GẦN ĐÂY...................................................................

I.1. Công nghệ Web 2.0....................................................................................I.2. Công nghệ AJAX........................................................................................

I.3. Kiến trúc J2EE trong xây dựng ứng dụng Web........................................I.3.1. Kiến trúc J2EE..................................................................................................

I.3.1.1. Java Servlet................................................................................................

I.3.1.2. JSP (Java Server Page).............................................................................

CHƯƠNG II : STRUTS , HIBERNATE, SPRING TRONG LẬP TRÌNH ỨNG DỤNG WEB.................................................................................

II.1. Một số khái niệm trong lập trình ứng dụng Web.....................................II.1.1. Framework là gì ?............................................................................................

II.1.2. Hai mô hình kiến trúc trong ứng dụng Web....................................................

II.1.2.1. Mô hình 1.................................................................................................

II.1.2.1.1. Đặc điểm............................................................................................

II.1.2.1.2. Ưu điểm.............................................................................................

II.1.2.1.3. Nhược điểm.......................................................................................

II.1.2.2 Mô hình 2..................................................................................................

II.1.2.2.1. Đặc điểm............................................................................................

II.1.2.2.2. Ưu điểm.............................................................................................

II.1.3. Mô hình Model – View – Controller (MVC)..................................................

II.1.3.1. Đặc điểm...................................................................................................

II.1.3.2. Model........................................................................................................

II.1.3.3. View..........................................................................................................

II.1.3.4. Controller.................................................................................................

II.1.3.5. Cơ chế tương tác giữa 3 thành phần trong ứng dụng..............................

II.1.3.6. Ưu điểm của mô hình MVC......................................................................

II.2. Struts framework.......................................................................................II.2.1. Lịch sử hình thành...........................................................................................

II.2.2. Tổng quan về kiến trúc hệ thống.....................................................................

II.2.3. Các thành phần trong Struts.............................................................................

II.2.3.1. Actions......................................................................................................

II.2.3.2. Interceptors..............................................................................................

II.2.3.3. Value Stack / OGNL.................................................................................

II.2.3.4. Result Types..............................................................................................

II.2.3.5. Results / View technologies......................................................................

II.2.4. Thư viện thẻ trong Struts.................................................................................

II.2.4.1. Thư viện thẻ trong version 2.xx................................................................

II.2.5. Cấu hình trong Struts.......................................................................................

II.2.5.1. Cấu hình trong version 2.xx.....................................................................

II.2.6. Ưu nhược điểm của Struts trong xây dựng ứng dụng Web.............................

Page 6: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

II.3. Hibernate framework................................................................................II.3.1. Lịch sử hình thành...........................................................................................

II.3.2. Một số khái niệm.............................................................................................

II.3.2.1. Các khái niệm liên quan đến object / relational persistence...................

II.3.2.2. Persistence layer......................................................................................

II.3.2.3. ORM (Object/Relational Mapping)..........................................................

II.3.3. Kiến trúc hệ thống...........................................................................................

II.3.4. Cấu hình trong Hibernate.................................................................................

II.3.5. Ưu nhược điểm của Hibernate trong lập trình ứng dụng Web........................

II.4. Spring framework.....................................................................................II.4.1. Lịch sử hình thành...........................................................................................

II.4.2. Các thành phần trong Spring...........................................................................

II.4.4. Cấu hình Spring...............................................................................................

II.4.5. Ưu điểm của Spring.........................................................................................

CHƯƠNG III : XÂY DỰNG ỨNG DỤNG TUYỂN DỤNG.............................

III.1. Giới thiệu bài toán tuyển dụng...............................................................III.1.1. Mục đích.........................................................................................................

III.1.2. Mục tiêu của hệ thống....................................................................................

III.2. Phân tích bài toán tuyển dụng................................................................III.2.1. Những yêu cầu về chức năng.........................................................................

III.2.1.1. Đối tượng người dùng và các chức năng................................................

III.2.1.2. Biểu đồ các Use Case..............................................................................

III.2.1.2.1. Actor: Admin (Người quản trị)........................................................

III.2.1.2.2. Actor: Company (Nhà tuyển dụng)..................................................

III.2.1.2.3. Actor: Advertiser (Nhà quảng cáo)..................................................

III.2.1.2.4. Actor: Candidate (Ứng viên)............................................................

III.2.2. Lựa chọn giải pháp công nghệ.......................................................................

III.2.2.1. Bảng chi tiết các chức năng....................................................................

III.3.1. Thiết kế dữ liệu...............................................................................................

III.3.1.1. Mô hình quan hệ thực thể.......................................................................

III.3.1.2. Thiết kế cơ sở dữ liệu..............................................................................

III.3.1.2.1. Bảng Account...................................................................................

III.3.1.2.2. Bảng Role.........................................................................................

III.3.1.2.3. Bảng AccountRole...........................................................................

III.3.1.2.4. Bảng Function..................................................................................

III.3.1.2.5. Bảng RoleFunction...........................................................................

III.3.1.2.6. Bảng Advertiser................................................................................

III.3.1.2.7. Bảng Adver_Content........................................................................

III.3.1.2.8. Bảng Job_Type.................................................................................

III.3.1.2.9. Bảng Company.................................................................................

III.3.1.2.10. Bảng Province................................................................................

III.3.1.2.11. Bảng Category................................................................................

Page 7: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

III.3.1.2.12. Bảng News.....................................................................................

III.3.1.2.13. Bảng Rec_Notice............................................................................

III.3.1.2.14. Bảng Occupation............................................................................

III.3.1.2.15. Bảng Candidate..............................................................................

III.3.1.2.16. Bảng Degree...................................................................................

III.3.1.2.17. Bảng Candidate_Degree.................................................................

III.3.1.2.18. Bảng Friend....................................................................................

III.3.1.2.19. Bảng Blog.......................................................................................

III.3.1.2.20. Bảng Blog_Comment.....................................................................

III.3.1.2.21. Bảng Work_Type...........................................................................

III.3.2. Thiết kế module..............................................................................................

III.3.2.1. Thiết lập môi trường lập trình................................................................

III.3.2.2. Mô hình thiết kế module..........................................................................

III.3.2.3. Thiết kế tầng Model.................................................................................

III.3.2.4. Thiết kế tầng View...................................................................................

III.3.2.5. Thiết kế tầng Controller..........................................................................

III.3.2.6. Các file cấu hình hệ thống......................................................................

III.3.3. Thiết kế giao diện Web..................................................................................

III.3.3.1. Thiết kế giao diện Admin........................................................................

III.3.3.2. Thiết kế giao diện người dùng................................................................

KẾT LUẬN VÀ ĐÁNH GIÁ...............................................................................

TÀI LIỆU THAM KHẢO...................................................................................

Page 8: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

MỤC LỤC HÌNH VẼ

Hình I.1 Mô hình “cổ điển” của một ứng dụng Web...............................................

Hình I.2 Mô hình sử dụng AJAX của một ứng dụng Web......................................

Hình I.3 Ứng dụng đa tầng trong J2EE....................................................................

Hình I.4 Mô hình ứng dụng Browser/Server............................................................

Hình 1.5 Cơ chế hoạt động của JSP.........................................................................

Hình II.1 Mô hình 1 về kiến trúc ứng dụng Web.....................................................

Hình II.2 Mô hình 2 về kiến trúc ứng dụng Web.....................................................

Hình II.3 Mô hình MVC trong kiến trúc ứng dụng Web.........................................

Hình II.4 Cơ chế tương tác giữa các thành phần trong mô hình MVC...................

Hình II.5 Vòng đời request trong ứng dụng Struts2................................................

Hình II.6 Persistence layer trong kiến trúc phân tầng..............................................

Hình II.7 Kiến trúc hệ thống trong Hibernate..........................................................

Hình II.8 Các module trong Spring..........................................................................

Hình III.1. Các nhóm sử dụng hệ thống...................................................................

Hình III.2 Sơ đồ phân rã chức năng.........................................................................

Hình III.3 Use Case Admin quản lý Advertiser.......................................................

Hình III.4 Use Case Admin quản lý Advertisment..................................................

Hình III.5 Use Case Admin quản lý Candidate........................................................

Hình III.6 Use Case Admin quản lý Company........................................................

Hình III.7 Use Case Admin quản lý News...............................................................

Hình III.8 Use Case Company quản lý Profile........................................................

Hình III.9 Use Case Company quản lý tin tức.........................................................

Hình III.10 Use Case Company quản lý thông tin tuyển dụng................................

Hình III.11 Use Case Advertiser quản lý quảng cáo................................................

Hình III.12 Use Case Candidate quản lý Profile......................................................

Hình III.13 Use Case Candidate quản lý Friends.....................................................

Hình III.14 Use Case Candidate quản lý Blog.........................................................

Hình III.15 Sơ đồ diễn tiến chức năng LogIn..........................................................

Hình III.16 Sơ đồ diễn tiến chức năng LogOut........................................................

Hình III.17 Sơ đồ diễn tiến chức năng Add News...................................................

Hình III.18 Sơ đồ diễn tiến chức năng Edit News...................................................

Hình III.19 Sơ đồ diễn tiến chức năng Delete News...............................................

Hình III.20 Sơ đồ diễn tiến chức năng Edit Profile.................................................

Hình III.21 Sơ đồ diễn tiến chức Add User.............................................................

Page 9: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.22 Sơ đồ diễn tiến chức năng Edit User.....................................................

Hình III.23 Sơ đồ diễn tiến chức năng Delete User.................................................

Hình III.24 Sơ đồ diễn tiến chức năng Company Search Candidate.......................

Hình III.25 Sơ đồ diễn tiến chức năng Company bookmarks Candidate................

Hình III.26 Sơ đồ diễn tiến chức năng Blog Individual...........................................

Hình III.28 Các gói module chính............................................................................

Hình III.29 Module admin........................................................................................

Hình III.30 Module User..........................................................................................

Hình III.31 Mô hình thiết kế Module theo Struts....................................................

Hình III.32 Mô hình thiết kế tầng trong Controller.................................................

Hình III.33 Màn hình Login.....................................................................................

Hình III.34 Màn hình giao diện chính......................................................................

Hình III.35 Màn hình hiển thị danh sách.................................................................

Hình III.36 Màn hình thêm mới, cập nhật................................................................

Hình III.37 Màn hình giao diện trang chủ................................................................

Page 10: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

DANH MỤC BẢNG

Bảng 1: Danh sách các chức năng............................................................................

Bảng 2: Bảng Account..............................................................................................

Bảng 3: Bảng Role....................................................................................................

Bảng 4: Bảng AccountRole......................................................................................

Bảng 5: Bảng Function.............................................................................................

Bảng 6: Bảng RoleFunction.....................................................................................

Bảng 7: Bảng Advertiser..........................................................................................

Bảng 8: Bảng Adver_Content..................................................................................

Bảng 9: Bảng Job_Type............................................................................................

Bảng 10: Bảng Company..........................................................................................

Bảng 11: Bảng Province...........................................................................................

Bảng 12: Bảng Category...........................................................................................

Bảng 13: Bảng News................................................................................................

Bảng 14: Bảng Rec_Notice......................................................................................

Bảng 15: Bảng Occupation.......................................................................................

Bảng 16: Bảng Candidate.........................................................................................

Bảng 17: Bảng Degree..............................................................................................

Bảng 18: Bảng Candidate_Degree...........................................................................

Bảng 19: Bảng Friend...............................................................................................

Bảng 20: Bảng Blog..................................................................................................

Bảng 21: Bảng Blog_Comment................................................................................

Bảng 22: Bảng Work_Type......................................................................................

Page 11: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

DANH MỤC CÁC THUẬT NGỮ VÀ CÁC TỪ VIẾT TẮT TRONGBÁO CÁO TỐT NGHIỆP

STT Từ viết tắt Viết đấy đủ Ý nghĩa

1 JSF JavaServer FacesMột framework trong lập trình ứng dụng Web dựa trên công nghệ Java

2 MVC Model-View-Controller Một mô hình lập trình ứng dụng Web

3 JSP Java Server PagesMột ngôn ngữ lập trình Web phía máy chủ trênnền công nghệ Java

4 DOM Document Object ModelMô hình đối tượng tài liệu (Khái niệm dùng trong Ajax)

5 PC Personal Computer Máy tính cá nhân

6 IT Information Technology Công nghệ thông tin

7 JVM Java Virtual Machine Máy ảo Java

8 APIApplication Program Interface

Hệ giao tiếp lập trình ứng dụng

9 HTTPHypertext Transfer Protocol

Giao thức truyền siêu văn bản

10 CGICommon Gateway Interface

Giao thức cổng dùng chung

11 PL Presentation LayerTầng trình diễn trong kiến trúc 3 tầng của Web.

12 W3CWorld Wide Web Conrotium

Là một tổ chức công nghiệp quốc tế thành lập năm 1994 nhằm phát triển các giao thức chung để phát triển WWW.

13 XMLExtensible Markup Language

Ngôn ngữ đánh dấu mở rộng do W3C tạo ra

14 Framework FrameworkTập hợp các lớp, giao diện để hỗ trợ giải quyết các vấn đề cụ thể trong quá trình xây dựng phần mềm

15 DB Database Cơ sở dữ liệu

16 AJAXAsynchronous JavaScript and XML

Là tập hợp của nhiều công nghệ với thế mạnh của riêng mình để tạo thành một sức mạnh mới

17 UI User Interface Giao diện người dùng

18 URLUniform Resource Locator

Địa chỉ của một trang Web

19 POJO Plain Old Java Object Đối tượng thuần Java

20 ERDEntity Relationship Diagram

Mô hình quan hệ thực thể

Page 12: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

CHƯƠNG I : TỔNG QUAN VỀ CÔNG NGHỆ WEB JAVATRONG NHỮNG NĂM GẦN ĐÂY

I.1. Công nghệ Web 2.0

Sự phát triển mạnh mẽ của của ngành công nghệ thông tin trên thế giới với nhiềucuộc cách mạng trên nghiều lĩnh vực, thế hệ Web mới có những thay đổi quan trọngkhông chỉ ở nền tảng công nghệ mà còn ở cách thức sử dụng, hình thành nên môitrường cộng đồng mà ở đó mọi người cùng tham gia đóng góp cho xã hội “ảo” chứkhông còn dừng lại ở quá trình “duyệt và xem” như trước kia.

Ngày nay, chúng ta đã rất quen thuộc với thuật ngữ “Web 2.0”. Vậy, Web 2.0 làgì ? Làm sao phân biệt được đâu là Web 1.0, đâu là Web 2.0 ? Web 2.0 đang trởnên thịnh hành và có phần được lăng xê quá mức. Thực chất, Web 2.0 có nghĩa làsử dụng web đúng với bản chất và khả năng của nó.

Mục tiêu của những người tiên phong xây dựng Internet là nhằm kết nối các nhànghiên cứu và các máy tính của họ với nhau để có thể chia sẻ thông tin hiệu quả.Khi bổ dung World Wide Web (năm 1990), Tim Berners-Lee cũng nhằm mục tiêutạo phương tiện cho phép người dùng tự do đưa thông tin lên Internet và dễ dàngchia sẻ với mọi người (trình duyệt Web đầu tiên do Berners-Lee viết bao gồm cảcông cụ soạn thảo trang Web). Tuy nhiên, sau đó web đã phát triển theo hướng hơikhác mục tiêu ban đầu.

Tuy có một số ngoại lệ nhưng thế giới Web 1.0 (thế hệ Web trước 2.0) chủ yếugồm các website “đóng” của các hãng thông tấn hay các công ty nhằm mục đíchtiếp cận độc giả hay khách hàng hiệu quả hơn. Nó là phương tiện phát tin hơn làphương tiện chia sẻ thông tin. Chỉ đến gần đây, với sự xuất hiện của nhiều kỹ thuậtmới như blog, wiki … web mới trở nên có tính cộng đồng (và cộng tác) hơn và trởnên gần hơn so với sự kỳ vọng và khả năng thực sự của nó.

Khái niệm Web 2.0 đầu tiên được Dale Dougherty, phó chủ tịch của OreillyMedia, đưa ra tại hội thảo Web 2.0 lần thứ nhất do Oreilly Media và MediaLiveInternational tổ chức vào tháng 10/2004. Dougherty không đưa ra định nghĩa mà chỉdùng các ví dụ so sánh phân biệt Web 1.0 và Web 2.0: “DoubleClick là Web 1.0;Google AdSense là Web 2.0. Ofoto là Web 1.0; Flickr là Web 2.0. Britannica onlinelà Web 1.0; Wikipedia là Web 2.0 v.v…”.

Các đặc tính của Web 2.0 :

1. Web có vai trò nền tảng, có thể chạy mọi ứng dụng

2. Phục vụ mọi người

3. Tập hợp trí tuệ cộng đồng

4. Dữ liệu có vai trò then chốt

5. Phần mềm được cung cấp ở dạng dịch vụ web được cập nhật không ngừngvà luôn là bản Beta

6. Phát triển ứng dụng dễ dàng và nhanh chóng, gọn nhẹ và thích hợp

Page 13: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

7. Phần mềm có thể chạy trên nhiều thiết bị

8. Người dùng tự chủ

Ban đầu, Web 2.0 được chú trọng tới yếu tố công nghệ, nhấn mạnh tới vai trò nềntảng ứng dụng. Nhưng đến hội thảo Web 2.0 lần 2 được tổ chức vào tháng 10/2005,Web 2.0 được nhấn mạnh đến tính chất sâu xa hơn – đó là yếu tố cộng đồng.

Công nghệ:

Trên thực tế, ứng dụng trên Web là thành phần rất quan trọng của Web 2.0.Hàng loạt công nghệ mới được phát triển nhằm làm cho ứng dụng trên web“mạnh” hơn, nhanh hơn và dễ sử dụng hơn, được xem là nền tảng của Web 2.0.

Kiến trúc công nghệ của Web 2.0 hiện vẫn đang được phát triển nhưng cơ bảnbao gồm : phần mềm máy chủ, cơ chế cung cấp nội dung, giao thức truyềnthông, trình duyệt và ứng dụng.

Cung cấp nội dung:

Bước phát triển đầu tiên và quan trọng nhất hướng đến Web 2.0 đó là cơ chếcung cấp nội dung, sử dụng các giao thức chuẩn hóa để cho phép người dùng sửdụng thông tin theo cách của mình (nghĩa là có khả năng tùy biến thông tin). Cónhiều giao thức được phát triển để cung cấp nội dung như RSS, RDF và Atom,tất cả đều dựa trên XML. Ngoài ra còn có các giao thức đặc biệt như FOAF vàXFN dùng để mở rộng tính năng của Website hay cho phép người dùng tươngtác.

Dịch vụ Web:

Các giao thức truyền thông 2 chiều là một trong những thành phần then chốt củakiến trúc Web 2.0. Có hai loại giao thức chính là REST và SOAP. REST(Representation State Transfer) là dạng yêu cầu dịch vụ web mà máy kháchtruyền đi trạng thái của tất cả giao dịch; còn SOAP (Simple Object AccessProtocol) thì phụ thuộc vào máy chủ trong việc duy trì thông tin trạng thái. Vớicả hai loại, dịch vụ Web đều được gọi qua API. Ngôn ngữ chung của dịch vụWeb là XML, nhưng có thể có ngoại lệ.

Một ví dụ điển hình của giao thức truyền thông thế hệ mới là Object PropertiesBroadcasting Protocol do Chris Dockree phát triển. Giao thức này cho phép cácđối tượng ảo (tồn tại trên Web) tự biết chúng “là gì và có thể làm gì”, nhờ vậycó thể tự liên lạc với nhau khi cần.

Phần mềm máy chủ:

Web 2.0 được xây dựng trên kiến trúc web thế hệ trước nhưng chú trọng hơnđến phần mềm làm việc ở “hậu trường”. Cơ chế cung cấp nội dung chỉ khácphương thức cấp phát nội dung động (của Web 1.0 về danh nghĩa), tuy nhiêndịch vụ Web yêu cầu tiến trình làm việc và dữ liệu chặt chẽ hơn.

Các giải pháp phát triển theo hướng Web 2.0 hiện nay có thể phân ra làm 2 loại :hoặc xây dựng hầu hết các tính năng trên một nền tảng máy chủ duy nhất; hoặcxây dựng ứng dụng “gắn thêm” cho máy chủ web, có sử dụng giao tiếp API.

Cộng đồng:

Page 14: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Công nghệ chỉ là bề nổi của Web 2.0, chính cộng đồng người dùng mới là yếu tốnền tảng tạo nên thế hệ web mới. Việc chuyển từ “duyệt và xem” sang “thamgia” là cuộc cách mạng thực sự, dĩ nhiên nhờ có sự phát triển công nghệ giúphiện thực khả năng này nhưng ở đây muốn nhấn mạnh đến hành vi của ngườidùng đối với web.

Về cơ bản, Web 2.0 trao quyền nhiều hơn cho người dùng và tạo nên môi trườngliên kết chặt chẽ các cá nhân với nhau. Giờ đây, có nhiều ví dụ cho thấy cộngđồng người dùng có thể đóng góp thông tin giá trị khi họ có phương tiện thíchhợp. Wikipedia có lẽ là ví dụ nổi tiếng nhất. Tuy có nhiều học giả không đánhgiá cao Wikipedia, nhưng họ lại quên một điều quan trọng : nó đủ tốt, miễn phívà nhiều người có thể đọc. Ngoài ra còn có những ví dụ khác như các site Redditvà Digg để cho người dùng quyết định thông tin gì là quan trọng, hay del.icio.uscho phép mọi người chia sẻ những địa chỉ Web hay.

Web 2.0 cho phép mọi người có thể đưa lên mạng bất cứ thông tin gì. Với sốlượng người tham gia rất lớn, đến mức độ nào đó, qua quá trình sàng lọc, thôngtin sẽ trở nên vô cùng giá trị. Ở đây, có sự tương đồng với thuyết chọn lọc tựnhiên.

Thật sự, Web 2.0 không phải là cái gì đó hoàn toàn mới mà là nó là sự phát triển từweb hiện tại. Nó vẫn là Web như chúng ta dùng lâu nay, chỉ có điều giờ đây chúngta làm việc với Web theo cách khác. Các website không còn là những “ốc đảo” màtrở thành những nguồn thông tin và chức năng, hình thành nên môi trường điện toánphục vụ các ứng dụng web và người dùng.

I.2. Công nghệ AJAX

Thế hệ Web 2.0 đã bắt đầu và đã trải qua cả một chặng đường dài phía trước để cóthể thay đổi những gì vốn đã trở nên quen thuộc với mọi người hiện nay. Nhưngđóng vai trò quan trọng góp phần làm nên thế hệ Web trong giai đoạn thứ hai là tổhợp công nghệ AJAX.

AJAX là gì ?

Thuật ngữ AJAX xuất hiện lần đầu vào tháng 2 năm 2005, khi Jesse James Garrettcủa công ty AdapativePath định nghĩa. AJAX là viết tắt của cụm từ “AsynchonousJavaScript and XML”. Đó là bộ công cụ cho phép tăng tốc độ ứng dụng web bằngcách cắt nhỏ dữ liệu và chỉ hiển thị những gì cần thiết, thay vè tải đi tải lại toàn bộtrang web.Theo định nghĩa của Garrett thì : AJAX không phải là một công nghệ. Nólà tập hợp của nhiều công nghệ với thế mạnh của riêng mình để tạo thành một sứcmạnh mới. AJAX bao gồm :

Thể hiện Web theo tiêu chuẩn XHTML và CSS.

Nâng cao tính năng động và phản hồi bằng mô hình đối tượng tài liệu –DOM (Document Object Model).

Trao đổi và xử lý dữ liệu bằng XML và XSLT.

Truy cập dữ liệu theo kiểu bất đồng bộ (asynchronous) bằngXMLHttpRequest.

Và tất cả các kỹ thuật trên được liên kết lại với nhau bằng Javascript.

Page 15: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hầu hết các câu chuyện về nguồn gốc của AJAX được bắt đầu từ khi Microsoft pháttriển công nghệ Remote Scripting vào năm 1998. Tuy nhiên, phương pháp tải khôngđồng bộ nội dung trên một trang Web đã xuất hiện trên thành tố IFRAME củaInternet Explorer 3 (1996) và thành tố LAYER của Netscape 4.0 (1997). Khi giớithiệu Internet Explorer 4.0, Microsoft đã sử dụng mô hình đối tượng tài liệu. Đếnnăm 2000, Netscape hoàn toàn bị đánh mất thị trường trình duyệt vào tay hãng phầnmềm của Bill Gates và thành tố LAYER cũng không được các chuyên gia phát triểnweb chú ý tới.

Phải tới vài năm sau, AJAX mới lại lôi kéo được sự quan tâm của giới công nghệvà trở thành công cụ cải tiến giao diện người dùng cho ứng dụng web. Từ đó, AJAXtrở thành trung tâm trong mọi câu chuyện liên quan đến thế hệ Web 2.0.

Ở các ứng dụng Web truyền thống, khi người dùng cần một thay đổi dữ liệu trêntrang Web, yêu cầu thay đổi được gửi về server dưới dạng HTTP request (hay còngọi là postback), server sẽ xử lý yêu cầu này và gửi trả response chứa các thông tindưới dạng HTML và CSS, trang HTML này sẽ thay thế trang cũ. Quy trình nàyđược mô tả là nhấp-chờ và tải lại (click-wait-and-refresh).

Dưới đây là : Mô hình tương tác trong một ứng dụng Web truyền thống:

Hình I.1 Mô hình “cổ điển” của một ứng dụng Web

AJAX cho phép tạo ra một Ajax Engine nằm giữa giao tiếp này. Khi đó, các yêucầu gửi request và nhận response do Ajax Engine thực hiện. Thay vì trả dữ liệu dướidạng HTML và CSS trực tiếp cho trình duyệt Web, Web Server có thể gửi trả dữliệu dạng XML và Ajax Engine sẽ tiếp nhận, phân tách và chuyển nó thànhXHTML + CSS cho trình duyệt Web hiển thị.

Việc này được thực hiện trên client nên giảm tải rất nhiều cho server, đồng thờingười sử dụng cảm thấy kết quả xử lý được hiển thị tức thì mà không cần nạp lạitrang. Mặt khác, sự kết hợp của các công nghệ web như CSS và XHTML làm choviệc trình bày trang web tốt hơn nhiều và giảm đáng kể dung lượng trang phải nạp.Đây là những lợi ích hết sức thiết thực mà AJAX đem lại.

Hình I.2 dưới đây mô tả mô hình sử dụng AJAX :

Page 16: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình I.2 Mô hình sử dụng AJAX của một ứng dụng Web

Những nhược điểm của AJAX

AJAX có thể góp phần tạo nên một thế hệ mới cho ứng dụng Web. Tuy nhiên, nócũng là một công nghệ “nguy hiểm” khi gây ra không ít rắc rối về giao diện ngườidùng và sau đây là một vài minh chứng :

Phím “Back” (trở lại trang trước) được đánh giá cao trong giao diện trangweb chuẩn. Đáng tiếc chức năng này không hoạt động ăn khớp với Javascriptvà mọi người không thể tìm lại nội dung trước đó khi bấm phím Back. Bởivậy, chỉ một vài sơ xuất nhỏ là dữ liệu trên trang web đã bị thay đổi và khócó thể khôi phục lại được. Đây là một trong những nguyên nhân chính khiếnnghiều người không ủng hộ ứng dụng Javascript.

Bên cạnh đó, mọi người không thể lưu lại địa chỉ web vào thư mục Favourite(Bookmark) để xem lại về sau. Do áp dụng lớp trung gian để giao dịch, cácứng dụng AJAX không có một địa chỉ cố định cho từng nội dung. Khiếmkhuyết này làm cho AJAX dễ “mất điểm” trong mắt người dùng.

Nhưng với sự cải thiện không ngừng trong thời gian sắp tới, AJAX sẽ trở thành phổdụng cho tất cả các ứng dụng Web.

I.3. Kiến trúc J2EE trong xây dựng ứng dụng Web

I.3.1. Kiến trúc J2EE

J2EE là một khung ứng dụng Web hoạt động hiệu quả mà các công ty trên thế giớinhư IBM, Oracle, Sun áp dụng rất hiệu quả trong các dự án của họ. Điểm đặc biệthơn nữa là khung ứng dụng này sử dụng các công nghệ mới nhất luông mang tínhcạnh tranh cao ví dụ như Struts, Hibernate, Spring, JSF, EJB …

Tuy nhiên, J2EE không phải là một sản phẩm cụ thể mà chỉ là các đặc tả đưa rabởi hãng Sun. Với kiến trúc J2EE, bạn phải lựa chọn, kết nối các thành phần khácnhau để hình thành nên mô hình phát triển ứng dụng. Bản thân Sun không đưa ra

Page 17: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

mô hình phát triển ở dạng đóng gói nhưng có khá nhiều sản phẩm từ các hàng thứba như : IBM, WebSphere, và BEA WebLogic, là các mô hình xây dựng hỗ trợ lậptrình.

J2EE chỉ hỗ trợ ngôn ngữ lập trình Java và trong tương lai có lẽ cũng không cóngôn ngữ lập trình nào được hỗ trợ thêm bởi kiến trúc này. Nhưng khung ứng dụngJ2EE và ngôn ngữ Java có tính khả chuyển cao. Một chương trình viết bởi Javađược thực thi trên máy ảo Java (Java Virtual Machine) thay vì trực tiếp trên hệ điềuhành cụ thể. Do đó, mã chương trình có thể chuyển từ một hệ điều hành này sangmột hệ điều hành khác (có hỗ trợ JVM) để thực thi một cách dễ dàng. Tính khảchuyển về hệ điều hành này của J2EE có được là do phần lớn các sản phẩm J2EEđều hỗ trợ cho nhiều hệ điều hành.

Hơn thế nữa, J2EE cung cấp một thiết kế mẫu (design pattern) mà đã được đúcrút từ những kinh nghiệm thực tế của các chuyên gia phần mềm trên thế giới. Vàbạn hoàn toàn được thừa hưởng các mẫu thiết kế này mà không cần phải bắt đầuxây dựng chi tiết từ đầu trong khi một loạt các công ty và nhóm phần mềm đã tiêutốn thời gian và công sức để tìm ra những phương án tối ưu cho từng vấn đề họ đãgặp phải trong quá trình phát triển các dự án. Ví dụ với tầng Web của ứng dụngJ2EE kinh điển, nếu chúng ta bắt tay từ đặc tả kỹ thuật (specification) của JSP vàServlet chúng cho phép xây dựng được những trang Web động riêng biệt rất tốtnhưng lại hỗ trợ rất ít trong việc quản lý luồng dữ liệu giữa các trang với nhau, đặcbiệt chúng không tách rời hai tầng hiển thị (presentation) và tầng nghiệp vụ(business). Mô hình MVC (Model - View - Controller) lại là một mô hình thiết kếmang tính tổng thể để giải quyết vấn đề trên, nó được tạo bởi Krasner và Pope năm1988 cho Smalltalk, cho phép xây dựng nên các ứng dụng phân tầng một cách rấthiệu quả bằng cách tạo ra những phương thức quản lý từng tầng một cách riêng rẽvà quản lý luồng dữ liệu. Trong J2EE, thì MVC cũng được xây dựng dựa trênnhững tính năng mạnh của công nghệ JSP và Servlet.

Nền tảng J2EE sử dụng mô hình ứng dụng phân tán đa tầng cho tất cả các ứngdụng Enterprise. Ứng dụng logic có thể chia làm nhiều thành phần tùy theo chứcnăng, rất nhiều các thành phần tạo nên ứng dụng J2EE và được cài đặt trên nhiềumáy tính khác nhau.

Hình I.4 dưới đây mô tả kiến trúc đa tầng trong ứng dụng J2EE:

Page 18: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình I.3 Ứng dụng đa tầng trong J2EE

Các thành phần Client-tier chạy trên máy client.

Các thành phần Web tier chạy trên J2EE server.

Các thành phần Business tier chạy trên J2EE server.

EIS (Enterprise information system)-tier chạy trên EIS server.

Mặc dù một ứng dụng J2EE có thể bao gồm ba hoặc bốn tầng như trong hình I.4,tuy nhiên các ứng dụng đa tầng J2EE trong thực tế thường sử dụng theo kiến trúc batầng bởi vì chúng được phân tán trên ba vị trí khác nhau : các máy client, máy J2EEserver, và database.

Các thành phần J2EE

Các ứng dụng J2EE được tạo nên từ các thành phần. Một J2EE component bản thânnó là đơn vị phần mềm thực hiện một chức năng nhất định có các lớp và các file vàcó thể giao tiếp được với các thành phần khác. Đặc tả J2EE định nghĩa ra các thànhphần sau :

Các ứng dụng máy khách và applet là các thành phần chạy trên client.

Các thành phần Java Servlet và JavaServer Pages (JSP) là các thành phầnWeb chạy trên server.

Các thành phần Enterprise JavaBean (EJB) là các thành phần nghiệp vụchạy trên server.

Các thành phần J2EE được viết bằng ngôn ngữ lập trình Java và được biên dịchgiống như trong các ngôn ngữ lập trình khác. Sự khác biệt giữa các thành phầnJ2EE và các lớp Java “chuẩn” là các thành phần J2EE được nhúng trong ứng dụngJ2EE, được xác nhận để đảm bảo tính thống nhất theo như đặc tả J2EE, và đượctriển khai thành sản phẩm, nơi chúng có thể chạy và được quản lý bởi J2EE server.

Page 19: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

I.3.1.1. Java Servlet

Servlet được tạo ra vào năm 1997, Servlet là các thành phần đối tượng nhúng trêntrình chủ Web server thực hiện xử lý yêu cầu và sinh ra các trang Web động trả vềmáy khách. Java Servlet là công nghệ nền tảng cho các công nghệ khác để tạo racác ứng dụng Web có tính tương tác cao mà giao diện người dùng được sinh ra ởphía server. Công nghệ Java Servlet bao gồm 2 phần :

API của Java dùng bao gồm các yêu cầu và các câu trả lời và các đối tượngcon của nó và bộ xử lý dùng để quản lý các đối tượng này.

Một cơ chế dùng để xác định các thuộc tính của ứng dụng Web ngoài mãcủa ứng dụng và có thể thay đổi lúc triển khai.

Một servlet là một lớp của Java xử lý động các yêu cầu và xây dựng các trả lời. Mặcdù servlet có thể dùng để trả lời bất kỳ một yêu cầu nào nhưng chúng thường dùngđể hỗ trợ cho các ứng dụng Web.

Servlet là một thành phần ứng dụng Web không phụ thuộc vào hệ nền. Về bảnchất thì Servlet là một chương trình Java (chỉ cần nạp một lần vào máy ảo) thườngđược sử dụng để chạy nền trên các máy ảo Java. Khi có một yêu cầu từ trình duyệt(Browser), máy chủ (server) sẽ phát lệnh thực hiện Servlet tương ứng, kết quả trả vềcủa Servlet sẽ được máy chủ xử lý và trả về cho trình duyệt dưới dạng các trangHTML.

Hình I.4 Mô hình ứng dụng Browser/Server

I.3.1.2. JSP (Java Server Page)

Công nghệ JSP kế thừa tất cả các kỹ thuật động của công nghệ Java Servlet, nhưngnó lại cung cấp một cách tiếp cận tự nhiên hơn trong việc tạo ra các thành phầnWeb tĩnh, JSP có thể kết hợp giữa công nghệ sinh trang HTML tĩnh với công nghệđộng sinh ra các trang HTML. JSP là công nghệ lập trình Web phía máy chủ củaJava, JSP cho phép truy xuất, xử lý đơn giản, giúp cho lập trình viên xử lý dễ dàng.

Đặc trưng của công nghệ JSP:

• Cho phép trộn giữa mã Java và các thẻ HTML.

• Xây dựng các đối tượng phía máy chủ.

• JSP sử dụng các truy xuất và xử lý đơn giản như : trình bày giao diện,định dạng trang HTML, triệu gọi các Javabean, servlet khác …

Cơ chế hoạt động của JSP có thể mô tả như sau :

Page 20: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình 1.5 Cơ chế hoạt động của JSP

Nguyên tắc:

JSP script được viết lồng vào các trang HTML.

Khi có yêu cầu client, JSP Engine sẽ dịch JSP script thành mã Java.

Java Compiler dịch Java code thành bytecode.

Bytecode chạy trên máy ảo Java.

Các thuận lợi khi sử dụng công nghệ JSP :

Đối với ASP (Active Server Pages): ASP là công nghệ tương tự nhưJSP nhưng được cung cấp bởi Microsoft. Các thuận lợi của công nghệJSP bao gồm : Thứ nhất, phần động trong một trang JSP được viết bằngJava chứ không phải là một ngôn ngữ nào khác của Microsoft, cho nênnó tạo ra sức mạnh hơn và dễ dàng hơn trong sử dụng nhờ những đặctính nổi bật của Java đã nêu ở trên. Thứ hai, nó có thể phù hợp với bấtkỳ hệ điều hành nào và Web server nào.

Đối với Servlet : JSP cung cấp những điều kiện thuận lợi hơn để tạo racác trang HTML hợp lệ. Thêm vào đó, bằng việc phân chia thành haiphần riêng biệt, ta có thể phân chia công việc trong phát triển JSP chonhiều người khác nhau, mỗi người một lĩnh vực riêng, phần xây dựngHTML tĩnh và phần động.

Đối với Server-Side Include (SSI) : SSI là một công nghệ hỗ trợ rộngrãi bao gồm các đoạn được định nghĩa bên ngoài đưa vào trong mộttrang Web tĩnh. JSP là một lựa chọn tốt nhất bởi vì nó cho phép bạn sửdụng servlet thay thế cho việc sử dụng chương trình gián đoạn để tạo racác phần động trong một trang web.

Đối với Javascript : Javascript có thể tự động tạo ra HTML trên trìnhclient. Tuy nhiên, nó chỉ hỗ trợ điều này khi mà các thông tin đó thuộc

Page 21: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

về môi trường hoạt động của client. Với ngoại lệ của cookies, HTTP vàđịnh dạng dữ liệu đệ trình không hỗ trợ cho Javascript. Khi màJavascript thực hiện trên trình client, JavaScript không thể truy nhập tàinguyên của phía trình chủ như các cơ sở dữ liệu, các danh sách, cácthông tin quan trọng…

Với những lợi thế và những đặc điểm của mình dựa trên hướng mã nguồn mở vànhất là với sự ra đời của các framework nổi tiếng như : Struts, Hibernate, Spring,JSF, AJAX dựa trên nền tảng của công nghệ Java đã khuấy động lên một cuộc cáchmạng trong lĩnh vực lập trình Web ứng dụng : “Chỉ trong một tương lai không xa,tất cả các ứng dụng phần mềm đều là ứng dụng Web”.

Page 22: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

CHƯƠNG II : STRUTS , HIBERNATE, SPRING TRONGLẬP TRÌNH ỨNG DỤNG WEB

II.1. Một số khái niệm trong lập trình ứng dụng Web

II.1.1. Framework là gì ?

Ngày nay, trong quá trình xây dựng một ứng dụng trên nền Web, có rất nhiều khunglàm việc (framework) đã được xây dựng sẵn nhằm phục vụ cho mục đích chungnhất cũng như giúp cho những người lập trình viên phát triển ứng dụng một cáchnhanh chóng và hiệu quả. Chúng ta đã nhắc nhiều đến thuật ngữ framework ở cácphần trên và cũng đã có một số framework về Java được nhắc đến. Vậy, bản chấtframework là gì, và nó có những đặc tính gì ?

Theo cộng đồng Wikepedia, framework là một khái niệm trong phát triển phầnmềm dùng để chỉ những “cấu trúc hỗ trợ được định nghĩa”mà trong đó những dự ánphần mềm khác có thể được sắp xếp vào đó và phát triển. Thông thường, mộtframework bao gồm những chương trình hỗ trợ, các thư viện lập trình và một ngônngữ scripting nằm giữa các phần mềm khác để giúp phát triển và gắn những thànhphần khác nhau trong dự án phần mềm lại với nhau.

Một khung làm việc có 3 đặc tính sau :

1. Một khung công việc xây dựng sẵn các lớp (class) hoặc các thành phần(component), mỗi loại đó sẽ cung cấp một mức trừu tượng (abstraction)cho một vài khái niệm riêng biệt.

2. Một khung công việc sẽ định nghĩa ra tập hợp các cách thức để các mứctrừu tượng đó cùng nhau giải quyết một vấn đề.

3. Các thành phần trong một khung công việc phải có tính sử dụng lại được.

II.1.2. Hai mô hình kiến trúc trong ứng dụng Web

II.1.2.1. Mô hình 1

II.1.2.1.1. Đặc điểm

Kiến trúc mô hình 1 là kiến trúc đơn giản nhất trong việc phát triển các ứng dụngWeb. Trong mô hình 1, trình duyệt trực tiếp truy xuất đến các trang JSP. Hay nóicách khác, người sử dụng gửi các yêu cầu và nhận phản hồi trực tiếp qua các trangJSP. Điểm mạnh của mô hình kiến trúc này là mỗi trang JSP đều xử lý đầu vào củachính mình. Các ứng dụng sử dụng mô hình kiến trúc này thường có một dãy cáctrang JSP mà người dùng xử lý thông tin từ trang đầu tiên đến trang kế tiếp. Nếucần, một trang servlet hoặc một trang HTML có thể thay thế cho trang JSP trongdãy.

Page 23: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình II.1 Mô hình 1 về kiến trúc ứng dụng Web

II.1.2.1.2. Ưu điểm

Đây là mô hình đơn giản nhất, thoải mái để phát triển ứng dụng. Người lậptrình có thể lần lượt xây dựng các trang web dựa theo chức năng đã chỉ rõ.

Kiến trúc này thích hợp với những ứng dụng web có quy mô nhỏ, ít chứcnăng và việc định hướng trang là đơn giản.

II.1.2.1.3. Nhược điểm

Khó tách rời công việc viết mã cho ứng dụng (thường thuộc về vai trò củangười phát triển ứng dụng Web) và nhóm xây dựng ứng dụng (thường thuộcvề vai trò của người thiết kế). Khi cần thay đổi giao diện người sử dụng(công việc của người thiết kế) thì chính người lập trình gần như lại phải thựchiện toàn bộ (thay đổi mã nguồn chương trình và mã HTML).

Do các trang JSP đều xử lý đầu vào của chính mình, ứng dụng là một dãycác trang JSP hoạt động kế tiếp tuần tự nhau, kết quả trang này là đầu vàocho trang kia, nên khi thay đổi, hay mở rộng các chức năng của ứng dụng thìrất khó thực hiện hoặc thực hiện rất phức tập và tốn nhiều thời gian. Do vây,mô hình 1 là cứng nhắc, không linh hoạt, không thích hợp với các dự án lớn.

II.1.2.2 Mô hình 2

II.1.2.2.1. Đặc điểm

Mô hình 2 là mô hình phổ biến được sử dụng hiện nay. Về cơ bản, đây là mô hìnhMVC (Model-View-Controller) mà các quá trình xử lý, điều khiển, hiển thị đượctách rời nhau.

Điểm khác nhau quan trọng giữa mô hình 1 và mô hình 2 là trong mô hình 2, quátrình xử lý các yêu cầu từ phía người dùng không trực tiếp thông qua các trang JSPmà được thực hiện qua một Servlet. Các bước thực thi khi người dùng gửi yêu cầunhư sau :

1. Controller Servlet xử lý các yêu cầu của người dùng (Điều này có nghĩa làliên kết trong JSP trỏ tới controller servlet).

Page 24: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

2. Controller Servlet sau đó sẽ tìm các JavaBean phù hợp dựa trên các tham sốrequest (hoặc dựa trên các thuộc tính session).

3. Controller Servlet tự bản thân nó hoặc thông qua các controller khác giaotiếp với tầng trung gian hoặc trực tiếp tới database để lấy các dữ liệu phùhợp.

4. Controller thể hiện dữ liệu lấy được thông qua các JavaBean thông qua mộttrong các ngữ cảnh : request, session hoặc application.

5. Controller sau đó chuyển hướng đến phần hiển thị tiếp theo dựa trên requestURL.

6. Phần hiển thị sử dụng các JavaBean đã được thiết lập ở bước 4 để hiển thị dữliệu.

Hình II.2 Mô hình 2 về kiến trúc ứng dụng Web

II.1.2.2.2. Ưu điểm

Ưu điểm nổi bật trong kiến trúc của mô hình 2 so với mô hình 1 là ở khả năng sửađổi, bảo trì và khả năng mở rộng hệ thống về sau của ứng dụng. Do vậy, mô hình 2là một kiến trúc được áp dụng nhiều trong các ứng dụng lớn và mang tính thươngmại cao.

II.1.3. Mô hình Model – View – Controller (MVC)

II.1.3.1. Đặc điểm

MVC là mô hình thiết kế mang tính tổng thể để giải quyết vấn đề có tính nghiệp vụcao, thường áp dụng cho những dự án lớn và có tính thương mại cao. Mô hìnhMVC được tạo ra bởi Krasner và Pope năm 1988 cho Smalltalk, hiện tại được IBMvà Apache ứng dụng trong các dự án của họ rất thành công. Đây là một giải phápcho phép xây dựng các ứng dụng phân tầng một cách rất hiệu quả, bằng cách tạo ranhững phương thức quản lý từng tầng một cách riêng rẽ. Trong J2EE, thì MVCcũng được xây dựng dựa trên những tính năng mạnh của công nghệ JSP và Servlet.

Page 25: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

MVC có 3 thành phần chính : Model, View, Controller.

Hình II.3 Mô hình MVC trong kiến trúc ứng dụng Web

II.1.3.2. Model

Trong mô hình kiến trúc MVC, đây là thành phần quan trọng nhất trong ứng dụng.Thành phần Model cung cấp một giao diện cho dữ liệu và các dịch vụ được sử dụngtrong ứng dụng. Theo cách này, thành phần Controller sẽ không cần phải nhúng mãlệnh để thao tác trực tiếp với các dữ liệu trong ứng dụng. Thay vào đó, chúng sẽtrao đổi với thành phần Model để thực hiện thao tác và truy xuất dữ liệu. Thànhphần Model có rất nhiều dạng khác nhau, nó có thể đơn giản là các JavaBean hoặcphức tạp hơn là Enterprise JavaBean hoặc Web Service.

II.1.3.3. View

Thành phần View trong mô hình MVC dùng để hiển thị dữ liệu ở phía người dùngcủa ứng dụng. Đó có thể là các dạng dữ liệu hiển thị cho việc nhập liệu đầu vào củangười dùng cung cấp cho thành phần Controller hoặc cũng có thể là dữ liệu trả về từController sau quá trình xử lý để hiển thị kết quả. Thông thường, thành phần Viewnày có thể là các trang HTML, JSP hoặc một số dạng templete như Velocity hoặcFreeMarker …

II.1.3.4. Controller

Đây là thành phần điều khiển các luồng dữ liệu giữa các thành phần View vàModel, phụ thuộc vào tác động của người sử dụng và chỉ ra các hành động vàchuyển hướng hành động theo các yêu cầu của người dùng.

II.1.3.5. Cơ chế tương tác giữa 3 thành phần trong ứng dụng

Page 26: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình II.4 Cơ chế tương tác giữa các thành phần trong mô hình MVC

II.1.3.6. Ưu điểm của mô hình MVC

a) Độ tin cậy cao (Reliability): Do trong mô hình MVC các lớp presentation vàtransaction được phân chia rõ ràng, điều đó cho phép ta thay đổi cách nhìn vàcách cảm nhận về một ứng dụng phần mềm khi không phải biên dịch lại codecủa Model hoặc Controller.

b) Khả năng tái sử dụng và tính đáp ứng cao (High reuse and adaptability) :Mô hình MVC cho phép chúng ta sử dụng đa kiểu trong tầng View, tất cảcác cách truy nhập mã code bên server. Điều đó bao gồm bất cứ thứ gì từtrình duyệt Web (HTTP) tới trình duyệt không dây (WAP).

c) Giá chi phí cho phát triển phần mềm và vòng đời thấp : Mô hình MVC tạonhiều thuận lợi cho các lập trình viên mức thấp phát triển thêm ứng dụng củamình cũng như dễ dàng trong việc bảo trì giao diện người dùng.

d) Khả năng bảo trì dễ dàng (Maintainability): Do sự tách biệt trong lậptrình các phần trong mô hình MVC nên tạo nhiều thuận lợi cho việc bảo trìvà sửa đổi các ứng dụng Web.

Do mô hình MVC có những ưu điểm nổi bật như trên, nên trong thực tế hầu hết cácứng dụng Web ngày nay đều được xây dựng dựa trên mô hình MVC, đặc biệt đốivới các ứng dụng có tính thương mại và độ phức tạp cao. Dưới đây giới thiệu mộtsố framework hỗ trợ xây dựng ứng dụng dựa Web theo mô hình kiến trúc MVC.

II.2. Struts framework

II.2.1. Lịch sử hình thành

Struts nguồn gốc được tạo ra bởi Craig R.McClanahan và sau đó được chuyển giaocho dự án Jakarta của Apache Software Foundation (AFS) vào năm 2000. Vào

Page 27: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

tháng 6 năm 2001, Struts đã phát hành phiên bản 1.0. Sau đó, có rất nhiều người đãtham gia đóng góp cả về mã nguồn và tài liệu cho dự án và Struts ngày càng trở nênhoàn thiện hơn.

Struts là một framework mã nguồn mở được phát triển trên nền tảng của ngônngữ Java, JSP nhằm mục đích tạo ra một thành phần chuẩn trong việc thiết kế ởtầng Web sử dụng MVC dựa trên nền tảng của J2EE. Với Struts, người lập trình sẽkhông phải quan tâm đến việc xây dựng mô hình MVC như thế nào mà chỉ cần cấuhình và chạy tầng hiển thị của dự án, điều này cho phép giảm thiểu chi phí đào tạo,thời gian phát triển dự án nhanh hơn và cho phép hệ thống chạy ổn định trên cácnền và hoặc module tích hợp khác nhau. Với Struts ta có thể tách làm 3 tầng làmviệc riêng biệt một cách dễ dàng, thích hợp cho một dự án lớn, không bị nhập nhằnggiữa việc tạo giao diện, xử lý và truy xuất cơ sở dữ liệu.

Struts hiện có hai phiên bản chính, đó là Struts 1.xx và 2.0x. Struts 1.xx đượccông nhận như một framework phổ biến nhất trong Java, Struts 1.xx đủ chín muồivà là một giải pháp tốt cho nhóm phát triển để giải quyết các vấn đề chung nhất.Struts 2.0x, kế thừa nền tảng của webwork framework, được tổ chức như một nềnlàm việc chuyên nghiệp với web, nhằm giải quyết các vấn đề phức tạp, mang tínhnghiệp vụ cao.

II.2.2. Tổng quan về kiến trúc hệ thống

Struts tuy ra đời sau một số framework hoặc các công nghệ khác nhưng nó đãnhanh chóng được các nhà phát triển các ứng dụng trên nền Web chấp nhận và sửdụng rộng rãi. Là một framework được xây dựng áp dụng theo mô hình MVC,Struts tỏ ra rất thích hợp trong các dự án mang tính thương mại, nghiệp vụ cao vàphức tạp, và trên hết, đây là một framework mã nguồn mở. Các nhà phát triển có thểtự do phát triển ứng dụng dựa trên Struts mà không phải mất chi phí nào.

Trong tài liệu này, tác giả chủ yếu đề cập đến Struts ở phiên bản 2.0x. Do phiênbản Struts 1.xx đã khá quen thuộc với nhiều người. Struts 2.0x là sự kết hợp giữaStruts và Webwork 2 (Một framework mã nguồn mở khác của Open Symphony).Mục đích của Struts2 là sự đơn giản – giúp các nhà phát triển xây dựng dễ dàng cácứng dụng Web. Để đạt được mục đích này, Struts2 hỗ trợ các tính năng làm giảmthiểu việc cấu hình trong các file XML thông qua các cài đặt ngầm định thôngminh, các tiện ích chú thích và hỗ trợ các quy ước trong việc cấu hình.

Dưới đây là một số tính năng của Struts 2:

Struts2 là một Action based framework

Nhiều tùy chọn cấu hình file XML và Annotation

POJO-dựa trên các action giúp việc kiểm thử dễ dàng

Tích hợp Spring, Sitemesh và Tiles

Tích hợp ngôn ngữ OGNL

Hỗ trợ AJAX thông qua các thư viện thẻ

Nhiều tùy chọn ở tầng View (JSP, Freemarker, Velocity và XSLT)

Hỗ trợ mở rộng nhiều plug-in

Page 28: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Các thành phần của Struts2:

Chuẩn MVC trong Struts2 được áp dụng với năm thành phần cốt lõi : actions,interceptors, value stack / OGNL, result types và results / view technologies.

Vòng đời request trong ứng dụng Struts 2 :

Hình II.5 Vòng đời request trong ứng dụng Struts2

1. Người dùng gửi request : Người dùng gửi các yêu cầu đến server.

2. FilterDispatcher xác định action phù hợp : FilterDispatcher nhận requestvà sau đó xác định Action tương ứng.

3. Các Interceptor được áp dụng : Các interceptor được cấu hình để ápdụng cho các chức năng như workflow, validation, file upload …

4. Thực thi Action : Phương thức Action được thực thi để thao tác vớidatabase lưu trữ, cập nhật, khôi phục dữ liệu…

5. Tạo ánh xạ đầu ra : Action tạo ánh xạ đầu ra thông qua tham số trả vềcủa hàm.

6. Trả về kết quả của Request : Kết quả được trả về các interceptot theo thứtự ngược lại giúp chúng ta clean-up bộ đệm hoặc thêm các xử lý phụkhác.

7. Hiển thị kết quả tới người sử dụng : Cuối cùng control được trả về choservlet container, làm nhiệm vụ hiển thị dữ liệu đầu ra trên trình duyệt.

II.2.3. Các thành phần trong Struts

Như đã đề cập đến ở phần trên, Struts2 bao gồm năm thành phần cốt lõi là :Actions, Interceptors, Value Stack / OGNL, Result Types, Results / Viewtechnologies.

II.2.3.1. Actions

Actions là khái niệm cơ bản trong hầu hết các framework về ứng dụng web. Chúnglà đơn vị làm việc cơ bản nhất liên quan tới HTTP request từ phía người dùng.

Trong Struts2, một action có thể được sử dụng theo các cách khác nhau :

Single Result :

Page 29: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Đây là cách thức sử dụng đơn giản nhất của một action. Action thực thi và chỉtrả về một kết quả duy nhất. Trong trường hợp này, action có thể được mô tả nhưsau :

class MyAction {public void String execute() throws Exception {

return "success";}

}

Có vài điểm cần chú ý. Thứ nhất, lớp action này không cần kế thừa từ các lớp khácvà cũng không cần thực thi một interface nào. Hay nói cách khác, lớp này là mộtPOJO đơn giản. Thứ hai, lớp này chỉ có một phương thức là “execute”. Đây là quyước ngầm định của Struts2. Nếu bạn muốn sử dụng nhiều phương thức khác nhau,bạn cần cấu hình trong file struts.xml.

Dưới đây là cách cấu hình dạng đơn giản nhất trong file struts.xml :

<action name="my" class="com.struts.MyAction" ><result>view.jsp</result>

</action>

Thuộc tính “name” cung cấp thông tin URL để thực thi action. Trong trường hợpnày, URL sẽ có dạng “/my.action”. Phần mở rộng “.action” được cấu hình trong file“struts.properties”. Thuộc tính “class” cung cấp đường dẫn đến tên lớp mà action đócần thực thi.

Multiple Result :

Tiếp theo, một cách phức tạp hơn sử dụng khi action có thể trả về nhiều kết quảkhác nhau tùy thuộc vào xử lý logic theo yêu cầu của người sử dụng. Lớp actionnày có thể được mô tả đơn giản như sau :

class MyAction {public void String execute() throws Exception {

if( myLogicWorked() ) {return "success";

} else {return "error";}

} }

Ở đây, lớp action có thể trả về một trong hai giá trị khác nhau. Do vậy, chúng ta cầncấu hình trong file struts.xml :

<action name="my" class="com.struts.MyAction" ><result>view.jsp</result><result name="error">error.jsp</result>

</action>

Trong các ví dụ vừa rồi, chúng ta đã sử dụng những cách chung nhất để xác địnhkết quả cho một action. Tuy nhiên, trong thực tế, có bốn tùy chọn cho phép bạnthực hiện ý muốn này :

1. Phương thức action trả về giá trị kiểu String – giá trị trả về này sẽ được đốisánh với thuộc tính trong file cấu hình của struts.

2. Sử dụng tiện ích code behind plugin – Khi code behind plugin được sử dụng,các template hiển thị sẽ được tìm bởi sự móc nối tên action với xâu trả về từ

Page 30: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

action đó. Ví dụ, Nếu URL có dạng “/adduser.action” và giá trị trả về củaaction là “success” thì nó sẽ tìm đến file JSP có dạng “/adduser-succcess.jsp”.

3. Sử dụng @Result annotation – Lớp action có thể được chú thích các kết quảtrả về thông qua việc sử dụng các chú thích @Results và @Result. Xâu giátrị trả về cần được đối sánh với một trong những result được chú thích trongfile cấu hình.

4. Sử dụng acion trả về một thể hiện lớp Result – Action không cần trả về giátrị String, thay vào đó nó có thể trả về một thể hiện của lớp Result đã đượccấu hình để sẵn sàng sử dụng.

II.2.3.2. Interceptors

Nhiều tính năng hỗ trợ trong Struts2 framework được thực thi bằng việc sử dụngInterceptors; bao gồm việc xử lý exception, file upload, lifecycle callbacks vàvalidation. Interceptors là khái niệm tương tự như với servlet filters hoặc các lớpJDK Proxy. Chúng hỗ trợ cách thức áp dụng tiền xử lý và hậu xử lý đối với action.Tương tự như servlet filters, các interceptors có thể có nhiều lớp và có thứ tự.

Dưới đây là một số loại Interceptor :

Spring Framework – ActionAutowiringInterceptor interceptor.

Request String và Form Values – ParametersInterceptor interceptor.

Servlet-based objects – ServletConfigInterceptor interceptor.

Hai interceptor đầu làm việc độc lập, không cần tới action, nhưng interceptor cuốithì khác. Nó làm việc với sự trợ giúp của các interface sau :

SessionAware – hỗ trợ truy xuất tới tới tất cả các thuộc tính của sessionthông qua Map.

ServletRequestAware – hỗ trợ truy xuất tới đối tượng HttpServletRequest.

RequestAware – hỗ trợ truy xuất tới các thuộc tính request thông quaMap.

ApplicationAware – hỗ trợ truy xuất tới tất cả các thuộc tính củaapplication thông qua Map.

ServletResponseAware – hỗ trợ truy xuất tới đối tượngHttpServletResponse.

ParameterAware – hỗ trợ truy xuất tới tất cả các xâu request và các thuộctính giá trị của form thông qua Map.

PrincipalAware – hỗ trợ truy xuất tới đối tượng PrincipleProxy, đốitượng này thực thi các phương thức của đối tượng HttpServletRequest,nhưng cung cấp qua proxy, cho phép thực hiện độc lập trong action.

ServletContextAware – hỗ trợ truy xuất tới đối tượng ServletContext.

Cấu hình Interceptors

Page 31: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Để cấu hình Interceptor, trước hết chúng ta cần định nghĩa interceptor. Sử dụng cácthẻ <interceptors../> và <interceptor../> trực tiếp trong thẻ <package>. Ví dụnhư dưới đây :

<package name="default" extends="struts-default"> <interceptors> <interceptor name="timer" class=".."/> <interceptor name="logger" class=".."/> </interceptors>

<action name="login" class="tutorial.Login"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <result name="input">login.jsp</result> <result name="success" type="redirect-action">/secure/home</result> </action></package>

Cần chú ý là các interceptor đã được định nghĩa cần phải được áp dụng cho action.Chúng ta có thể sử dụng interceptor trực tiếp trong thẻ <action/> như trong ví dụtrên. Sử dụng các cấu hình trên khôg hạn chế số lượng các interceptor áp dụng choaction. Khi cần, các interceptor theo danh sách thứ tự sẽ được thực hiện.

Một cách khác là sử dụng interceptor ngầm định cho package hiện tại :

<default-interceptor-ref name="autowiring"/>

II.2.3.3. Value Stack / OGNL

Value stack – giốn như cái tên của nó, là một stack chứa các object. OGNL là viếttắt của cụm từ Object Graph Navigation Language, và cung cấp cách mô hình hóađể truy xuất các object trong value stack.

Value stack bao gồm các đối tượng theo thứ tự sau :

1. Temporary Objects – Các đối tượng tạm trong quá trình thực thi được tạo ravà lưu trong value stack; ví dụ như quá trình lặp hiển thị danh sách các đốitượng thông qua thẻ JSP.

2. Model Object – Nếu các đối tượng này được sử dụng, model object hiện tạisẽ được lưu trước đối tượng Action trong value stack.

3. Action Object – Đối tượng action được thực thi.

4. Named Objects – Đó là các đối tượng bao gồm #application, #session, #request, #attr và #parameter.

Việc truy xuất tới value stack có thể được thực hiện theo nhiều cách khác nhau.Cách thông thường nhất là thông qua các thẻ được hỗ trợ bởi JSP, Velocity vàFreemarker. Các thẻ HTML thông thường được sử dụng để truy xuất các thuộc tínhcủa các đối tượng từ value stack; các thẻ điều khiển (như if, elseif và iterator) đượcsử dụng với các biểu thức; và các thẻ dữ liệu dùng để thao tác với stack (thông quaphương thức set và push).

Khi sử dụng value stack, chúng ta không cần giữ lại phạm vi của đối tượng đíchtrong đó. Nếu bạn muốn thuộc tính là “name”, bạn chỉ cần truy vấn tới value stack

Page 32: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

với thuộc tính này. Mỗi thành phần trong stack, theo như thứ tự trên yêu cầu có mộtthuộc tính. Nếu như thuộc tính này trùng với thuộc tính mà ta truy vấn và nó sẽ trảvề giá trị để sử dụng. Ngược lại, thành phần tiếp theo sẽ được truy vấn. Quá trìnhnày sẽ được tiếp tục cho đến khi hết stack. Đây là một tính năng rất tốt, bởi vì bạnkhông cần phải quan tâm giá trị trong đó là gì – action, model hay HTTP request –Bạn chỉ cần biết là nếu có giá trị tồn tại trong stack thì nó sẽ được lấy ra.

OGNL là giải pháp để truy xuất các thuộc tính, phương thức của đối tượng trongvalue stack, nó chứa đầy đủ tính năng của một ngôn ngữ biểu thức. Nó giúp đơngiản hóa các biểu thức so với phương pháp sử dụng theo cách truyền thống (Ví dụ:sử dụng “person.address” thay vì dùng “getPerson().getAddress()”). OGNL hỗ trợcác tính năng như chuyển đổi kiểu dữ liệu, gọi các phương thức, thao tác và tạo cáccollection, ước lượng biểu thức…

II.2.3.4. Result Types

Trong Struts2 hỗ trợ nhiều kiểu result. Chúng có thể nhìn thấy, hoặc chúng có thểtương tác với môi trường.

Để cấu hình một action thực thi một result theo một kiểu xác định, chúng ta sửdụng thuộc tính “type”. Nếu không có thuộc tính “type” thì ngầm định kiểu là“dispatcher” – sẽ hiển thị kết quả trang JSP. Dưới đây là một dạng ví dụ đơn giản :

<action name="my" class="com.struts.MyAction" ><result type="dispatcher">view.jsp</result>

</action>

Cấu hình result type

Result type có thể được cấu hình trong thẻ <package …/>. Việc cấu hình tương tựnhư cấu hình với interceptor. Thuộc tính “name” cung cấp một định danh duy nhấtcho result type, và thuộc tính class là đường dẫn tới lớp cần thực hiện. Có một thuộctính ngầm định thứ ba là “default” – cho phép result type ngầm định được thay đổi.

<result-types><result-type name="dispatcher" default="true"

class="….dispatcher.ServletDispatcherResult"/><result-type name="redirect"

class="….dispatcher.ServletRedirectResult"/>…

</result-types>

II.2.3.5. Results / View technologies

Trong các ví dụ trước, chúng ta vẫn sử dụng JSP (Java Server Pages) để hiển thị ởtầng View. Mặc dù JSP là một lựa chọn phổ biến nhất, tuy nhiên, nó không phải làgiải pháp duy nhất cho tầng hiển thị.

Có ba công nghệ khác có thể thay thế JSP trong một ứng dụng Struts2 :

Velocity Templates

Freemarker Templates

XSLT Transformations

Page 33: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Cú pháp của các ngôn ngữ tempalte này là khác nhau. Velocity và Freemarker khágiống với JSP. Tất cả các thuộc tính của action (thông qua các phương thức gettet)đều có thể sử dụng dễ dàng trong các templte này, giốn như việc sử dụng thư việnthẻ hỗ trợ trong JSP và OGNL. Tên của các template JSP sẽ được thay thế bằng têncủa các templte dạng Velocity và Freemarker trong việc cấu hình các action. Dướiđây là ví dụ cấu hình cho tempalte Freemarker thay thế cho JSP :

<action name="my" class="com.fdar.infoq.MyAction" ><result type="freemarker">view.ftl</result>

</action>

XSLT result có một chút khác biệt. Thay vì thay thế tên tempalte với tên stylesheet,nó thêm các tham số để sử dụng. Tham số “stylesheetLocation” cung cấp tên củastylesheet sử dụng để biểu diễn XML. Nếu như không có tham số này, XML sẽkhông được chuyển đổi tới người dùng.

II.2.4. Thư viện thẻ trong Struts

II.2.4.1. Thư viện thẻ trong version 2.xx

Thư viện thẻ thông thường :

ControlTags

• if• elseIf• else• append• generator• iterator• merge• sort

• subset

Data Tags

• a• action• bean• date• debug• i18n• include• param• property• push• set• text

• url

Thư viện thẻ UI :

FormTags

• checkbox• checkboxlist• combobox• doubleselect• head• file• form• hidden• label• optiontransferselect• optgroup• password• radio• reset• select

Non-FormUITags

• actionerror• actionmessage• component• div• fielderror

AjaxTags

• a• autocompleter• bind• datetimepicker• div• head• submit• tabbedpanel• textarea• tree

Page 34: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

• submit• textarea• textfield• token• updownselect

• treenode

II.2.5. Cấu hình trong Struts

II.2.5.1. Cấu hình trong version 2.xx

Các file cấu hình cơ bản trong ứng dụng Struts2 bao gồm : web.xml, struts.xml vàstruts.properties.

File cấu hình web.xml

File cấu hình web.xml mô tả các file “nhân” của ứng dụng Web Java. Nó cũng cóthể xem như là một thành phần “nhân” của Struts framework. Trong file web.xml,Struts định nghĩa ra các lớp FilterDispatcher, Servlet Filter và khởi tạo chúng để xửlý tất cả các request.

Để hỗ trợ FilterDispatcher, Struts cung cấp thêm lớp ActionContextCleanUp đểxử lý nhiệm vụ dọn dẹp đối với các filter khác. Dưới đây là ví dụ đơn giản trong filecấu hình web.xml :<web-app id="WebApp" version="2.4"

xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee

http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

<filter><filter-name>struts</filter-name><filter-class>

org.apache.struts2.dispatcher.FilterDispatcher</filter-class><init-param>

<param-name>actionPackages</param-name><param-value>com.mycompany.myapp.actions</param-

value></init-param>

</filter>

<filter-mapping><filter-name>struts</filter-name><url-pattern>/*</url-pattern>

</filter-mapping></web-app>

File cấu hình struts.properties

File cấu hình này cung cấp khả năng thay đổi hành vi ngầm định của framework.Tấtcả các thuộc tính chứa trong file cấu hình “struts.properties” cũng có thể được cấuhình sử dụng thẻ “init-param” trong file “web.xml”, hoặc cũng có thể sử dụng thẻ“constant” trong file cấu hình “struts.xml”.

File thuộc tính ngầm định có tên là “default.properties” được chứa trong file jarstruts2-core. Để có thể thay đổi các thuộc tính ngầm định, cần tạo ra file

Page 35: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

“struts.properties” trong thư mục gốc của project. Sau đó , thêm các thuộc tính màbạn muốn thay đổi. Giá trị mới tạo sẽ ghi đè lên giá trị ngầm định.

Trong môi trường phát triển, các thuộc tính sau có thể cần thay đổi :

struts.i18n.reload = true - cho phép reload lại các file trong ứng dụng.

struts.devMode = true - cho phép chế độ phát triển cải hiện khả năngdebug.

struts.configuration.xml.reload = true – cho phép reload lại các file cấuhình XML khi có sự thay đổi mà không cần reload lại toàn bộ ứng dụngweb trong servlet container.

File cấu hình struts.xml

File cấu hình “struts.xml” chứa các thông tin cấu hình cho các action khi thực thitrong ứng dụng. Nó cũng chứa các tham số để khởi tạo các tài nguyên, bao gồm :

Các interceptor : hỗ trợ việc tiền xử lý và hậu xử lý các request.

Các lớp action : dùng để gọi tầng nghiệp vụ và truy xuất dữ liệu.

Các Result: chuẩn bị để hiển thị dữ liệu sử dụng JSP, Velocity vàFreemarker.

Dưới đây là ví dụ về file cấu hình “struts.xml” :<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts>

<package name="account" namespace="/account"extends="tiles-default">

<action name="create" method="create"class="vn.tricc.action.account.CreateAccount"><result name="create"

type="tiles">account.create</result></action>

<action name="createCompleted" method="createCompleted"class="vn.tricc.action.account.CreateAccount"><result name="createCompleted" type="redirect-

action">list</result></action>

</package></struts>

II.2.6. Ưu nhược điểm của Struts trong xây dựng ứng dụng Web

Struts kế thừa toàn bộ những ưu điểm từ mô hình MVC mang lại : độ tin cậycao, khả năng tái sử dụng và khả năng đáp ứng cao, giá chi phí chp phát triểnvà vòng đời thấp, khả năng bảo dưỡng dễ dàng, thực thi ứng dụng nhanh.

Với Struts người lập trình không phải quan tâm đến việc xây dựng MVC nhưthế nào mà chỉ cần cấu hình và chạy tầng hiển thị của dự án, điều này cho phép

Page 36: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

giảm thiểu chi phí đào tạo, thời gian phát triển dự án nhanh hơn và cho phéphệ thống chạy ổn định trên các nền hoặc các module tích hợp khác nhau.

Theo tinh thần MVC trong Struts, Struts Framework không có yêu cầu ràngbuộc đặc biệt với thành phần Model, kết nối và thao tác với cơ sở dữ liệu. Vìvậy, khi xây dựng các thành phần Model trong ứng dụng Struts có thể sử dụngrất nhiều lựa chọn : sử dụng EJB (Enterprise JavaBean), JDO (Java DataObject), Hibernate, hay các JavaBean thông thường.

Struts là một framework cho tầng web phát triển mạnh nhất trong những nămgần đây. Các hãng sản xuất như Borland, Oracle, hay IBM đều cố gắng đưa rasản phẩm hỗ trợ và tích hợp Struts trong việc xây dựng các ứng dụng web.Chính vì vậy, nó tạo ra một cộng đồng sử dụng Struts đông đảo và tạo nênnhững sản phẩm của các hãng thứ ba, xây dựng những thành phần và modulehỗ trợ và sử dụng Struts, làm phong phú thêm thư viện cho người lập trìnhweb. Đặc biệt đã có rất nhiều sản phẩm phần mềm được xây dựng trên nền củaStruts framework và đã được sử dụng một cách thành công, ví dụ như phầnmềm WebSphere Server.

Một trong những mục đích chính của Struts là cài đặt một framework dựa trênmodel 2 của Sun để giảm thiểu các nhiệm vụ chung và có tính lặp lại trongviệc xây dựng các trang Servlet và JSP.

Từ những phân tích trên, ta thấy rõ ràng rằng Struts là một framework đầy hứahẹn trong lập trình ứng dụng web. Tuy nhiên, trong giai đoạn hiện nay, JSFđang trong quá trình hoàn thiện và bổ sung các tính năng và xây dựng hệ thốngthư viện thẻ của mình và hứa hẹn sẽ mang lại nhiều tính năng linh động hơn.Các phiên bản mới được cập nhật từ phiên bản ban đầu của JSF 1.0 đến JSF1.1 và hiện nay là JSF 2.7 tích hợp cho Swing và AJAX. Đây là một sự cạnhtranh giữa Struts và JSF.

Hệ thống các thẻ thư viện hỗ trợ cho giao diện người dùng của Struts là chưathống nhất và đầy đủ. Điều này một phần là do Struts là mã nguồn mở trên nềncông nghệ Java. Do đó, việc xây dựng hệ thống thư viện là do các tổ chức, cánhân đóng góp. Điều này tuy là rất tốt vì sẽ tận dụng được trí tuệ cộng đồng .Nhưng cũng đòi hỏi cần có sự hợp tác để có thể hệ thống hóa lại thư viện từ sựđóng góp đó.

Bộ khung Struts có trách nhiệm tương tác với các thiết bị máy khách (client)và cung cấp các công cụ hỗ trợ để kết hợp 3 tầng : trình diễn trực quan (visualpresentation), logic ứng dụng (application logic) và tầng logic nghiệp vụ(business logic). Tuy vậy, sự kết nối với tầng cơ sở dữ liệu thì Struts tỏ rakhông mạnh, chính vì vậy mà Struts thường kết hợp với các framework điềukhiển dữ liệu, và Hibernate tỏ ra rất hữu hiệu trong việc hỗ trợ Struts trong lĩnhvực này. Nhưng vai trò và sức mạnh của Struts vẫn được thể hiện rõ khi kếthợp với các công nghệ khác như: JSP, AJAX, JSF …

Page 37: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

II.3. Hibernate framework

II.3.1. Lịch sử hình thành

Hibernate là một dự án đầy tham vọng với đích nhắm là đưa ra một giải pháp toàndiện cho vấn đề quản lý Persistent Data trong Java. Nó gián tiếp giúp cho các ứngdụng có thể tương tác với cơ sở dữ liệu quan hệ. Nó giúp cho các Developer đơngiản hóa đối với các vấn đề nghiệp vụ phải xử lý thủ công. Hibernate tích hợp đượcvới hầu hết các ứng dụng mới hiện nay và không yêu cầu thay đổi phá vỡ các thànhphần còn lại của hệ thống.

Một ứng dụng có thể chia làm 3 phần như sau : phần giao diện người dùng (GUIlayer), phần xử lý nghiệp vụ (business layer), và phần chứa dữ liệu (data layer). Cụthể, business layer có thể chia nhỏ ra thành 2 layer con là business logic layer (chỉquan tâm đến ý nghĩa của các nghiệp vụ, các tính toán nhằm thỏa mãn yêu cầungười dùng) và persistence layer. Persistence layer chịu trách nhiệm giao tiếp vớidata layer (thường là một hệ quản trị cơ sở dữ liệu quan hệ - RDBMS). Persistencesẽ đảm nhiệm các nhiệm vụ mở kết nối, truy xuất và lưu dữ liệu vào các RDBMS.

Việc phân chia ra như vậy có lợi ích là công việc sẽ được tách bạch. Người nàolo thiết kế và xử lý GUI thì chỉ việc chú tâm vào công việc đó. Người lo businesslayer thì chỉ cần tập trung vào thiết kế và phát triển làm sao thỏa mãn cácrequirement của khách hàng mà không phải chú tâm đến các khía cạnh thực hiệnbên dưới. Còn người lo persistence layer thì chỉ chú trọng đến các khía cạnh thựchiện và giải quyết các technical issues mà thôi. Cũng như sẽ có những DBA (DBAdministrators) lo việc cài đặt và tạo các object trong các RDBMS.

Như vậy, persistence layer là một layer có nhiệm vụ kết nối RDBMS và truyxuất, thao tác dữ liệu đã được lưu trữ cũng như lưu trữ dữ liệu mới vào chúng.Hibernate chính là một framework cho persistence layer. Có thể thấy rằng nhờcó Hibernate framework mà giờ đây khi phát triển một ứng dụng, ta chỉ cần chú tâmvào những layer khác mà không phải bận tâm nhiều về persistence layer nữa. Tươngtự như vậy, nếu bạn có một UI framework, bạn cũng sẽ không phải bận tâm nhiềuvề GUI layer nữa.

Cơ sở dữ liệu quan hệ được thiết kế để quản lý dữ liệu theo mô hình quan hệ.Tuy nhiên, khi làm việc với các ứng dụng hướng đối tượng, bạn có thể gặp một sốvấn đề khi cố gắng persist các đối tượng vào trong mô hình quan hệ. Với sự khácbiệt của hai mô hình, làm thế nào để chúng làm việc được với nhau. Để giải quyếtvấn đề này, object / relational mapping (ORM) ra đời.

ORM là cầu nối giữa hai mô hình, cho phép ứng dụng của bạn persist các đốitượng trực tiếp vào cơ sở dữ liệu quan hệ mà không cần chuyển đổi qua lại giữaobject và relational. Có một vài ORM framework yêu cầu các đối tượng kế thừa từlớp cơ bản hoặc yêu cầu xử lý bytecode. Trong khi đó, Hibernate chỉ yêu cầu một sốlượng nhỏ metedata cho mỗi đối tượng persistent. Nó cung cấp đầy đủ ánh xạ đốitượng / quan hệ, nghĩa là hỗ trợ tất cả các đặc trưng hướng đối tượng mà cơ sở dữliệu quan hệ thiếu.

Page 38: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

II.3.2. Một số khái niệm

II.3.2.1. Các khái niệm liên quan đến object / relational persistence

Persistence là gì ?

Hầu hết các ứng dụng đều đòi hỏi dữ liệu persistent. Persistence là một khái niệmcơ bản trong quá trình phát triển ứng dụng. Nếu một hệ thống thông tin không duytrì được dữ liệu khi nó không hoạt động thì hệ thống đó khó có thể được sử dụngtốt. Khi nói về persistence trong Java, chúng ta thường nói về việc lưu trữ dữ liệutrong mô hình cơ sở dữ liệu quan hệ sử dụng SQL. Persistence là nói đến khả năngmột đối tượng duy trì sự tồn tại sau thời gian sống của chương trình tạo ra nó. Nếukhông có khả năng này, dữ liệu chỉ tồn tại trong bộ nhớ và sẽ mất đi khi bộ nhớ tắthoặc máy tính shutdown.

Persistence trong các ứng dụng hướng đối tượng

Trong một ứng dụng hướng đối tượng, persistence cho phép một đối tượng có thể“sống” lâu hơn. Trạng thái của đối tượng có thể được lưu trên ổ đĩa, và một đốitượng với cùng trạng thái đó có thể lại được tạo ra ở một thời điểm khác trongtương lai.

Các cơ sở dữ liệu quan hệ ngày nay hỗ trợ biểu diễn có cấu trúc của dữ liệupersistent, nó cho phép thao tác, sắp xếp, tìm kiếm và kết tập dữ liệu. Các hệ quảntrị cơ sở dữ liệu hỗ trợ việc quản lý tính toàn vẹn của dữ liệu, chia sẻ dữ liệu đangười dùng với nhiều ứng dụng khác nhau. Chúng bảo đảm tính toàn vẹn của dữliệu thông qua các quy tắc được thực thi bởi các ràng buộc. Hệ quản trị cơ sở dữliệu cũng hỗ trợ việc bảo mật nhiều cấp đối với dữ liệu.

Một ứng dụng sử dụng Hibernate thường không làm việc trực tiếp với các thựcthể trong cơ sở dữ liệu, chúng sẽ sử dụng các mô hình hướng đối tượng tương ứngvới các thực thể trong cơ sở dữ liệu để thao tác và xử lý dữ liệu. Ví dụ: Nếu cơ sởdữ liệu của một hệ thống bán hàng trực tuyến có 2 bảng là ITEM và BID thì trongứng dụng Java sẽ định nghĩa ra 2 lớp tương ứng là Item và Bid.

Sau đó, thay vì làm việc trực tiếp với các dòng và cột của result-set SQL, tầngbusiness sẽ tương tác với các đối tượng này. Tầng business sẽ không được thực thitrong cơ sở dữ liệu (như là một stored procedure); nó được thực thi trong Ứng dụngJava ở tầng ứng dụng. Điều này cho phép tầng business có thể sử dụng các kháiniệm hướng đối tượng phức tạp như tính kế thừa hay tính đa hình.Ví dụ, Chúng tacó thể sử dụng các chuẩn thiết kế như Strategy, Mediator, và Composite.

Cần chú ý là: Không phải tất cả các ứng dụng Java đều được thiết kế theo cáchnày. Đối với các ứng dụng đơn giản, việc thực hiện theo mô hình này lại trở nênkhông phù hợp. Đối với các ứng dụng phức tạp mà có thể sử dụng lại các storedprocedure sẵn có thì SQL và JDBC API lại là một giải pháp tốt cho việc thực thi vàgiao tiếp với cơ sở dữ liệu.

Tuy nhiên, trong trường hợp các ứng dụng mang tính nghiệp vụ cao, cách tiếpcận theo mô hình này sẽ giúp cho việc cải thiện việc dùng lại code và nâng cao khảnăng bảo trì.

Page 39: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

II.3.2.2. Persistence layer

Hình II.9 dưới đây thể hiện mối liên hệ giữa tầng persistence với các tầng khác trong một ứng dụng. Các tầng liên hệ với nhau theo các nguyên tắc :

• Các tầng giao tiếp với nhau theo thứ tự từ trên xuống dưới. Một tầng chỉ phụ thuộc trực tiếp vào tầng ở ngay dưới nó.

• Mỗi tầng không biết đến các tầng khác mà không phải ở ngay dưới nó.

Hình II.6 Persistence layer trong kiến trúc phân tầng

Presentation layer : Tầng giao diện người dùng – là tầng cao nhất. Đó chínhlà các mã lệnh dùng để biểu diễn hiển thị và điều hướng trang trên màn hình.

Business layer : Tầng tiếp theo của ứng dụng- nằm dưới tầng presentation.Tầng business có nhiệm vụ thực hiện bất cứ quy tắc nghiệp vụ nào hoặc cácyêu cầu hệ thống được xác định từ người sử dụng. Tầng này thường bao gồmmột số các thành phần điều khiển – các mã lệnh dùng khi kích hoạt các quytắc nghiệp vụ. Trong một số hệ thống, tầng này có thể chứa biểu diễn của cácthực thể nghiệp vụ.

Persistence layer : Tầng persistence là một nhóm các lớp và các thành phầncho việc lưu trữ và phục hồi dữ liệu. Chức năng của tầng này là chứa các môhình của các thực thể nghiệp vụ (thậm chí nó chỉ là mô hình metadata).

Database: Cơ sở dữ liệu nằm ngoài ứng dụng Java. Nó biểu diễn trạng tháicủa hệ thống. Nếu cơ sở dữ liệu SQL được sử dụng, nó bao gồm các lượcđồ quan hệ và các stored procedure.

Helper and utility classes: Mỗi một ứng dụng có một tập helper hoặc cáclớp tiện ích được sử dụng trong mỗi tầng (ví dụ như các lớp Exception đểxử lí lỗi). Các thành phần này không phải là một dạng tầng vì chúng khôngtuân theo nguyên tắc trong kiến trúc tầng.

II.3.2.3. ORM (Object/Relational Mapping)

Như đã giới thiệu sơ qua ở phần trên, ORM được tự động (và trong suốt) ánh xạpersistence object tới các bảng trong cơ sở dữ liệu quan hệ, sử dụng metadata để môtả việc ánh xạ giữa các đối tượng và cơ sở dữ liệu.

Page 40: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Một ORM bao gồm bốn phần sau :

Một API để thực thi các thao tác cơ bản CRUD trên đối tượng của các lớppersistent.

Một ngôn ngữ hay API để xác định các truy vấn tới các lớp và các thuộc tínhcủa lớp.

Một tiện ích cho việc xác định ánh xạ metadata.

Một kỹ thuật cho việc thực thi ORM để liên hệ với các đối tượng với cácthao tác checking, fetching và các hàm tối ưu khác.

Với ORM, ứng dụng sẽ tương tác với các ORM API và các lớp ánh xạ từ cơ sở dữliệu và nó được trừu tượng hóa dưới SQL/JDBC. Dựa trên các tính năng hay việcthực thi đặc biệt, ORM cũng có thể làm các nhiệm vụ như locking, caching,relieving một ứng dụng.

II.3.3. Kiến trúc hệ thống

Hình II.10 dưới đây mô tả các thành phần quan trọng nhất của Hibernate trong cáctầng business và persistence. Chúng ta có thể thấy tầng business nằm trên tầngpersistence, và nó hoạt động như là trình khách (client) của tầng persistence theokiến kiểu kiến trúc tầng truyền thống.

Các interface như trong hình có thể được chia ra thành các loại sau :

Các interface được gọi bởi ứng dụng để thực thi các thao tác cơ bản CRUD(Create, Retrieve, Update, Delete) và các hành vi truy vấn. Đó là các phầnchính của sự phụ thuộc nghiệp vụ ứng dụng / logic điều khiển trongHibernate. Chúng bao gồm : Session, Transaction và Query.

Các interface được gọi từ các mã lệnh trong ứng dụng để cấu hìnhHibernate, hầu hết đó là các lớp Configuration.

Các interface CallBack cho phép ứng dụng tương tác với các sự kiện xảy ratrong Hibernate, như Interceptor, Lifecycle, và Validatable.

Các interface cho phép mở rộng chức năng mapping của Hibernate, baogồm UserType, CompositedUserType, và IdentifierGenerator. Cácinterface này được thực hiện bởi các mã lệnh trong ứng dụng (nếu cầnthiết).

Page 41: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình II.7 Kiến trúc hệ thống trong Hibernate

Hibernate có thể sử dụng các thành phần sẵn có của Java API, bao gồm JDBC, JavaTransaction API (JTA), và Java Naming and Directory Interface (JNDI). JDBC hỗtrợ các mức cơ bản của việc trừu tượng hóa các chức năng chung của các cơ sở dữliệu quan hệ, nó cho phép hầu như bất cứ cơ sở dữ liệu nào với JDBC driver có thểđược hỗ trợ bởi Hibernate. JNDI và JTA cho phép Hibernate có thể tích hợp với cácJ2EE application server.

II.3.4. Cấu hình trong HibernateCác file cấu hình cơ bản nhưng không thể thiếu trong ứng dụng Hibernate baogồm :

1. Persistence class:

Persistence class là một Plain Old Java Object (POJO model). Một POJOtương tự như một JavaBean, có những phương thức getter và setter để truy cậpcác thuộc tính của nó. Persistence class có những đặc điểm sau :

Nó thay thế hướng đối tượng cho các bảng ở cơ sở dữ liệu.

Các thuộc tính của bảng trở thành các biến instance của persistence class.

Kiểu dữ liệu của các biến instance là domain của thuộc tính.

Đối tượng của persistence class thay thế cho hàng của bảng trong cơ sởdữ liệu.

2. Mapping file:

Mapping file là một file XML chứa ánh xạ chi tiết giữa persistence class và bảngnó đại diện. Các thành phần bắt buộc của file XML này là :

Page 42: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hibernate – mapping : Đây là thành phần gốc bao gồm tất cả các thànhphần khác.

Class : Được sử dụng để ánh xạ tên bảng thành persistence class. Tênthuộc tính được sử dụng để xác định tên lớp. Ví dụ, để ánh xạ một bảng cótên là ORDER thành một persistence class với tên đầy đủ làvn.triax.persist.Order sẽ như sau : <class name=”vn.triax.persist.Order” table=”ORDER”>…</class>

Id : Thành phần này sử dụng để ánh xạ khóa chính của bảng thành mộtbiến instance của class. Giá trị của khóa chính có thể được tự động tạora.Thành phần generator có thể được sử dụng để thông báo cho Hibernatemột lớp sẽ được sử dụng ở đâu để tự động tạo id, hoặc id được gán bởi ứngdụng :

<id name="id" type="string" unsaved-value="null"><column name="id" sql-type="char(32)" not-null="true"/><generator class="assigned"/>

</id>

Property : Thành phần này thuộc về các cột thành phần con của bảng, ánhxạ những thuộc tính khác (hoặc các cột thành những biến instance củapersistence class). Thuộc tính name của property chứa tên của biến nhưmột giá trị. Thuộc tính name của thành phần column chứa tên của cột vàbiến instance được ánh xạ. Các thuộc tính length và sql-type trỏ đến độ dàivà kiểu dữ liệu của cột.

<property name="name"><column name="name" sql-type="char(255)" not-

null="true"/></property>

Dưới đây là một ví dụ cụ thể của file mapping :<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!--

Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>

<class name="vn.tricc.domain.Accounts" table="accounts"schema="public"><id name="accountId" type="java.lang.Integer">

<column name="account_id" /><generator class="increment" />

</id><property name="username" type="java.lang.String">

<column name="username" length="20" not-null="true" />

</property><property name="password" type="java.lang.String">

<column name="password" length="50" not-null="true" />

</property><property name="status" type="java.lang.String">

<column name="status" length="1" not-null="true" /></property><set name="accountRoles" inverse="true">

<key>

Page 43: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

<column name="account_id" not-null="true" /></key><one-to-many class="vn.tricc.domain.AccountRole" />

</set></class>

</hibernate-mapping>

3. Hibernate Configuration file :

Đây là file cấu hình, khởi tạo các tài nguyên trong hệ thống, bao gồm khởi tạo cácthông tin về cơ sở dữ liệu, cấu hình transaction và tạo ánh xạ tới các file mapping.Dưới đây là một ví dụ cụ thể của file cấu hình này :<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration>

<session-factory>

<property name="connection.username">postgres</property><property name="connection.url">

jdbc:postgresql://localhost:5432/tricc</property><property name="dialect">

org.hibernate.dialect.PostgreSQLDialect</property><property name="connection.password">postgres</property><property name="connection.driver_class">

org.postgresql.Driver</property>

<mapping resource="vn/tricc/domain/Roles.hbm.xml" /><mapping resource="vn/tricc/domain/AccountRole.hbm.xml" /> <mapping resource="vn/tricc/domain/Accounts.hbm.xml"

/>

</session-factory>

</hibernate-configuration>

II.3.5. Ưu nhược điểm của Hibernate trong lập trình ứng dụng Web

Ưu điểm :

1. Hibernate là một Relational Persistence cho Java :

Làm việc với cả phần mềm hướng đối tượng và cơ sở dữ liệu quan hệ là mộtnhiệm vụ phức tạp với JDBC vì có sự không tương xứng giữa dữ liệu đượcbiểu diễn trong đối tượng đối với cơ sở dữ liệu quan hệ. Vì thế với JDBC,người lập trình phải viêt code để ánh xạ dữ liệu của mô hình đối tượng biểudiễn mô hình dữ liệu quan hệ và các lược đồ dữ liệu tương ứng. Hibernate là

Page 44: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

một giải pháp ORM rất mạnh và linh động để ánh xạ các lớp Java tới cácbảng trong cơ sở dữ liệu. Hibernate bản thân nó đã được đảm bảo tính nhấtquán bằng cách sử dụng các file XML giúp cho người lập trình không phảiviết code như đối với JDBC.

2. Transparent Persistence

Việc tự động ánh xạ các đối tượng Java với các bảng trong cơ sở dữ liệuđược gọi là Transparent Persistence. Hibernate hỗ trợ persistence trong suốtvà người lập trình không cần viết code một cách rõ ràng để ánh xạ các bảngtrong cơ sở dữ liệu tới các đối tượng trong ứng dụng trong khi tương tác vớiRDBMS.

3. Hỗ trợ ngôn ngữ truy vấn

JDBC chỉ hỗ trợ ngôn ngữ SQL truyền thống. Người lập trình sẽ phải tìmnhững cách thức phù hợp nhất để truy xuất cơ sở dữ liệu. Hibernate hỗ trợngôn ngữ truy vấn mạnh mẽ là HQL, một ngôn ngữ có đầy đủ các tính năngnhư ngôn ngữ SQL và những phần mở rộng khác giúp cho giải quyết các vấnđề truy vấn phức tạp.

4. Database dựa vào code

Ứng dụng sử dụng JDBC để xử lý dữ liệu persistent sẽ có số lượng code rấtlớn. Đó là những mã lệnh để ánh xạ dữ liệu bảng tới đối tượng của ứng dụng.Khi một bảng bị thay đổi hoặc database có sự thay đổi thì số lượng code phảithay đổi theo sẽ rất lớn và phức tạp. Hibernate hỗ trợ ánh xạ ngay trong bảnthân nó. Những ánh xạ giữa các bảng và các đối tượng ứng dụng được thồnqua các file XML. Nếu có bất cứ sự thay đổi nào trong database hay cácbảng thì ta chỉ cần thay đổi thuộc tính của file XML.

5. Giảm chi phí bảo trì

Với JDBC, người lập trình sẽ phải xử lý các result set và chuyển đổi nóthành các đối tượng Java để có thể sử dụng dữ liệu persistent trong ứngdụng. Vì vậy với JDBC, việc ánh xạ giữa các đối tượng Java và các bảngtrong database là công việc thủ công. Hibernate giảm thiểu các dòng mã lệnhbằng cách duy trì việc ánh xạ object-table ngay trong nó và trả kết quả vềứng dụng thông qua các lớp Java. Nó giúp các lập trình viên giảm bớt gánhnặng xử lý thủ công đối với dữ liệu persistent, do vậy làm giảm thời gianphát triển và chi phí bảo trì.

6. Thực hiện tối ưu

Các dữ liệu được giữ lại trong bộ đệm, sử dụng trong ứng dụng để giảmthiểu quá trình truy xuất đĩa cứng. Hibernate, với transparent persistence, bộđệm được thiết lập trong không gian làm việc của ứng dụng. Các relationaltuple được đưa vào bộ đệm như là một kết quả của truy vấn. Nó giúp cảithiện tốc độ thực thi nếu ứng dụng client đọc các dữ liệu giống nhau ở nhiềuthời điểm và ghi nhiều lần.

7. Mã nguồn mở và hoàn toàn miễn phí

Hibernate là dự án mã nguồn mở và miễn phí sử dụng cho cả quá trình pháttriển lẫn triển khai sản phẩm.

Page 45: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

8. Độ tin cậy cao và dễ mở rộng phạm vi

Phạm vi áp dụng Hibernate thích hợp trong bất cứ môi trường nào. Không cóvấn đề gì nếu sử dụng nó với mạng Intranet với hàng trăm nghìn server.JDBC không thể dễ dàng làm được điều này.

Nhược điểm :

1. Sử dụng Hibernate là không khả thi với các ứng dụng :

• Đơn giản, sử dụng một database và không có sự thay đổi.

• Cần đưa dữ liệu tới các bảng trong database mà không dùng đến cáctruy vấn SQL.

• Không có các đối tượng được ánh xạ tới hai bảng khác nhau.

Hibernate có nhiều tầng và tương đối phức tạp. Vì vậy, đối với các loại ứngdụng trên thì giải pháp sử dụng JDBC là lựa chọn tốt nhất.

2. Sự hỗ trợ Hibernate trên Internet là chưa đủ.

3. Bất cứ ai muốn duy trì ứng dụng sử dụng Hibernate sẽ cần phải hiểu vềHibernate.

4. Đối với dữ liệu phức tạp, việc ánh xạ từ đối tượng tới các bảng không làmgiảm thời gian thực hiện và có thể làm tăng thời gian chuyển đổi.

5. Hibernate không cho phép một số kiểu truy vấn được hỗ trợ trong JDBC.Ví dụ, nó không cho phép insert nhiều đối tượng (persistent data) tới cácbảng đồng thời sử dụng một câu truy vấn. Người lập trình sẽ phải viếtnhiều câu truy vấn để insert mỗi đối tượng.

II.4. Spring framework

II.4.1. Lịch sử hình thành

Spring là một application framework mã nguồn mở, được giới thiệu vào năm 2002.Rod Johnson đã đưa ra ý tưởng này từ kinh nghiệm làm việc với kiến trúc J2EE.

Ông đã viết cuốn sách với tiêu đề : “J2EE Development without EJB” để giớithiệu khái niệm trình chứa hạng nhẹ (lightweight container) với lý luận : EJB có giátrị của nó nhưng không phải lúc nào cũng cần thiết và phù hợp cho tất cả ứng dụng.

Theo Rod Johnson thì EJB không phức tạp nhưng nó cố gắng cung cấp giảiquyết cho các vấn đề phức tạp. EJB được phát triển chính cho các giao dịch, đốitượng được phân phát ở trên các máy khác. Nhưng một số Enterprise Project khôngcó mức độ phức tạp và vẫn sử dụng EJB và thậm chí các ứng dụng đơn giản lại trởnên phức tạp. Trong trường hợp này thì Spring là một lựa chọn.

Các framework phổ biến khác như Struts, JSF, Tapestry …là các framwork tốtcho tầng Web nhưng khi chúng ta sử dụng framework này, chúng ta phải cung cấpthêm framework khác để giải quyết tầng enterprise mà tích hợp tốt với các

Page 46: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

framework này. Spring làm giảm bớt vấn đề này bằng cách cung cấp mộtframework toàn diện bao gồm :

• Core bean container

• MVC framework

• AOP integration framework

• JDBC integration framework

• EJB integration framework

Các mặt mạnh trong kiến trúc Spring bao gồm :

Spring tổ chức các tầng trung gian một cách hiệu quả, mà không quan tâmliệu người dùng có sử dụng EJB hay không. Spring sẽ thăm dò xem có nênđể người dùng tự quyết định nếu người dùng chỉ dùng Struts hoặc cácframework khác với các API của J2EE. Và thành phần được coi là quantrọng nhất trong tầng trung gian, các dịch vụ quản lý cấu hình của Spring cóthể đưa vào một tầng kiến trúc nào đó của một môi trường thực thi bất kỳ.

Spring sẽ giúp loại bỏ tình trạng lan tràn Singleton trong nhiều dự án. Theomột số nhà nghiên cứu, đây là một vấn đề lớn, làm suy giảm khả năng kiểmthử và tính hướng đối tượng.

Spring sẽ khiến cộng đồng dần quên đi nhu cầu sử dụng các định dạng filethuộc tính thiết kế thông qua việc quản lý cấu hình nhất quán trong các ứngdụng và các dự án. Với IoC (Inversion of Control) và DI (DependencyInjection), người dùng chỉ cần quan sát các thuộc tính JavaBean của lớp chocác tham số khởi tạo mà không cầ phải đọc Javadoc hay mã nguồn.

Spring giúp công việc lập trình trở nên hiệu quả hơn bằng cách giảm chi phílập trình giao diện, mà không phải là các lớp.

Spring được thiết kế để các ứng dụng phụ thuộc ở mức tối thiểu vào các hàmAPI. Phần lớn các đối tượng giao dịch trong các ứng dụng Spring đều khôngcó sự phụ thuộc nào vào Spring.

Các ứng dụng xây dựng trên nền Spring rất dễ kiểm thử đơn vị.

Spring biến việc sử dụng EJB là một tùy chọn thay vì là thành phần bắt buộctrong kiến trúc ứng dụng. Người dùng có thể chọn cài đặt các chuẩn thươngmại như POJO hoặc EJB cục bộ mà không ảnh hưởng tới mã gọi.

Spring còn trợ giúp giải quyết nhiều vấn đề mà không cần EJB. Spring cungcấp một công cụ thay thế EJB phù hợp với các ứng dụng. Ví dụ, Spring sửdụng AOP để phân phối các quản lý khai báo mà không dùng container EJB,thậm chí không cần JTA, nếu chỉ cần làm việc với một cơ sở dữ liệu.

Spring cung cấp một framework nhất quán để truy cập cơ sở dữ liệu, dùngười dùng sử dụng JDBC hay một số sản phẩm ánh xạ O/R như TopLink,Hibernate hoặc một cài đặt JDO.

Spring sử dụng một mô hình lập trình đơn giản, nhất quán trong nhiều lĩnh vực,biến công cụ này trở thành một “loại hồ gắn kết” kiến trúc lý tưởng. Có thể thấy rõ

Page 47: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

điều này khi so sánh với với JDBC, JMS, JavaMail, JNDI và nhiều hàm API quantrọng khác.

II.4.2. Các thành phần trong Spring

Spring framework có thể được xem như một kiến trúc chứa 7 module. Chắc năngcủa mỗi thành phần như sau :

1. Core container:

Core container cung cấp các chức năng cơ bản của Spring. Thành phần chínhcủa nó là BeanFactory, một cài đặt của Factory Pattern. BeanFactory áp dụngIoC pattern để đặc tả sự phụ thuộc từ code của ứng dụng.

2. 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 service như JNDI access, EJB integration, e-mail,internalization, validation, và scheduling functionality.

Hình II.8 Các module trong Spring

3. Spring AOP (Aspect-Oriented):

Spring AOP module tích hợp chức năng lập trình hướng khía cạnh vào Springframework thông qua cấu hình của nó. Spring AOP module cung cấp các dịchvụ quản lý giao dịch cho các đối tượng trong bất kỳ ứng dụng nào sử dụngSpring. Với Spring AOP, chúng ta có thể sử dụng tích hợp declarativetransaction management vào trong ứng dụng mà không cần dựa vào EJBcomponent.

Spring AOP module cũng đưa lập trình metadata vào trong Spring. Sử dụngcái này chúng ta có thể thêm annotation vào mã nguồn để hướng dẫn Spring nơivà làm thế nào để liên hệ với aspect.

4. Spring DAO

Page 48: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Tầng JDBC và DAO đưa ra một cây phân cấp exception để quản lý kết nối đếndatabase, điều khiển exception và thông báo lỗi thông qua vendor của database.Tầng exception đơn giản điều khiển lỗi và giảm khối lượng code mà chúng tacầ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.

5. Spring ORM

Spring có thể tích hợp với một vài ORM framework để cung cấp ObjectRelation tool bao gồm : JDO, Hibernate, OJB và iBatis SQL Maps.

6. Spring web module

Nằm trên application context module, cung cấp context cho các ứng dụng Web.Spring cũng hỗ trợ tích hợp với Struts, JSF và WebWork. Web module cũng làmgiảm bớt các công việc điều khiển request và gắn các tham số của request vàocác đối tượng domain.

7. Spring MVC Framework

MVC framework cài đặt đầy đủ các đặc tính của MVC pattern để xây dựng cácứng dụng web. MVC framework cấu hình thông qua giao diện và chứa đựngmột số kỹ thuật view bao gồm : JSP, Velocity, Tiles và generation of PDF vàExcel file.

II.4.4. Cấu hình Spring

Người dùng Spring thường cấu hình ứng dụng của họ trong các file XML địnhnghĩa bean. Thẻ gốc của một tài liệu XML định nghĩa bean là <bean>. Thành phần<beans> chứa một hoặc nhiều định nghĩa <bean>. Chúng ta thường chỉ ra lớp vàthuộc tính của từng định nghĩa bean. Chúng ta cũng phải xác định id – đây sẽ là tênsử dụng khi tham chiếu đến bean trong mã chương trình.

Hãy xem xét một ví dụ đơn giản thực hiện việc cấu hình 3 đối tượng ứng dụng vớicác mối quan hệ thường thấy trong các ứng dụng J2EE:

• Một J2EE DataSource

• Một DAO sử dụng DataSource

• Một đối tượng nghiệp vụ sử dụng DAO trong quá trình làm việc

Trong ví dụ dưới đây, chúng ta sử dụng một BasicDataSource từ dự án JakartaCommons DBCP. (ComboPooledDataSource từ dự án C3PO cũng là một lựa chọntốt). Cũng giống như các lớp sẵn có khác, BasicDataSource có thể dễ dàng được sửdụng trong một Spring bean factory vì nó có thể được cấu hình theo kiểu JavaBean.Phương thức close cần được gọi để shutdown được đăng ký thông qua thuộc tính“destroy-method” của Spring nhằm tránh cho BasicDataSource không phải cài đặtbất kỳ giao diện Spring nào.

<beans> <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver" />

Page 49: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

<property name="url" value="jdbc:mysql://localhost:3306/mydb" /> <property name="username" value="someone" /></bean>

Tất cả các thuộc tính của BasicDataSource mà chúng ta chèn vào là các String, vìvậy, chúng ta chỉ ra giá trị của chúng bằng thuộc tính “value”. (Cách làm ngắn gọnnày được giới thiệu trong Spring 1.2. Nó là một cách thay thế tiện lợi cho phần tửcon <value> - rất hữu ích cho các giá trị mà thuộc tính XML gặp khó khăn trongviệc định nghĩa). Spring sử dụng cơ chế JavaBean PropertyEditor chuẩn để chuyểnđổi các biểu diễn String thành các kiểu khác khi cần thiết.

Bây giờ, chúng ta định nghĩa DAO, gồm một bean tham chiếu tới DataSource. Cácmối quan hệ giữa các bean được chỉ ra bằng cách sử dụng thuộc tính “ref” hay phầntử <ref>:

<bean id="exampleDataAccessObject" class="example.ExampleDataAccessObject"> <property name="dataSource" ref="myDataSource" /> </bean>

Đối tượng nghiệp vụ có một tham chiếu tới DAO, và một thuộc tính kiểu int(exampleParam). Trong trường hợp này, chúng ta sử dụng cú pháp phần tử conquen thuộc với những người đã từng sử dụng các phiên bản Spring trước:

<bean id="exampleBusinessObject" class="example.ExampleBusinessObject">

<property name="dataAccessObject"> <ref bean="exampleDataAccessObject"/>

</property> <property name="exampleParam"> <value>10</value> </property></bean>

Các mối quan hệ giữa các đối tượng thường được thiết lập một cách tường minhtrong cấu hình. Tuy nhiên, Spring cũng cung cấp cái mà chúng ta gọi là hỗ trợ“autowire”, trong đó chỉ ra các phụ thuộc giữa các bean. Hạn chế của việc này –cũng như với PicoContainer – là nếu có nhiều bean thuộc một kiểu cụ thể thì khôngthể tìm ra thực thể mà phụ thuộc của kiểu đó áp dụng cho. Về mặt tích cực, các phụthuộc không thoả mãn có thể được phát hiện khi khởi tạo factory. (Spring cũngcung cấp một cơ chế kiểm tra phụ thuộc tùy chọn cho cấu hình tường minh để đạtđược mục đích này).

Chúng ta có thể sử dụng tính năng autowire như sau, nếu không muốn viết mãtường minh cho các mối quan hệ này:

<bean id="exampleBusinessObject"class="example.ExampleBusinessObject" autowire="byType">

<property name="exampleParam" value="10" /></bean>

Như vậy, với cách này, Spring sẽ tìm ra thuộc tính dataSource củaexampleBusinessObject cần được thiết lập cho cài đặt của DataSource mà nó tìmthấy trong biểu diễn BeanFactory. Sẽ phát sinh lỗi nếu không có, hoặc có nhiều hơnmột bean của kiểu yêu cầu trong biểu diễn BeanFactory. Chúng ta vẫn cần thiết lậpthuộc tính exampleParam, vì nó không phải là một tham chiếu.

Page 50: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hãy chú ý tới các bộ thiết lập thuộc tính (property setter) trong các lớp nghiệp vụ- tương ứng với các tham chiếu XML trong tài liệu định nghĩa bean. Chúng đượcgọi bởi Spring trước khi đối tượng được sử dụng.

Lưu ý rằng các thuộc tính JavaBean không được khai báo trên các giao diệnnghiệp vụ mà các đối tượng gọi làm việc với. Chúng là một cài đặt chi tiết. Chúngta có thể dễ dàng “plug-in” các lớp cài đặt khác nhau với các thuộc tính bean khácnhau mà không làm ảnh hưởng tới các đối tượng hay lời gọi liên quan.

II.4.5. Ưu điểm của Spring

Quản lý phiên. Spring giúp kiểm soát hiệu quả, dễ dàng, và an toàn các đơn vịcông việc như các phiên làm việc Hibernate hay TopLink. Mã liên quan chỉ sửdụng riêng công cụ ORM thường cần phải sử dụng kèm một đối tượng“Session” để kiểm soát tính hiệu quả và giao dịch thích hợp. Spring có thể tạomới và liên kết một phiên tới luồng hiện tại một cách trong suốt, bằng cách sửdụng hoặc hướng tiếp cận kiểu lá chắn AOP, hoặc sử dụng một lớp bao“template” tường minh tại mức mã Java. Do vậy, Spring giải quyết được nhiềuvấn đề liên quan tới sử dụng ảnh hưởng tới nhiều người dùng của công nghệORM.

Quản lý tài nguyên. Các ngữ cảnh ứng dụng (application context) Spring cóthể kiểm soát vị trí và cấu hình của các Hibernate SessionFactories, các nguồndữ liệu JDBC cũng như các nguồn tài nguyên liên quan khác. Do vậy, SpringFramework cho phép các giá trị này được dễ dàng quản lý và thay đổi.

Quản lý giao dịch tích hợp. Spring cho phép bạn bao mã ORM bằng một láchắn phương thức AOP, hoặc một lớp bao “template” tường minh tại mức mãJava. Trong bất kỳ trường hợp nào, ngữ nghĩa giao dịch đều được kiểm soátgiúp bạn, và việc kiểm soát giao dịch thích hợp trong trường hợp xảy ra cácngoại lệ cũng được quan tâm. Như chúng ta sẽ đề cập sau đây, bạn cũng nhậnđược lợi ích của khả năng sử dụng và tráo đổi các bộ quản lý giao dịch khácnhau, mà không bị ảnh hưởng tới mã ORM liên quan. Ngoài ra, một lợi íchkhác mà Spring đem lại là mã JDBC liên quan có thể hoàn toàn tích hợp vớimã ORM, trong hầu hết các công cụ hỗ trợ ORM. Điều này rất hữu ích choviệc kiểm soát tính năng không tuân theo ORM.

Bao đóng ngoại lệ. Như được đề cập ở trên, Spring có thể bao đóng các ngoạilệ từ tầng ORM, chuyển đổi chúng từ các ngoại lệ độc quyền của các hãngthành một tập các ngoại lệ trừu tượng thời gian chạy. Điều này cho phép bạnkiểm soát hầu hết các ngoại lệ bền bỉ nhất, đó là những ngoại lệ không có khảnăng khôi phục, chỉ ở trong các tầng thích hợp, mà không làm ảnh hưởng tớicác cụm catch/throw và các khai báo ngoại lệ được sử dụng thường xuyên.Bạn có thể vẫn bẫy và kiểm soát các ngoại lệ ở bất kỳ nơi nào cần thiết. Lưu ýrằng các ngoại lệ JDBC (bao gồm cả các đặc trưng cụ thể của DB) cũng đượcchuyển đổi tới cùng hệ thống cấp bậc, nghĩa là bạn có thể thực hiện một sốthao tác với JDBC bên trong một mô hình lập trình nhất quán.

Tránh sự bó buộc của các nhà cung cấp. Các giải pháp ORM có các đặc tínhhiệu năng khác, và không có giải pháp nào thỏa mãn được tất cả. Thay vào đó,bạn có thể sẽ nhận thấy rằng tính năng cụ thể lại không phù hợp với một cài

Page 51: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

đặt sử dụng công cụ ORM của bạn. Vì vậy, một giải pháp khôn ngoan là táchkiến trúc của bạn khỏi các cài đặt phụ thuộc công cụ. Nếu bạn cần chuyển tớimột cài đặt khác vì các lý do liên quan tới chức năng, hiệu năng, hay các mốiquan tâm khác, thì việc sử dụng Spring hiện tại có thể khiến việc chuyển đổiđược dễ dàng hơn rất nhiều. Sự trừu tượng của Spring trong Transactions vàExceptions của công cụ ORM, cùng với hướng tiếp cận IoC cho phép bạn dễdàng chuyển đổi trong các đối tượng ánh xạ/DAO cài đặt chức năng truy cậpdữ liệu khiến nó dễ cô lập tất cả các mã phụ thuộc vào ORM cụ thể trong mộtlĩnh vực của ứng dụng mà không làm ảnh hưởng tới sức mạnh của công cụORM. Ứng dụng mẫu PetClinic đi kèm với Spring demo lợi ích của tính khảchuyển mà Spring đem lại thông qua việc cung cấp các biến sử dụng JDBC,Hibernate, TopLink và Apache OJB để cài đặt tầng tồn tại lâu dài (pesistencelayer).

Dễ dàng kiểm thử. Sự chuyển đổi hướng tiếp cận điều khiển của Spring khiếnnó dễ dàng chuyển đổi cài đặt và vị trí của nguồn tài nguyên như các sessionfactory của Hibernate, các nguồn dữ liệu, trình quản lý giao diện, và các càiđặt đối tượng ánh xạ (nếu cần thiết). Việc này giúp dễ dàng hơn rất nhiều trongviệc cô lập và kiểm thử từng đoạn mã liên quan một cách tách biệt.

Page 52: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

CHƯƠNG III : XÂY DỰNG ỨNG DỤNG TUYỂN DỤNG

III.1. Giới thiệu bài toán tuyển dụng

III.1.1. Mục đích

Hiện nay, nền kinh tế nước ta đang trong quá trình hội nhập, các công ty, doanhnghiệp cũng bước vào giai đoạn cạnh tranh khốc liệt hơn. Nhu cầu về nguồn nhânlực có chuyên môn tốt, kỹ năng cao đang là vấn đề rất quan trọng. Tuy vậy, cáccông ty hay doanh nghiệp gặp khá nhiều khó khăn trong quá trình tìm kiếm các ứngviên đủ các điều kiện cần thiết cho công việc của mình. Rất nhiều công ty đã phảituyển các nhân viên về và phải trải qua quá trình training tương đối dài thì nhữngnhân viên đó mới đáp ứng được với yêu cầu công việc. Điều này gây lãng phí vềthời gian, công sức và tiền bạc. Do vậy, họ rất muốn có hệ thống mà có thể giúp họtìm kiếm được các ứng viên có đủ năng lực cũng như chuyên môn đáp ứng đượcngay với công việc. Ngược lại, đối với những người đang tìm kiếm công việc phùhợp, họ cũng rất cần một hệ thống có thể giúp họ tìm những công ty, doanh nghiệpmột cách nhanh chóng, hiệu quả đáp ứng được các yêu cầu của họ. Hệ thống tuyểndụng trực tuyến xây dựng với mục đích là cầu nối giữa các doanh nghiệp và các ứngviên, nó giúp cho hai bên có thể tìm kiếm thông tin về nhau một cách nhanh chóng,linh hoạt, thuận tiện.

III.1.2. Mục tiêu của hệ thốngMục tiêu của hệ thống là dịch vụ cho hai nhân tố chính : nhà tuyển dụng và ứng viên (người tìm việc). Đối với nhà tuyển dụng: Nhà tuyển dụng sử dụng hệ thống để cập nhật thông

tin về công ty mình, đưa ra các thông báo tuyển dụng đến công chúng. Ngoàira, nhà tuyển dụng còn sử dụng hệ thống để tìm kiếm các ứng viên phù hợpvới yêu cầu công việc của mình, gửi lời mời đến ứng viên và nếu ứng viênchấp nhận có thể hẹn gặp phỏng vấn và trao đổi các thỏa thuận cần thiết. Đốivới ứng viên trong hệ thống mà hiện đang thuộc công ty mình, nhà tuyển dụngcó thể đưa ra các đánh giá về họ, thông qua đó những nhà tuyển dụng khác cóthể biết thêm các thông tin cần thiết về người mà mình đang quan tâm.

Đối với các ứng viên: Với các ứng viên đang tìm kiếm một công việc phù hợp.Họ có thể sử dụng hệ thống để cập nhật các thông tin về bản thân, các kinhnghiệm, kỹ năng và các dự án đã và đang tham gia (cập nhật CV). Các ứngviên ngoài chức năng tìm kiếm các công ty, doanh nghiệp thỏa mãn yêu cầucủa mình, họ có thể tìm kiếm các ứng viên khác và lưu vào danh bạ bạn bè (cóthể cho mục đích kết bạn hoặc chia sẻ kinh nghiệm trong công việc).

Đối với những khách thông thường : Họ có thể sử dụng hệ thống để tìm kiếmcác công việc thông thường và xem các thông tin mà hệ thống cung cấp. Họ cóthể đăng ký tài khoản của một ứng viên hoặc liên hệ với người quản trị để trảmột chi phí nhất định để có một tài khoản của một nhà tuyển dụng.

Page 53: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

III.2. Phân tích bài toán tuyển dụng

III.2.1. Những yêu cầu về chức năng

III.2.1.1. Đối tượng người dùng và các chức năng

Đối tượng sử dụng hệ thống bao gồm 4 nhóm chính :

Nhóm quản trị : Có vai trò quản trị tài nguyên hệ thống, quản lý thông tin vềcác nhóm khác.

Nhóm các nhà tuyển dụng : Sử dụng hệ thống để quản lý tin tức, thông tintuyển dụng của công ty mình, tìm kiếm ứng viên.

Nhóm nhà quảng cáo : Sử dụng hệ thống để quảng cáo thông tin về công tymình.

Nhóm các ứng viên : Có chức năng quản lý thông tin cá nhân, tìm kiếm cáccông ty tuyển dụng, quản lý blog và liên kết bạn bè.

Hình III.1. Các nhóm sử dụng hệ thống

Sơ đồ phân rã các chức năng :

Page 54: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.2 Sơ đồ phân rã chức năng

III.2.1.2. Biểu đồ các Use Case

III.2.1.2.1. Actor: Admin (Người quản trị)

Chức năng quản lý Advertiser :

Page 55: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.3 Use Case Admin quản lý Advertiser

Chức năng quản lý Advertisment :

Page 56: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.4 Use Case Admin quản lý Advertisment

Chức năng quản lý Candidate :

Page 57: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.5 Use Case Admin quản lý Candidate

Chức năng quản lý Company :

Page 58: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.6 Use Case Admin quản lý Company

Chức năng quản lý News :

Page 59: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.7 Use Case Admin quản lý News

III.2.1.2.2. Actor: Company (Nhà tuyển dụng)

Chức năng quản lý thông tin cá nhân :

Page 60: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.8 Use Case Company quản lý Profile

Chức năng quản lý tin tức :

Hình III.9 Use Case Company quản lý tin tức

Chức năng quản lý thông tin tuyển dụng :

Page 61: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.10 Use Case Company quản lý thông tin tuyển dụng

III.2.1.2.3. Actor: Advertiser (Nhà quảng cáo)

Chức năng quản lý quảng cáo :

Page 62: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.11 Use Case Advertiser quản lý quảng cáo

III.2.1.2.4. Actor: Candidate (Ứng viên)

Chức năng quản lý thông tin cá nhân :

Hình III.12 Use Case Candidate quản lý Profile

Chức năng quản lý Friends :

Page 63: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.13 Use Case Candidate quản lý Friends

Chức năng quản lý Blog :

Page 64: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.14 Use Case Candidate quản lý Blog

Như vậy, có thể tổng kết lại hệ thống có các chức năng chính sau :

Với vai trò của Admin:

• Công nhận Admin

• Quản lý Advertiser

• Quản lý Advertisment

• Quản lý Candidate

• Quản lý Company

• Quản lý News

Với vai trò của nhà tuyển dụng:

• Công nhận Company

• Quản lý thông tin cá nhân

Page 65: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

• Quản lý tin tức

• Quản lý thông tin tuyển dụng

Với vai trò của nhà quảng cáo:

• Công nhận Advertiser

• Quản lý thông tin quảng cáo

Với vai trò của ứng viên:

• Công nhận Candidate

• Quản lý thông tin cá nhân

• Quản lý Friends

• Quản lý Blog

III.2.2. Lựa chọn giải pháp công nghệ

Từ những phân tích về yêu cầu thực tế của bài toán, hệ thống cần xây dựng cótính cộng đồng, tương tác cao giữa những người sử dụng. Do vậy, giải pháp sử dụngmôi trường Web là lựa chọn tối ưu nhất. Chỉ có trên môi trường Web, các nhà tuyểndụng mới có thể dễ dàng tìm kiếm thông tin về các ứng viên, quản lý tin tức và đưara các thông tin tuyển dụng. Với việc sử dụng môi trường Web, mức độ lan truyềnthông tin là vô cùng lớn và các nhà tuyển dụng có thể dễ dàng đạt được những mụcđích mà mình mong muốn. Môi trường Web còn là một lựa chọn tốt cho các nhàquảng cáo muốn quảng bá, thông tin, hình ảnh của công ty mình. Đối với các ứngviên, những người có nhu cầu tìm những công việc mà mình mong muốn thì môitrường Web cũng là một hình thức giúp cho họ có thể tìm kiếm được các thông tinmột cách nhanh chóng và hiệu quả. Thông qua hệ thống Web này, các ứng viên cóthể liên kết bạn bè và quản lý nhật ký cá nhân.

Với việc lựa chọn môi trường Web, công nghệ mà tác giả muốn áp dụng cho hệthống là công nghệ Web 2.0 kết hợp với công nghệ Web của Java là Struts vàHibernate. Với việc sử dụng ngôn ngữ Java, hệ thống sẽ được tăng cường tính antoàn, bảo mật. Ngoài ra, đây là ngôn ngữ đa nền, có thể chạy trên nhiều hệ điềuhành khác nhau. Sử dụng công nghệ Struts và Hibernate sẽ giúp hệ thống được xâydựng theo mô hình MVC (đây là mô hình chuẩn mà nhiều công ty, doanh nghiệplớn thường áp dụng trong quá trình phát triển phần mềm). Với việc tuân theo môhình MVC, hệ thống sẽ nâng cao tính ổn định, tính đáp ứng cao, dễ nâng cấp và bảotrì.

III.2.2.1. Bảng chi tiết các chức năng Mã chức

năngTên chức năng Mô tả

Chức năngchung F001 LogIn

Cho phép người dùng hợp lệ đăng nhập vào hệ thống.

F002 LogOutCho phép người dùng thoát khỏi hệ thống bất kì lúc nào.

F003 Add News Admin và nhà tuyển dụng có thể thêm mới tin tức.

Page 66: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

F004 Edit NewsAdmin và nhà tuyển dụng có thể biên tập lại nội dung tin tức.

F005 Delete NewsCho phép Admin và nhà tuyển dụng cóthể xóa nội dung tin tức.

F006 Add AdvertismentAdmin và nhà quảng cáo thêm mới nộidung quảng cáo

F007 Edit AdvertismentThay đổi nội dung quảng cáo (thuộc quyền của Admin và nhà quảng cáo tương ứng).

F008 Delete AdvertismentXóa nội dung quảng cáo (thuộc quyền của Admin và nhà quảng cáo tương ứng).

F009 Edit Profile

Chức năng Edit Profile áp dụng chung cho Admin, nhà tuyển dụng, nhà quảng cáo và ứng viên, cho phép họ có quyền thay đổi thông tin cá nhân của mình.

Admin

F010 Add UserChức năng cho phép Admin tạo mới tài khoản cho người dùng.

F011 Edit UserChức năng cho phép Admin thay đổi thông tin tài khoản người dùng, thay đổi quyền của người dùng.

F012 Delete User Chức năng xóa tài khoản người dùng.

Company

F013 Add Recruitment NoticeChức năng cho phép nhà tuyển dụng thêm mới thông tin tuyển dụng.

F014 Edit Recruitment NoticeNhà tuyển dụng có thể thay đổi lại nội dung thông báo tuyển dụng.

F015 Delete Recruitment Notice

Chức năng cho phép nhà tuyển dụng xóa các thông báo tuyển dụng.

F016 Search CandidateNhà tuyển dụng có thể sử dụng hệ thống để tìm kiếm thông tin về các ứngviên mà mình quan tâm.

F017 Bookmarks Candidate

Khi tìm được các ứng viên mà mình quan tâm, nhà tuyển dụng có thể lưu lại các ứng viên này để sau này có thể liên hệ.

Candidate

F018 Search Candidate

Ứng viên có thể sử dụng hệ thống để tìm kiếm thông tin về các ứng viên khác, thông qua đó, có thể liên kết bạnbè.

F019 Search Company

Ứng viên có thể tìm kiếm các công ty, nhà tuyển dụng mà mình quan tâm, thông qua đó, gửi hồ sơ ứng tuyển.

F020 Bookmarks Company

Sau khi tìm được các công ty hay nhà tuyển dụng mà mình quan tâm, các ứng viên có thể lưu lại để sau này dễ dàng liên hệ.

F021 Blog Individual

Đây là chức năng cá nhân của các ứng viên, họ có thể tạo, chỉnh sửa hoặc xóa các entry trong Blog của mình. Các thông tin trong Blog có thể được comment bởi các thành viên khác.

Bảng 1: Danh sách các chức năng

III.2.2.2. Một số biểu đồ diễn tiến các chức năng :

Page 67: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Chức năng F001: LogIn

Hình III.15 Sơ đồ diễn tiến chức năng LogIn

Chức năng F002: Logout

Hình III.16 Sơ đồ diễn tiến chức năng LogOut

Chức năng F003: Add News

Page 68: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.17 Sơ đồ diễn tiến chức năng Add News

Chức năng F004: Edit News

Hình III.18 Sơ đồ diễn tiến chức năng Edit News

Chức năng F005: Delete News

Page 69: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.19 Sơ đồ diễn tiến chức năng Delete News

Chức năng F009: Edit Profile

Hình III.20 Sơ đồ diễn tiến chức năng Edit Profile

Chức năng F010: Add User

Page 70: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.21 Sơ đồ diễn tiến chức Add User

Chức năng F011: Edit User

Hình III.22 Sơ đồ diễn tiến chức năng Edit User

Chức năng F012: Delete User

Page 71: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.23 Sơ đồ diễn tiến chức năng Delete User

Chức năng F016: Company Search Candidate

Hình III.24 Sơ đồ diễn tiến chức năng Company Search Candidate

Chức năng F017: Company bookmarks Candidate

Page 72: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.25 Sơ đồ diễn tiến chức năng Company bookmarks Candidate

Chức năng F021: Blog Individual

Hình III.26 Sơ đồ diễn tiến chức năng Blog Individual

III.3. Thiết kế và cài đặt chương trình

Page 73: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

III.3.1. Thiết kế dữ liệu

III.3.1.1. Mô hình quan hệ thực thể

Hình III.27 Mô hình ERD

III.3.1.2. Thiết kế cơ sở dữ liệu

III.3.1.2.1. Bảng Account

Page 74: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

ACCOUNT_ID О INT 11 Mã của người dùng

LOGIN_NAME VARCHAR 25 Tên đăng nhập của người dùng

LOGIN_PASSWORD VARCHAR 150Mật khẩu đăng nhập, mã hóa MD5

STATUS TINYINT 1 Trạng thái, 0: Active – 1: Disable

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 2: Bảng Account

III.3.1.2.2. Bảng Role

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

ROLE_ID О INT 11 Mã của vai trò

NAME VARCHAR 255 Tên của vai trò

DESCRIPTION VARCHAR 1000 Mô tả vai trò

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 3: Bảng Role

III.3.1.2.3. Bảng AccountRole

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

ACCOUNT_ID О О INT 11 Mã của người dùng

ROLE_ID О О INT 11 Mã của vai trò

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 4: Bảng AccountRole

III.3.1.2.4. Bảng Function

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

FUNCTION_ID О INT 11 Mã của chức năng

NAME VARCHAR 100 Tên của chức năng

DESCRIPTION VARCHAR 1000 Mô tả chức năng

Page 75: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 5: Bảng Function

III.3.1.2.5. Bảng RoleFunction

Tên trường PK FK Kiểu DL Độ dài Ý nghĩa

ROLE_ID О О INT 11 Mã của vai trò

ACCOUNT_ID О О INT 11 Mã của chức năng

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 6: Bảng RoleFunction

III.3.1.2.6. Bảng Advertiser

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

ADVERTISER_ID О О INT 11 Mã của người quảng cáo

NAME VARCHAR 255 Tên người quảng cáo

DESCRIPTION VARCHAR 1000 Mô tả về người quảng cáo

LIMIT_ADVER INT 4 Số lượng quảng cáo được phép

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 7: Bảng Advertiser

III.3.1.2.7. Bảng Adver_Content

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

ADVER_ID О INT 11 Mã của quảng cáo

ADVERTISER_ID О INT 11 Mã của người quảng cáo

TITLE VARCHAR 255 Tiêu đề của quảng cáo

IMAGE VARCHAR 255Đường dẫn tới ảnh(Flash) quảng cáo

SITE_URL VARCHAR 255 Địa chỉ Website

POSITION VARCHAR 2 Vị trí hiển thị quảng cáo

CLICK_COUNT INT 11 Số lượng lượt click vào quảng cáo

START_DATE DATETIME Ngày bắt đầu quảng cáo

Page 76: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

END_DATE DATETIME Ngày kết thúc quảng cáo

IS_DISPLAY TINYINT 1 Trạng thái hiển thị quảng cáo

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 8: Bảng Adver_Content

III.3.1.2.8. Bảng Job_Type

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

JOB_TYPE_ID О INT 11 Mã của loại công việc

JOB_TYPE_CODE VARCHAR 50 Mã viết tắt

NAME VARCHAR 255 Tên loại công việc

DESCRIPTION VARCHAR 1000 Mô tả loại công việc

PẢRENT_ID INT 11 Mã của danh mục cha

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 9: Bảng Job_Type

III.3.1.2.9. Bảng Company

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

COMPANY_ID О INT 11 Mã của công ty

JOB_TYPE_ID О INT 11 Mã loại công việc

PROVINCE_ID О INT 11 Mã tỉnh thành

NAME VARCHAR 300 Tên công ty

WORK_DESCRIPTION TEXT Mô tả công việc

POSTAL_CODE 20 Mã bưu điện

LOGO VARCHAR 255 Logo công ty

SLOGAN VARCHAR 255 Slogan công ty

ADDRESS VARCHAR 1000 Địa chỉ trụ sở chính công ty

BRANCHS TEXT Địa chỉ các chi nhánh khác

PHONE_NUMBER VARCHAR 15 Số điện thoại công ty

FAX_NUMBER VARCHAR 100 Số fax công ty

SITE_URL VARCHAR 255 Địa chỉ Website

EMAIL VARCHAR 255 Địa chỉ email của công ty

FOUNDATION DATETIME Ngày thành lập công ty

REG_USER INT 11 ID của người đăng ký

Page 77: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 10: Bảng Company

III.3.1.2.10. Bảng Province

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

PROVINCE_ID О INT 11 Mã của tỉnh thành

NAME VARCHAR 255 Tên của tỉnh thành

AREA_CODE VARCHAR 10 Mã bưu điện của tỉnh thành

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 11: Bảng Province

III.3.1.2.11. Bảng Category

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

CATEGORY_ID О INT 11 Mã của loại tin

NAME VARCHAR 255 Tên của loại tin

DESCRIPTION VARCHAR 500 Mô tả loại tin

PARENT_ID INT 11 Mã của danh mục cha

ORDER_NO INT 11 Thứ tự hiển thị

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 12: Bảng Category

III.3.1.2.12. Bảng News

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

NEWS_ID О INT 11 Mã của tin tức

CATEGORY_ID О INT 11 Mã của loại tin tức

COMPANY_ID О INT 11 Mã của công ty

TITLE VARCHAR 255 Tiêu đề tin tức

SHORT_CONTENT TEXT Nội dung giới thiệu

CONTENT TEXT Nội dung chi tiết

IMG_THUMB VARCHAR 255 Ảnh thu nhỏ

IMG_LARGE VARCHAR 255 Ảnh lớn

Page 78: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

VIEW_NUM INT 11 Số lượt xem

ORDER_NO INT 11 Thứ tự hiển thị

AUTHOR VARCHAR 50 Tên tác giả

SOURCE VARCHAR 200 Nguồn tin tức

IS_DISPLAY TINYINT 1 Có phải tin hot không ?

IS_DISPLAY TINYINT 1Trạng thái có hiển thị tin tức không?

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 13: Bảng News

III.3.1.2.13. Bảng Rec_Notice

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

REC_NOTICE_ID О INT 11 Mã của thông báo tuyển dụng

COMPANY_ID О INT 11 Mã của công ty

WORK_TYPE_ID О INT 11 Mã loại hình công việc

PROVINCE_ID О INT 11 Mã tỉnh, thành (Nơi làm việc)

WORK_NAME VARCHAR 255 Tên công việc

WORK_REQUIREMENT TEXT Yêu cầu đối với công việc

WORK_DESCRIPTION TEXT Mô tả công việc

WORK_TIME VARCHAR 255 Thời gian làm việc

SKILL_REQUIREMENT TEXTYêu cầu về kỹ năng, kinh nghiệm

WORK_PLACE VARCHAR 255 Nơi làm việc

SALARY VARCHAR 255 Mức lương

QUOTA VARCHAR 100 Số lượng người cần tuyển

INTEREST TEXT Quyền lợi của ứng viên

PROMISE TEXT Triển vọng thăng tiếns

RECORD_INFO TEXT Thông tin về hồ sơ

REG_DATE DATETIME Ngày đăng tin tuyển dụng

PERIOD_DATE DATETIME Ngày hết hạn tuyển dụng

RECORD_RECEIVER VARCHAR 100 Người nhận hồ sơ

EMAIL_RECEIVER VARCHAR 100 Email người liên hệ

CONTACT_NAME VARCHAR 100 Tên người liên hệ

CONTACT_PHONE VARCHAR 15 Điện thoại liên hệ

CONTACT_ADDRESS VARCHAR 500 Địa chỉ liên hệ

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

Page 79: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 14: Bảng Rec_Notice

III.3.1.2.14. Bảng Occupation

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

OCCUPATION_ID О INT 11 Mã của nghề nghiệp

OCCUPATION_CODE VARCHAR 10 Mã viết tắt

NAME VARCHAR 255 Tên của nghề nghiệp

DESCRIPTION VARCHAR 1000 Mô tả nghề nghiệp

PẢRENT_ID INT 11 Mã của danh mục cha

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 15: Bảng Occupation

III.3.1.2.15. Bảng Candidate

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

CANDIDATE_ID О INT 11 Mã của ứng viên

OCCUPATION_ID О INT 11 Mã của nghề nghiệp

FULLNAME VARCHAR 100 Tên đầy đủ của ứng viên

SEX TINYINT 1 Giới tính: 1 - Nam; 0 - Nữ

BIRTHDAY DATE Ngày sinh

MOBILE VARCHAR 12 Số điện thoại di động

PHONE VARCHAR 15 Số điện thoại cố định

NATIVE_COUNTRY VARCHAR 200 Quê quán của ứng viên

CONTACT_ADDRESS VẢRCHAR 300 Địa chỉ liên hệ

EMAIL VARCHAR 100 Email của ứng viên

WEBSITE VARCHAR 255 Website của ứng viên

BLOG_URL VARCHAR 255 Địa chỉ Blog của ứng viên

FOREIGN_LEVEL VARCHAR 500 Trình độ ngoại ngữ

WORK_HISTORY TEXTCác công ty trước đây đã làmviệc

PROJECT_HISTORY TEXT Các dự án lớn đã tham gia

SPEC_SKILL VARCHAR 1000 Kỹ năng chuyên môn

HOBBY VARCHAR 1000 Sở thích cá nhân

SELF_EXPRESSIVE TEXT Tự bạch về bản thân

WORK_EXPECT TEXTCông việc mong muốn trong tương lai

Page 80: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

AMBITION TEXT Tham vọng, hoài bão

SALARY_REQUIREMENT VARCHAR 500 Yêu cầu về mức lương

WORK_REQUIREMENT VARCHAR 1000 Yêu cầu về công việc

IMG1 VARCHAR 255 Ảnh cá nhân 1

IMG2 VARCHAR 255 Ảnh cá nhân 2

IMG3 VARCHAR 255 Ảnh cá nhân 3

IS_PUBLISH TINYINT 1Có công khai thông tin CV không ?

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 16: Bảng Candidate

III.3.1.2.16. Bảng Degree

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

DEGREE_ID О INT 11 Mã của bằng cấp

NAME VARCHAR 100 Tên của bằng cấp

DESCRIPTION VARCHAR 1000 Mô tả bằng cấp

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 17: Bảng Degree

III.3.1.2.17. Bảng Candidate_Degree

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

DEGREE_ID О О INT 11 Mã của bằng cấp

CANDIDATE_ID О О INT 11 Mã của ứng viên

NAME VARCHAR 100 Tên của chuyên ngành bằng cấp

DESCRIPTION VARCHAR 1000 Mô tả về chuyên ngành bằng cấp

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 18: Bảng Candidate_Degree

III.3.1.2.18. Bảng Friend

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

Page 81: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

FRIEND_ID О INT 11 Mã ID bạn bè

CANDIDATE_ID О INT 11 Mã của ứng viên

FRIEND_OF_CANDIDATE_ID INT 11 Mã bạn của ứng viên

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 19: Bảng Friend

III.3.1.2.19. Bảng Blog

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

BLOG_ID О INT 11 Mã của Blog

CANDIDATE_ID О INT 11 Mã của ứng viên

TITLE VARCHAR 255 Tiêu đề của Blog

IMAGE VARCHAR 255 Ảnh của Blog

CONTENT TEXT Nội dung Blog

IS_DISPLAY TINYINT 1 Trạng thái có hiển thị hay không ?

BLOG_DATE DATETIME Ngày viết Blog

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 20: Bảng Blog

III.3.1.2.20. Bảng Blog_Comment

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

BLOG_COMMENT_ID О INT 11 Mã của Blog Comment

BLOG_ID О INT 11 Mã của Blog

CANDIDATE_COMMENT_ID INT 1000Mã của ứng viên viết comment

COMMENT_NAME VARCHAR 100Tên của người viết comment

CONTENT TEXT Nội dung viết comment

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 21: Bảng Blog_Comment

III.3.1.2.21. Bảng Work_Type

Page 82: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Tên trường PK FK Kiều DL Độ dài Ý nghĩa

WORK_TYPE_ID О INT 11 Mã của loại hình công việc

NAME INT 11 Tên loại hình công việc

DESCRIPTION INT 1000 Mô tả loại hình công việc

REG_USER INT 11 ID của người đăng ký

UPD_USER INT 11 ID của người cập nhật

REG_DTTM DATETIME Ngày giờ đăng ký

UPD_DTTM DATETIME Ngày giờ cập nhật

Bảng 22: Bảng Work_Type

III.3.2. Thiết kế module

Mỗi một trang Web được thiết kế và xây dựng từ các module riêng biệt. Cácmodule được thiết kế dựa trên framework của Struts và Hibernate, sau đó chúng sẽđược tích hợp lại với nhau để tạo nên các chức năng riêng của trang.

Hệ thống tuyển dụng chia làm 2 module chính, đó là module quản trị và modulengười sử dụng. Sơ đồ các gói module như sau:

Gói module chính :

Hình III.28 Các gói module chính

Module Admin :

Page 83: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.29 Module admin

Module User :

Hình III.30 Module User

III.3.2.1. Thiết lập môi trường lập trình

Môi trường lập trình được thiết lập cho hệ thống như sau:

- Windows XP, Windows Server 2003

- Web Server : Tomcat 6.0.14 hoặc các phiên bản mới hơn

- Java JDK 1.6

- J2EE 1.4

- IDE Eclipse 3.3 (hoặc MyEclipse 6.0)

- MySQL 5.0.45

- Framework Library : Struts 2.0.11, Hibernate 3.1, Spring 2.5

- UML Design : JUDE Comunity 5.2.1

Page 84: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

III.3.2.2. Mô hình thiết kế module

Để thiết kế các module, chúng ta sử dụng mô hình MVC được mô tả như dưới đây :

Hình III.31 Mô hình thiết kế Module theo Struts

Trong đó:

Tầng View : Đây là thành phần hiển thị phía người dùng, giúp người dùngcó thể tương tác với hệ thống, nó là thể hiện cho chức năng của các moduletrong chương trình. Đây là các phần lập trình về JSP, CSS, Javascript, Ajax,TagLib …

Tầng Controller : Đây chính là phần nghiệp vụ xử lý của hệ thống. Có thểnói, đây là “trái tim” của hệ thống. Controller tiếp nhận yêu cầu từ phíangười dùng, lựa chọn điều hướng các action, kết hợp với tầng Model xử lýcác yêu cầu và hiển thị kết quả ở tầng View tới người sử dụng.

Tầng Model : Đó là các lớp mô hình hóa cơ sở dữ liệu. Thông thường đó làcác JavaBean ánh xạ từ các bảng trong cơ sở dữ liệu và được mô hình hóavới các quan hệ hướng đối tượng. Các lớp này được tạo ra với sự hỗ trợ củacông cụ Hibernate.

III.3.2.3. Thiết kế tầng Model

Tầng Model bao gồm ba thành phần chính:

Các lớp Java (JavaBean): ánh xạ từ các bảng trong cơ sở dữ liệu. Đây là cáclớp thuần Java, chứa các thuộc tính tương ứng với các cột của bảng và cácphương thức setter và getter.

Các file xml định nghĩa ánh xạ (*.hbm.xml): Đó là các file xml mô tả việcánh xạ từ một bảng trong cơ sở dữ liệu thành một đối tượng trong Java, trongđó mô tả rõ sự chuyển đổi tên trường trong bảng thành tên thuộc tính trongđối tượng và sự chuyển đổi kiểu dữ liệu tương ứng.

File cấu hình ánh xạ cơ sở dữ liệu (hibernate.cfg.xml): Đây là file chứa cácthông tin để kết nối tới cơ sở dữ liệu, bao gồm: tên cơ sở dữ liệu, tên

Page 85: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

username, password truy nhập, tên các file định nghĩa ánh xạ và các thôngtin cấu hình khác.

Dưới đây là ví dụ mô tả các thành phần trên (ở đây lấy ví dụ với bảng account làbảng chứa thông tin truy nhập của người dùng):

Lớp JavaBean(Account.java):package vn.rec.domain;

import java.util.Date;import java.util.HashSet;import java.util.Set;

public class Account implements java.io.Serializable {

// Fields

private Integer accountId;private String loginName;private String loginPassword;private Byte status;

// Constructors

/** default constructor */public Account() {}

/** minimal constructor */public Account(Integer accountId, String loginName, String

loginPassword, Byte status) {this.accountId = accountId;this.loginName = loginName;this.loginPassword = loginPassword;this.status = status;

}

// Property accessors

public Integer getAccountId() {return this.accountId;

}

public void setAccountId(Integer accountId) {this.accountId = accountId;

}

public String getLoginName() {return this.loginName;

}

public void setLoginName(String loginName) {this.loginName = loginName;

}

public String getLoginPassword() {return this.loginPassword;

}

public void setLoginPassword(String loginPassword) {this.loginPassword = loginPassword;

}

Page 86: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

public Byte getStatus() {return this.status;

}

public void setStatus(Byte status) {this.status = status;

}}

File xml định nghĩa ánh xạ(Account.hbm.xml):<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping> <class name="vn.rec.domain.Account" table="account" catalog="recruitment"> <id name="accountId" type="java.lang.Integer"> <column name="account_id" /> <generator class="identity" /> </id> <property name="loginName" type="java.lang.String"> <column name="login_name" length="50" not-null="true" /> </property> <property name="loginPassword" type="java.lang.String"> <column name="login_password" length="150" not-null="true"/> </property> <property name="status" type="java.lang.Byte"> <column name="status" not-null="true" /> </property> <set name="accountRoles" inverse="true"> <key> <column name="account_id" not-null="true" /> </key> <one-to-many class="vn.rec.domain.AccountRole" /> </set> <set name="advertisers" inverse="true"> <key> <column name="advertiser_id" not-null="true" unique="true" /> </key> <one-to-many class="vn.rec.domain.Advertiser" /> </set> <set name="companies" inverse="true"> <key> <column name="company_id" not-null="true" unique="true" /> </key> <one-to-many class="vn.rec.domain.Company" /> </set> <set name="candidates" inverse="true"> <key> <column name="candidate_id" not-null="true" unique="true" /> </key> <one-to-many class="vn.rec.domain.Candidate" />

Page 87: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

</set> </class></hibernate-mapping>

File cấu hình(hibernate.cfg.xml):<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration>

<session-factory><property name="connection.username">root</property><property name="connection.url">

jdbc:mysql://localhost:3306/recruitment?useUnicode=true&amp;characterEncoding=UTF-8

</property><property name="dialect">

org.hibernate.dialect.MySQLDialect</property><property name="myeclipse.connection.profile">

MySQL DB</property><property name="hbm2ddl.auto">update</property><property name="connection.password">123456</property><property name="connection.driver_class">

com.mysql.jdbc.Driver</property>

<property name="show_sql">true</property><property name="hibernate.transaction.factory_class">

org.hibernate.transaction.JDBCTransactionFactory</property><mapping resource="vn/rec/domain/AccountRole.hbm.xml" /><mapping resource="vn/rec/domain/Function.hbm.xml" /><mapping resource="vn/rec/domain/Account.hbm.xml" /><mapping resource="vn/rec/domain/Role.hbm.xml" />

</session-factory>

</hibernate-configuration>

III.3.2.4. Thiết kế tầng View

Tầng view bao gồm các file CSS, JavaScript, các file template như JSP, Velocityhoặc FreeMarker… làm nhiệm vụ giao tiếp giữa người dùng với hệ thống. Đó là cácthành phần giúp người dùng nhập liệu, gửi yêu cầu tới hệ thống và lấy dữ liệu đãđược xử lý ở tầng Controller để trả về phía người dùng. Các file JSP có sử dụng cácthư viện thẻ (TagLig) của Struts2 và JSTL để hỗ trợ xử lý cũng như hiển thị dữ liệu.

III.3.2.5. Thiết kế tầng Controller

Tầng Controller được thiết kế bao gồm ba thành phần chính sau :

Các lớp DAO (Data Access Object) : Đây là các lớp truy xuất dữ liệu từ cơsở dữ liệu thực dựa trên các đối tượng JavaBean đã được ánh xạ quan hệ (là

Page 88: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

tầng dưới cùng gần Database nhất). Việc truy xuất dữ liệu bao gồm các thaotác CRUD (Create,Retrive,Update,Delete) và một số thao tác nghiệp vụkhác. Các lớp này thực thi với sự hỗ trợ của ngôn ngữ HQL và quản lýtransaction của Spring framework.

Các lớp Service : Đây là tầng nằm trên tầng DAO. Các lớp trong tầng nàychủ yếu có nhiệm vụ thực hiện các chức năng nghiệp vụ của hệ thống và nótrực tiếp gọi các lớp xử lý thao tác với cơ sở dữ liệu của tầng DAO.

Các lớp Action : Đây là tầng trên cùng trong tầng nghiệp vụ, nó nằm trêntầng Service và trực tiếp gọi các phương thức của các lớp trong tầng Serviceđể xử lý các yêu cầu từ phía người dùng.

Có thể mô tả cách bố trí và thực thi các tầng như hình vẽ dưới đây :

Hình III.32 Mô hình thiết kế tầng trong Controller

Nguyên tắc thực thi là : Các lớp thuộc tầng trên chỉ có thể truy xuất được đến cáclớp ở ngay dưới nó. Ví dụ, Các lớp thuộc tầng Action chỉ có thể truy xuất đến cáclớp thuộc tầng Service và các lớp thuộc tầng Service cũng chỉ có thể truy xuất đếncác lớp thuộc tầng DAO. Không có thứ tự truy xuất ngược lại từ dưới lên trên.

III.3.2.6. Các file cấu hình hệ thống

Các file cần thiết trong cấu hình hệ thống bao gồm :

File web.xml : Đây là file cấu hình chung của hệ thống, bao gồm các thôngtin về việc sử dụng các gói thư viện, định nghĩa và khởi tạo các file cấu hìnhkhác, định dạng unicode, định nghĩa các bộ lọc bảo mật, dọn rác …

File struts.xml : Đây là file cấu hình của Struts framework. Nó có thể khởitạo các Bean, hằng số và đặc biệt nó ánh xạ các action từ phía người sử dụngđến các lớp và phương thức tương ứng cần xử lý và sau đó là điều hướnghiển thị đến tầng view.

File applicationContext.xml : Đây là file cấu hình của Spring framework.Nó có thể định nghĩa loại kết nối và giao tiếp với cơ sở dữ liệu. Ngoài ra, nócòn chứa thông tin về các Bean trong hệ thống bao gồm các bean về DAO,Service phục vụ cho quá trình xử lý nghiệp vụ từ phía các action.

File tiles.xml : Đây là file cấu hình hỗ trợ cho việc sử dụng layout của tầngview. Việc sử dụng layout giúp chia trang Web thành các thành phần nhỏhơn và sử dụng lại các thành phần chung. Điều này giúp giảm thiểu lượngcode và giúp cho việc lập trình trở nên ngắn gọn, đơn giản và dễ bảo trì.

Page 89: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

III.3.3. Thiết kế giao diện Web

Đây là giai đoạn thiết kế các prototype cho trang Web. Nội dung công việc bao gồmxác định giao diện dưới dạng bố cục, các chức năng, các trường hợp sử dụng và sựliên kết giữa các trang trong tổng thể một Web site.

III.3.3.1. Thiết kế giao diện Admin

Giao diện màn hình Login

Hình III.33 Màn hình Login

Giao diện chính

Hình III.34 Màn hình giao diện chính

Giao diện hiển hiển thị danh sách

Page 90: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.35 Màn hình hiển thị danh sách

Giao diện thêm mới, cập nhật (Popup Windows)

Hình III.36 Màn hình thêm mới, cập nhật

III.3.3.2. Thiết kế giao diện người dùng

Giao diện trang chủ :

Page 91: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

Hình III.37 Màn hình giao diện trang chủ

Page 92: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

KẾT LUẬN VÀ ĐÁNH GIÁ

Kết quả đạt được

Đồ án này đã đạt được những kết quả cơ bản sau:

Tìm hiểu công nghệ Struts, Hibernate và Spring, kết hợp với Ajax tạothành một nền tảng trong lập trình ứng dụng Web.

Xây dựng một ứng dụng tuyển dụng với các chức năng cơ bản dựa trên cáccông nghệ trên.

Đánh giá

Về mặt nghiên cứu công nghệ, sau khi hoàn thành đồ án tác giả đã nắm bắtđược các đặc điểm, và vai trò của chúng trong xây dựng ứng dụng Web,biết cách sử dụng và tích hợp ba framework trong một ứng dụng cụ thể.Tuy nhiên, do thời gian tìm hiểu có hạn nên còn nhiều tính năng cũng nhưkỹ thuật xử lý tác giả còn chưa nắm bắt được.

Về xây dựng bài toán tuyển dụng, ứng dụng đã đạt được một số kết quảnhất định. Do thời gian hạn hẹp và kiến thức của người thiết kế còn nhiềuhạn chế nên chương trình còn một số module chưa hoàn thiện cũng nhưmột số module đã xây dựng nhưng chưa được tối ưu. Hy vọng, trong thờigian sắp tới, hệ thống sẽ được xây dựng hoàn thiện và tối ưu để có thể đưavào sử dụng.

Hướng phát triển:

Hiện nay, công nghệ Struts, Hibernate và Spring vẫn đang được phát triểnmạnh mẽ và được sử dụng tương đối rộng rãi trong các ứng dụng Web, đặcbiệt là các ứng dụng có quy mô lớn, phức tạp. Đây đều là những công nghệmã nguồn mở dựa trên ngôn ngữ Java. Với sự phát triển mạnh mẽ của côngnghệ tri thức, đã có khá nhiều công nghệ Web mới ra đời cạnh tranh vớicác công nghệ trên. Tuy nhiên, Struts, Hibernate và Spring vẫn được nhiềungười yêu thích và sử dụng rộng rãi trong nhiều ứng dụng khác nhau.

Đồ án này tập trung nghiên cứu về công nghệ Struts, Hibernate và Springvà áp dụng xây dựng bài toán tuyển dụng trực tuyến. Đây là bài toán hayvà có thể mở rộng và phát triển trong tương lai. Với việc hoàn thiện đượccác chức năng như đã mô tả và phân tích trong đồ án, ứng dụng có thểđược triển khai trong thực tế và đáp ứng được nhiều nhu cầu cần thiết củangười sử dụng.

Page 93: [123doc.vn] - 34863 Cong Nghe Struts Hibernate Va Spring Tr

TÀI LIỆU THAM KHẢO Các tài liệu tham khảo :

Struts in Action (Ted N. Husted, Cedric Dumoulin, George Franciscus,David Winterfeldt)

Struts Survival Guide (Srikanth Shenoy)

Struts: The Complete Reference (James Holmes )

Jakarta Struts for Dummies (Mike Robinson, Ellen Finkelstein)

Professional Jakarta Struts (James Goodwill, Richard Hightower)

Apress - Beginning Apache Struts (Arnold Doray)

Apress - Pro Apache Struts with Ajax (John Carnell, Rob Harrop, KunalMittal)

Manning – Webwork in Action (Patrick Lightbody, Jason Carreira)

Starting Struts 2 (Ian Roughley)

Apress – Expert Spring MVC and Web Flows (Seth Ladd, Keith Donald)

Spring Reference (Document of www.springframework.org)

Manning - Spring in Action 2007 (Craig Walls, Ryan Breidenbach)

Spring Live (Matt Raible)

Agile Java Development with Spring, Hibernate and Eclipse(Anil Hemrajani)

Hibernate reference (Document of www.hibernate.org)

Manning - Java persistence with Hibernate (Christian Bauer, GavinKing)

Manning - Hibernate in Action (Christian Bauer, Gavin King)

Các trang Web tham khảo :

http://www.struts.apache.org

http://www.springframework.org

http://www.hibernate.org

http://www.roseindia.net

http://www.java.sun.com/j2ee

http://www.javavietnam.org

http://www.java-source.net/open-source

http://www.wikipedia.org

http://www.blogjava.net

Và rất nhiều các trang diễn đàn và blog khác