• No results found

Do an

N/A
N/A
Protected

Academic year: 2021

Share "Do an"

Copied!
93
0
0

Loading.... (view fulltext now)

Full text

(1)

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

(2)

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ô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.

(3)

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. They are the best open source code technology in field of Web application programing based on Java language and using MVC model.

 Using Struts, Hibernate, Spring and Ajax technology to build a online application 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 web 2.0 technology, Ajax programing technique, J2EE architecture in Java as well as some the best open source code Frameworks in web application based on Java language.

Chapter 2: This chapter goes into the details of Struts, Hibernate and

Spring technology by inheriting advantages of typical Web programing model: MVC model. At the same time, this part analyses and evaluates strengths 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 a recruitment demo (program) which is significant in pratice and capable of applying in the society. However, because of lack of time and experiences, the program limits at some modules. The author hopes that this 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 solutions and orientation to develop Struts, Hibernate and Spring technology in the future.

(4)

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ọ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

(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 ... 12

I.1. Công nghệ Web 2.0 ... 12

I.2. Công nghệ AJAX ... 14

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

I.3.1. Kiến trúc J2EE ... 16

I.3.1.1. Java Servlet ... 19

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

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

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

II.1.1. Framework là gì ? ... 22

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

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

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

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

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

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

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

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

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

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

II.1.3.2. Model ... 25

II.1.3.3. View ... 25

II.1.3.4. Controller ... 25

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

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

II.2. Struts framework ... 26

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

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

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

II.2.3.1. Actions ... 28

II.2.3.2. Interceptors ... 30

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

II.2.3.4. Result Types ... 32

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

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

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

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

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

(6)

II.3. Hibernate framework ... 36

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

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

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

II.3.2.2. Persistence layer ... 38

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

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

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

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

II.4. Spring framework ... 45

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

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

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

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

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

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

III.1.1. Mục đích ... 52

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

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

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

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

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

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

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

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

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

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

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

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

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

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

III.3.1.2.1. Bảng Account ... 73 III.3.1.2.2. Bảng Role ... 74 III.3.1.2.3. Bảng AccountRole ... 74 III.3.1.2.4. Bảng Function ... 74 III.3.1.2.5. Bảng RoleFunction ... 75 III.3.1.2.6. Bảng Advertiser ... 75 III.3.1.2.7. Bảng Adver_Content ... 75 III.3.1.2.8. Bảng Job_Type ... 76 III.3.1.2.9. Bảng Company ... 76 III.3.1.2.10. Bảng Province ... 77 III.3.1.2.11. Bảng Category ... 77

(7)

III.3.1.2.12. Bảng News ... 77 III.3.1.2.13. Bảng Rec_Notice ... 78 III.3.1.2.14. Bảng Occupation ... 79 III.3.1.2.15. Bảng Candidate ... 79 III.3.1.2.16. Bảng Degree ... 80 III.3.1.2.17. Bảng Candidate_Degree ... 80 III.3.1.2.18. Bảng Friend ... 80 III.3.1.2.19. Bảng Blog ... 81 III.3.1.2.20. Bảng Blog_Comment ... 81 III.3.1.2.21. Bảng Work_Type ... 81

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

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

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

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

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

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

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

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

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

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

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

(8)

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 ...15

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

(9)

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

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

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

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

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

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

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

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

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

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

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

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

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

(10)

DANH MỤC BẢNG

Bảng 1: Danh sách các chức năng...66 Bảng 2: Bảng Account...74 Bảng 3: Bảng Role...74 Bảng 4: Bảng AccountRole...74 Bảng 5: Bảng Function...75 Bảng 6: Bảng RoleFunction...75 Bảng 7: Bảng Advertiser...75 Bảng 8: Bảng Adver_Content...76 Bảng 9: Bảng Job_Type...76 Bảng 10: Bảng Company...77 Bảng 11: Bảng Province...77 Bảng 12: Bảng Category...77 Bảng 13: Bảng News...78 Bảng 14: Bảng Rec_Notice...79 Bảng 15: Bảng Occupation...79 Bảng 16: Bảng Candidate...80 Bảng 17: Bảng Degree...80 Bảng 18: Bảng Candidate_Degree...80 Bảng 19: Bảng Friend...81 Bảng 20: Bảng Blog...81 Bảng 21: Bảng Blog_Comment...81 Bảng 22: Bảng Work_Type...82

(11)

DANH MỤC CÁC THUẬT NGỮ VÀ CÁC TỪ VIẾT TẮT TRONG

BÁO CÁO TỐT NGHIỆP

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

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ên nề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 chung để phát triển WWW.

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

14 Framework Framework

Tậ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 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

(12)

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

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ều cuộ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ọng khô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ôi trườ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êu tạo phương tiện cho phép người dùng tự do đưa thông tin lên Internet và dễ dàng chia 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ơi khá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ếu gồ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 đích tiế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ật mớ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 Oreilly Media, đưa ra tại hội thảo Web 2.0 lần thứ nhất do Oreilly Media và MediaLive International 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

(13)

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ền tả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ản bao gồm : phần mềm máy chủ, cơ chế cung cấp nội dung, giao thức truyền thô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ương tá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ủa kiế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ách truyền đi trạng thái của tất cả giao dịch; còn SOAP (Simple Object Access Protocol) 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 Properties Broadcasting 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ác phương thức cấp phát nội dung động (của Web 1.0 về danh nghĩa), tuy nhiên dị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ặc xây dựng ứng dụng “gắn thêm” cho máy chủ web, có sử dụng giao tiếp API.

(14)

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 “tham gia” là cuộc cách mạng thực sự, dĩ nhiên nhờ có sự phát triển công nghệ giúp hiện thực khả năng này nhưng ở đây muốn nhấn mạnh đến hành vi của người dù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ường liê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ích hợp. Wikipedia có lẽ là ví dụ nổi tiếng nhất. Tuy có nhiều học giả không đánh giá 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.us cho 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ông tin 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án phụ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 Garrett của công ty AdapativePath định nghĩa. AJAX là viết tắt của cụm từ “Asynchonous JavaScript and XML”. Đó là bộ công cụ cho phép tăng tốc độ ứng dụng web bằng cá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ức mạ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ằng XMLHttpRequest.

(15)

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

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át triể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ủa Internet Explorer 3 (1996) và thành tố LAYER của Netscape 4.0 (1997). Khi giới thiệu Internet Explorer 4.0, Microsoft đã sử dụng mô hình đối tượng tài liệu. Đến năm 2000, Netscape hoàn toàn bị đánh mất thị trường trình duyệt vào tay hãng phần mềm của Bill Gates và thành tố LAYER cũng không được các chuyên gia phát triển web 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ừ đó, AJAX trở 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ên trang Web, yêu cầu thay đổi được gửi về server dưới dạng HTTP request (hay còn gọi là postback), server sẽ xử lý yêu cầu này và gửi trả response chứa các thông tin dướ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êu cầu gửi request và nhận response do Ajax Engine thực hiện. Thay vì trả dữ liệu dưới dạ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ành XHTML + 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ời ngườ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ại trang. Mặt khác, sự kết hợp của các công nghệ web như CSS và XHTML làm cho việ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.

(16)

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ười dù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 trang web 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ởi vậ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ến nghiề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ếm khuyế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ới như IBM, Oracle, Sun áp dụng rất hiệu quả trong các dự án của họ. Điểm đặc biệt hơ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ính cạ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 ra bở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ác nhau để 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 mô

(17)

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ập trì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ụng J2EE 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ều hành cụ thể. Do đó, mã chương trình có thể chuyển từ một hệ điều hành này sang mộ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 đúc rú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 đầu xâ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êu tố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ụng J2EE 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ốt như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, đặc biệ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ất hiệ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ên nhữ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 ứng dụng Enterprise. Ứng dụng logic có thể chia làm nhiều thành phần tùy theo chức nă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ều máy tính khác nhau.

(18)

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 ba tầ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 J2EE server, 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ành phầ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ần Web 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ịch giố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ần J2EE và các lớp Java “chuẩn” là các thành phần J2EE được nhúng trong ứng dụng J2EE, được xác nhận để đảm bảo tính thống nhất theo như đặc tả J2EE, và được triể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.

(19)

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ên trì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 ra cá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ượng con 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ản chấ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 trang HTML.

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ần Web 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ủa Java, 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 …

(20)

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

Web Client Web Server HTTP query Response Internet JSP Engine JSP script Java Compiler

Java Virtual Machine

Database Byte code Java code JDBC HTML page containing JSP script HTML page 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ằng Java 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 đặc tí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 ra các trang HTML hợp lệ. Thêm vào đó, bằng việc phân chia thành hai phần riêng biệt, ta có thể phân chia công việc trong phát triển JSP cho nhiều người khác nhau, mỗi người một lĩnh vực riêng, phần xây dựng HTML tĩnh và phần động.

 Đối với Server-Side Include (SSI) : SSI là một công nghệ hỗ trợ rộng rãi bao gồm các đoạn được định nghĩa bên ngoài đưa vào trong một trang 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 ra các phần động trong một trang web.

(21)

 Đối với Javascript : Javascript có thể tự động tạo ra HTML trên trình client. Tuy nhiên, nó chỉ hỗ trợ điều này khi mà các thông tin đó thuộc 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ài nguyên của phía trình chủ như các cơ sở dữ liệu, các danh sách, các thô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ách mạ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”.

(22)

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ì ?

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 khung làm việc (framework) đã được xây dựng sẵn nhằm phục vụ cho mục đích chung nhấ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ách nhanh chóng và hiệu quả. Chúng ta đã nhắc nhiều đến thuật ngữ framework ở các phần trên và cũng đã có một số framework về Java được nhắc đến. Vậy, bản chất framework 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ần mềm dùng để chỉ những “cấu trúc hỗ trợ được định nghĩa”mà trong đó những dự án phần mềm khác có thể được sắp xếp vào đó và phát triển. Thông thường, một framework bao gồm những chương trình hỗ trợ, các thư viện lập trình và một ngôn ngữ 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ành phầ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ức trừ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ụng Web. Trong mô hình 1, trình duyệt trực tiếp truy xuất đến các trang JSP. Hay nói cá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 trang JSP. Đ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ủa chí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ác trang JSP mà người dùng xử lý thông tin từ trang đầu tiên đến trang kế tiếp. Nếu cần, một trang servlet hoặc một trang HTML có thể thay thế cho trang JSP trong dãy.

(23)

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ập trì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ức nă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ủa ngườ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ực hiệ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ãy các trang JSP hoạt động kế tiếp tuần tự nhau, kết quả trang này là đầu vào cho 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 tá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 JSP mà đượ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ầu như 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).

(24)

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 giao tiế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ột

trong 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 request URL.

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ương mạ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ình MVC đượ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áp cho 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 ra những phương thức quản lý từng tầng một cách riêng rẽ. Trong J2EE, thì MVC cũ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.

(25)

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ụng trong ứ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ành phần Model có rất nhiều dạng khác nhau, nó có thể đơn giản là các JavaBean hoặc phứ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ùng củ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ủa ngườ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 View này có thể là các trang HTML, JSP hoặc một số dạng templete như Velocity hoặc FreeMarker …

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.

(26)

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 code củ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ạo

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ủa mì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ập trì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 đối vớ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 giao cho dự án Jakarta của Apache Software Foundation (AFS) vào năm 2000. Vào tháng

(27)

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ên hoà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ôn ngữ 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ấu hì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ác nề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àm việ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ằng giữ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 được cô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ền là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ính nghiệ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ên bản Struts 1.xx đã khá quen thuộc với nhiều người. Struts 2.0x là sự kết hợp giữa Struts 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ảm thiểu việc cấu hình trong các file XML thông qua các cài đặt ngầm định thông minh, 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

(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 / View technologies.

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 :

(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ột POJO đơ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ợp nà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 action nà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ần cấ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 định kết quả cho một action. Tuy nhiên, trong thực tế, có bốn tùy chọn cho phép bạn thự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 đố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ừ action đó. Ví dụ, Nếu URL có dạng “/adduser.action” và giá trị trả về của action là “success” thì nó sẽ tìm đến file JSP có dạng “/adduser-succcess.jsp”.

(30)

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 trong file 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ụng Interceptors; 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ớp JDK 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ối thì 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

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

<package name="default" extends="struts-default"> <interceptors>

(31)

<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 cho action. 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ết tắ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 đối tượ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ính củ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 qua phươ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 đích trong đó. Nếu bạn muốn thuộc tính là “name”, bạn chỉ cần truy vấn tới value stack 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ột thuộ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ình nà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ạn không

References

Related documents

g) The proposed site shall not constitute a threat or hazard to the area. i) The proposed site is not sited under PHCN high tension wire. 5.0 `PROCEDURE FOR THE CONSTRUCTION OF

In a typical setup, the functions of an asset management multinational include core functions: that is, the day to day activities that characterise most asset management entities

This study investigated dispersal patterns, feather condition and activity of laying hens in three distinct zones of the range area; the apron area near shed; enriched zone 10–50

Ce que je trouve bien aussi c’est de pouvoir savoir si les produits sont disponibles dans la boutique dans laquelle je vais me rendre pour acheter le produit une fois que je l’ai

What types of dyes are used for cotton, jute and flax

Using the fused data obtained from fusing spatial geographical big data such as POI data and Tencent-Yichuxing data, this study assesses the epidemic risk level of Guangzhou

In this paper, we present EuPathDomains, an extended database of known and new protein domains identified by CODD on several major human pathogens

The combination of a WolfVision Visualizer and a videoconferencing system enables the gallery to deliver an important educational outreach programme. The sessions