TÓM TẮT NỘI DUNG ĐỒ ÁN TỐT NGHIỆPNộ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ông nghệ mã nguồn mở nổi tiếng nhất trong lĩnh vực lập trình ứng dụng Web dựa trê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ựng chươ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 Web trong 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ột số Framework mã nguồn mở nổi tiếng trong xây dựng ứng dụng Web dựa trê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ếu củ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án demo, đó là bài toán tuyển dụng. Đây là một bài toán mang nhiều ý nghĩa thực tế và hoàn toàn có thể triển khai thành ứng dụng trong xã hội. Tuy nhiên, do thời gian hạn chế và do kinh nghiệm của người thiết kế còn thiếu nhiề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ực hiện được trong quá trình thực hiện đồ án tốt nghiệp. Đồng thời đưa ra một số đánh giá 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ông nghệ Struts, Hibernate và Spring trong tương lai.
Trang 1PHIẾ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ủabấ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
Trang 2TÓ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 Web
trong 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ột
số 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ực
hiệ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
Trang 3ABSTRACT 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 3
chapters The content of each chapter was disposed in the following detail :
Chapter 1: General introduction about trend of web application
development 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 and
Spring 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, in
this chapter, applies theses knowledges to design a demo This is arecruitment demo (program) which is significant in pratice and capable
of 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 in
completing graduation thesis Also, the author evalutates and gives some solutionsand orientation to develop Struts, Hibernate and Spring technology in the future
Trang 4LỜ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ọi mặ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 đó, vai trò 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ọi thà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, Sun MicroSystem … đã tham gia vào lĩnh vực xây dựng và phát triển các ứng dụng Web Tuy nhiên, các ứng dụng Web phát triển nhanh và mạnh mẽ như hiện nay không thể không kể đến một cộng đồng, đó là cộng đồng mã nguồn mở Sự đóng gó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ục
vụ 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ẹn cho 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ần mề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ông nghệ 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 được mộ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áo trong trường Đại học Bách Khoa Hà Nội nói chung và các thầy cô trong khoa Cô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ác
thầ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ần mềm, khoa Công nghệ Thông tin, trường Đại học Bách Khoa Hà Nội đã nhiệt
tì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ốt nghiệp.
Em cũng xin gửi lời cám ơn đến Công ty Triax Việt Nam, các anh chị trong công ty: Anh Shishikura, chị Khánh Ngọc, anh Việt, anh Công… đã tạo mọi điều
kiệ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ực hiệ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
Trang 5
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
Trang 6II.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
Trang 7III.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
Trang 8MỤ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
Trang 9Hì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ủ
Trang 10DANH 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
Trang 11DANH MỤC CÁC THUẬT NGỮ VÀ CÁC TỪ VIẾT TẮT TRONG
BÁO CÁO TỐT NGHIỆP
1 JSF JavaServer Faces Mộ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 Pages Mộ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 Model Mô 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 API Application Program Interface Hệ giao tiếp lập trình ứng dụng
9 HTTP Hypertext Transfer Protocol Giao thức truyền siêu văn bản
10 CGI Common Gateway Interface Giao thức cổng dùng chung
11 PL Presentation Layer Tầng trình diễn trong kiến trúc 3 tầng của Web.
12 W3C World 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
16 AJAX Asynchronous 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 URL Uniform Resource Locator Địa chỉ của một trang Web
19 POJO Plain Old Java Object Đối tượng thuần Java
20 ERD Entity Relationship Diagram Mô hình quan hệ thực thể
Trang 12CHƯƠ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
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 online
là 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ừng
và 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
Trang 137 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
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ới
cả 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ậy
có 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:
Trang 14Cô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 Reddit
và 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úng
ta 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
Trang 15Hầ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 :
Trang 16Hì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 Javascript
và 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
Trang 17mô 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ăm
1988 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:
Trang 18Hì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ân
nó 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
Trang 19I.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ặc
dù 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ưng
nó 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 :
Trang 20Hì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ên
nó 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ất
kỳ 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
Trang 21về 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”
Trang 22CHƯƠNG II : STRUTS , HIBERNATE, SPRING TRONG
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
Trang 23Hì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ộc
về 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ình
MVC (Model-View-Controller) mà các quá trình xử lý, điều khiển, hiển thị được
Trang 242 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 2
là 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 IBM
và 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
Trang 25MVC 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
Trang 26Hì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
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)
nhiề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ột
số 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
Trang 27thá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ồi
và 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
Trang 28 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 request
và sau đó xác định Action tương ứng
3 Các Interceptor được áp dụng : Các interceptor được cấu hình để áp
dụ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ới
database 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ề cho
servlet 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úng
là đơ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 :
Trang 29Đâ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ác
và 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" >
} }
1 Phương thức action trả về giá trị kiểu String – giá trị trả về này sẽ được đối
sá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ừ
Trang 30action đó 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 đã được
cấ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 session
thô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 qua
Map
ApplicationAware – hỗ trợ truy xuất tới tất cả các thuộc tính của
application thông qua Map
ServletResponseAware – hỗ trợ truy xuất tới đối tượng
HttpServletResponse.
ParameterAware – hỗ trợ truy xuất tới tất cả các xâu request và các thuộc
tính giá trị của form thông qua Map
PrincipalAware – hỗ trợ truy xuất tới đối tượng PrincipleProxy, đối tượ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
Trang 31Để 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=" "/>
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 ra
và 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ại
sẽ đượ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) được
sử 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
Trang 32vớ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
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
Trang 33Cú 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 :
Trang 34II.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"
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ất
cả 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
Trang 35“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ăng
debug
struts.configuration.xml.reload = true – cho phép reload lại các file cấu
hì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">
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ển
và 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
Trang 36giả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á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à module
hỗ 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 …
Trang 37II.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) Persistence
sẽ đả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ào
lo 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ương
tự 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ều
về 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ết
vấ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
Trang 38II.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ệm
cơ 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 ta
có 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ách
nà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ì
Trang 39II.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ính
là 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ần
cho 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ái
củ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ác
lớ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
Trang 40Mộ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ác
tầ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 trong
Hibernate 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ình
Hibernate, 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 ra trong Hibernate, như Interceptor, Lifecycle, và Validatable.
Các interface cho phép mở rộng chức năng mapping của Hibernate, bao
gồm UserType, CompositedUserType, và IdentifierGenerator Các
interface này được thực hiện bởi các mã lệnh trong ứng dụng (nếu cầnthiết)