báo cáo này sẽ cung cấp những kiến thức căn bản về: Struts1 Struts 2 So sánh Struts 1 và Struts 2 Hibernate các phiên bản Hibernate 4 một trong các ngôn ngữ lập trình được sử dụng phổ biến đó là Java, là một ngôn ngữ lập trình hướng đối tượng mang nhiều ưu thế vượt trội. Song đó cùng với sự phát triển thì có rất nhiều công nghệ ra đời hỗ trợ lập trình Java. Trong đó Struts 2 đang là một framework đang được sử dụng mạnh mẽ, sẽ là tối ưu hơn hẳn nếu sử dụng kết hợp với Hibernate 4.0. Đề tài tập trung nghiên cứu về Struts 2 và Hibernate 4.0 framework, qua đó xây dựng website bán điện thoại online. để làm nổi bật lên ưu điểm của các công nghệ này
Trang 1Tp Hồ Chí Minh, ngày tháng năm
(kí và ghi họ tên)
Trang 2TÓM TẮT
Công nghệ thông tin là một ngành ngày càng phát triển mạnh mẽ trên thế giới, theo xu hướng phát triển đó thì có nhiều ngôn ngữ lập trình ra đời để đáp ứng cho nhu cầu phát triển đó, thì một trong các ngôn ngữ lập trình được sử dụng phổ biến đó là Java, là một ngôn ngữ lập trình hướng đối tượng mang nhiều ưu thế vượt trội Song đó cùng với sự phát triển thì có rất nhiều công nghệ ra đời hỗ trợ lập trình Java Trong đó Struts 2 đang là một framework đang được sử dụng mạnh mẽ, sẽ là tối ưu hơn hẳn nếu sử dụng kết hợp với Hibernate 4.0 Đề tài tập trung nghiên cứu về Struts 2 và Hibernate 4.0 framework, qua đó xây dựng website bán điện thoại online để làm nổi bật lên ưu điểm của các công nghệ này.Với các công nghệ mà chúng em nghiên cứu, báo cáo này
sẽ cung cấp những kiến thức căn bản về:
Trang 3MỤC LỤC
Trang 4Chương 1: Tổng Quan
Lý do chọn đề tài
Trong lập trình hướng đối tượng, java là một ngôn ngữ phát triển rất mạnh và
có những ưu điểm vượt trội so với C# Vì thế, nhóm em chọn theo hướng ngôn ngữ java, tìm hiểu những công nghệ mới và xây dựng chương trình ứng dụng trong tiểu luận chuyên ngành này, mở ra hướng phát triển sau này trong việc thực hiện khóa luận tốt nghiệp
1.1 Công nghệ sử dụng.
Trong phạm vi đề tài này, nhóm chúng em sử dụng những công nghệ chính như:
Struts2 Framework
Hibernate 4 FrameworkTrên nền các phần mềm lập trình:
1.4 Mục tiêu nghiên cứu
Nghiên cứu và viết báo cáo về kiến thức căn bản Struts2, Hibernate 4
Trang 5CHƯƠNG 2: NỘI DUNG NGHIÊN CỨU
2.1 Strust 1
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 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 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
Ưu điểm: Struts 1 được thiết kế dựa trên mô hình MVC Dùng để xây dựng các ứng dụng web sử dụng sử dụng Java Servlet và Jsp Ứng dụng Struts chạy được trên
nhiều nền tảng, dễ học, dễ sử dụng, có kèm các thư viện thẻ cho việc phát triển ứng dụng nhanh chóng hơn Struts cho phép các lập trình viên:
- Phát triển ứng dụng web Jsp/Servlet theo mô hình MVC
- Sử dụng các đối tượng có sẵn của Framework trong file cấu hình Xml
- Sử dụng các mẫu thiết kế xây dựng sẵn của Framework
Trang 6- Sử dụng nhiều tính năng nâng cao (Validation, …)
Những thuận lợi khi sử dụng:
- Struts đảm nhiệm những phần phức tạp nhất khi xây dựng ứng dụng MVC
- Dễ học, dễ sử dụng
- Nhiều tính năng được hỗ trợ
- Nhiều công cu hỗ trợ của bên thứ 3
- Hỗ trợ một thư viện thẻ cực kỳ hữu dụng
- Tích hợp với Tiles Framework
Nhược điểm : Khó tìm hiểu, khó chuẩn hóa và đánh giá Struts khó áp dụng các phương pháp khác
Trang 72.2 Strust2.
2.2.1 Giới thiệu về Strust 2
- Vào tháng 12/2005,Struts và webwork framework đã được kết hợp với nhau để phát triển nên Struts 2 Framework Struts 2 Framework rất thích hợp và dễ dàng
mở rộng để phát triển các ứng dụng web với mức độ khác nhau
- Trang chủ: http://struts.apache.org/2.x/
- Struts 2.0x ra đời 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, khắc phục các nhược điểm của struts 1
Struts 2 Framework đơn giản hóa hơn mô hình Struts 1 Framework và hỗ trợ việc xây dựng ứng dụng Web theo mô hình MVC2 với những tiện ích hơn phiên bản trước như
là rút gọn tập tin cấu hình hay sử dụng Annotation thay thế cho tập tin cấu hình
- Các bạn có thể sử dụng Eclipse hoặc Netbean IDE 8.0 kết hợp Tomcat 8.0 (tốt hơn nên dùng bản mới)
- Apache Struts 2 requires:
Trang 8- Tự động chuyển đổi kiểu dữ liệu chuỗi truyền thống trong tham số request parameter thành các đối tượng lớp dữ liệu java => tiết kiệm được thời gian và công sức cho các lập trình viên
- Cung cấp các thẻ tag,các themes và templates giúp cho việc làm giao diện GUI trở nên dễ dàng,nhanh lẹ và tăng tính tái sử dụng
- Tính mở rộng (Extensibility) cao thông qua việc hỗ trợ các plug-in
- Hỗ trợ portal
- Hỗ trợ AJAX
- Dễ dàng tích hợp với Spring framework và Hibernate
2.2.3 Kiến trúc của Strust 2 Framework
Hình 0 Kiến trúc Struts2 Framework.
Action ContextCleanUp filter: sử dụng khi tích hợp với các công nghệ khác như SiteMesh Plugin
FillerDispatcher: sử dụng ActionMapper để xác định Action nào được triệu gọi Nếu Action được yêu cầu triệu gọi thì FilterDispatcher ủy nhiệm việc điều khiển lại cho ActionProxy
Trang 9ActionProxy: Sử dụng bộ phận quản lý cấu hình file (Configuration Files manager), được khởi tạo từ file struts.xml Sau đó ActionProxy tạo ra một ActionInvocation, thực thi xử lý triệu gọi bộ chặn (Interceptors) nếu nó được cấu hình và sau đó triệu gọi Action ActionInvocation tìm kiếm Action thích hợp, thực thi Action, và xác định các View, JavaBeans tương ứng để lấy dữ liệu xử lý Sau đó nó triệu gọi việc sinh ra trang các JSP hoặc các mẫu để kết xuất dữ liệu trả về.
Các Interceptor được thực thi một lần nữa theo thứ tự ngược lại Việc trả về kết quả cuối cùng thông qua các bộ lọc được cấu hình trong file web.xml Nếu bộ lọc
ActionContextCleanUp được cấu hình, thì FilterDispatcher không dọn dẹp
ThreadLocal ActionContext Nếu bộ lọc ActionContextCleanUp không có thì
FilterDispatcher sẽ dọn dẹp tất cả các ThreadLocal tồn tại
2.2.4 Luồng xử lý dữ liệu trong Strust2
Hình 2.2.4-1 Luồng xử lý dữ liệu Struts2.
a Người sử dụng gửi yêu cầu đến server để yêu cầu một số tài nguyên của ứng dụng
b Bộ điều khiển lọc (FilterDispatcher) xem xét yêu cầu và sau đó xác định một Action thích hợp
c Các bộ chặn (Interceptors) được ứng dụng: các cấu hình bộ chặn
áp dụng cho các chức năng chung như: luồng công việc, thẩm định, tải file … được tự động ứng dụng vào yêu cầu
d Thực thi Action: sau khi phương thức action được thực thi để thực hiện các hoạt động liên quan đến cơ sở dữ liệu như sắp xếp hoặc nhận dữ liệu từ cơ sở dữ liệu
Trang 10e Sinh kết quả
f Sau đó kết quả yêu cầu được trả về thông qua bộ chặn theo chiều ngược lại Kết quả trả về cho phép chúng ta thực hiện thu dọn hoặc thêm quá trình xử lý
g Hiển thị kết quả cho người sử dụng: việc điều khiển cuối cùng được trả về cho trình chứa servlet, nó sẽ gửi kết quả trả về cho trình duyệt của người sử dụng
object và xử lý validation nếu cần
Dùng các thuộc tính trong Action class
để đón nhận giá trị nhập từ Form và thực hiện xử lý cùng với validation nếu cần
Action bắt buộc implement Action
interface
Action class không cần bắt buộc implement Action interfaceAction là một Singleton pattern Duy
nhất một instance của Action đón nhận
để xử lý mọi request
Một Instance của Action sẽ đón nhận một request khác nhau
Gây khó khăn cho người dùng khi
cung cấp một hệ thống quá nhiều taglib
Cung cấp một taglib duy nhất đảm bảo đầy đủ các thành phần hỗ trợ xử lý từ đơn giản đến nâng cao
Chia thành module để chuyển đổi thao
tác và đòi hỏi kết hợp của
switchAction để tạo sự kết hợp giữa
các thành phần khi làm việc theo nhóm
Sử dụng cơ chế interceptor để đảm bảo tích hợp nhiều thành phần và nâng cấp ứng dụng một cách uyển chuyển linh hoạt, đặc biệt là tích hợp mà không làm ảnh hưởng các thành phần có sẵn khi làm việc theo nhóm
Hình 2.2.5 Sự khác nhau giửa Struts2 và Struts1.
Trang 11Sự khác nhau trên, với những ưu điểm của struts 2 so với struts 1 làm cho struts 2 trở thành công cụ hữu ích cho các nhà thiết kế phần mềm Web hiện tại và tương lai.
2.3 Hibernate 4 Framework
2.3.1 OMR Framework
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
ORM (Object Relational Mapping) framework là một cơ chế cho phép người lập trình thao tác với database một cách hoàn toàn tự nhiên thông qua các đối tượng Lập trình viên hoàn toàn không quan tâm đến loại database sử dụng như Phpmyadmin, SQL,…
2.3.2 Tổng quan về Hibernate
Hibernate là một framework cho persistence layer, là một dịch vụ lưu trữ và truy vấn
dữ liệu quan hệ mạnh mẽ và nhanh chóng Hibernate giúp người phát triển các Class dùng để lưu trữ dữ liệu theo cách thức hướng đối tượng: association, inheritance, polymorphism, composition và collections Hibernate cho phép thực hiện các câu truy vấn dữ liệu bằng cách sử dụng ngôn ngữ SQL mở rộng của Hibernate – Hibernate Query Language (HQL) hoặc là ngôn ngữ SQL nguyên thuỷ cũng như là sử dụng các API
Không giống như các persistence layer khác, Hibernate không che giấu đi sức mạnh của ngôn ngữ SQL mà Hibernate còn đảm bảo việc truy vấn cơ sở dữ liệu một cách mạnh mẽ dễ dàng khi thao tác với SQL truyền thống Đặc biệt nó còn cung cấp thêm một ngôn ngữ hổ trợ truy vấn đơn giản và tiện dụng hơn, giúp cho người phát triển ứng dụng có thêm lựa chọn, đó là Hibernate Query Language Và điều quan trọng hơn nữa là Hibernate được license theo LGPL (Lesser GNU Public License) Theo đó, bạn
có thể thoải mái sử dụng Hibernate trong các dự án open source hoặc các dự án thương mại
Các tính năng của Hibernate:
Trang 12• Hibernate cung cấp ba đầy đủ tính năng tiện ích truy vấn: Hibernate Query Language, Hibernate Criteria Query API và các truy vấn tự nhiên.
• Bộ lọc để làm việc với dữ liệu tạm thời ,vùng dữ liệu hoặc các dữ liệu được phân quyền
• Nâng cao khả năng truy vấn với API: với sự hỗ trợ đầy đủ cho các phép chiếu ,phép kết hợp và phép chọn
• Kiểm soát được thời gian chạy: thông qua JMX hoặc Java API, bao gồm cả bộ đệm trình duyệt ở mức thứ cấp
• Hỗ trợ IDE Eclipse, bao gồm một bộ Eclipse plug-in để làm việc với
Hibernate , bao gồm biên tập liên kết, tương tác với mẫu truy vấn, công cụ nhận lại cấu trúc cơ sở dữ liệu
• Hibernate là miễn phí theo LGPL: Hibernate có thể được dùng để phát triển phân phối các ứng dụng miễn phí
• Hibernate có thể mở rộng: Hibernate mang lại hiệu năng cao và kiến trúc 2 lớp của nó có thể được sử dụng trong môi trường tập trung
• Giảm thời gian phát triển ứng dụng: Hibernate làm giảm thời gian phát triển các ứng dụng vì nó hỗ trợ thừa kế, đa hình, thành phần và các framework trong java
Hibernate XML cho phép liên kết dữ liệu được biểu diễn như XML và POJOs thay thế cho nhau
Trang 132.3.3 Kiến Trúc Hibernate.
Bảng 0 Kiến trúc Hibernate
Trang 14Hibernate tạo ra một thể hiện của Entity Class ( Java class ánh xạ với các bảng trong database) để duy trì dữ liệu cho Database, Đối tượng đó được gọi là Transient Object, chưa được kết hợp với session , hoặc chưa tồn tại trong database Để duy trì một đối tượng cho database, phải khởi tạo một thể hiện của Session Factory
interface Session factory là một singleton instance áp dụng Factory design pattern Session factory đọc hibernate.cfg.xml file và dùng Transaction Factory và
ConnectionProvider, nó áp dụng các cài đặt cấu hình trong Database
Mỗi database connection trong hibernate được tạo ra bằng việc khởi tạo một thể hiện của session interface Mỗi session đại diện cho một kết nối đến Database Và một đối tượng session được tạo ra từ một đối tượng Session Factory
Session Factory (org.hibernate.SessionFactory):là khái niệm về việc lưu trữ dữ liệu duy nhất và thread safe Bởi các đặc tính đó, nhiều threads có thể truy cập nó một cách đồng thời và các session sẽ được yêu cầu, và sẽ không thay đổi bảng ánh xạ của một database cụ thể SessionFactory sẽ được built trong khoảng thời gian
startup
Session (org.hibernate.Session) : dùng để lấy kết nối vật lý đến một database Đối tượng Session khá gọn nhẹ và được thiết kế để được khở tạo mỗi lần có tương tác với database Persistent objects được lưu và rút trích thông qua đối tượng Session Đối tượng session không nên tồn tại quá lâu vì nó không đảm bảo tính chất thread safe
Persistent objects and collections: các java class có kiến trúc gần giống với các table trong databse, và có các đối tượng hoặc thể hiện sẽ được lưu trử vào database được xem là các persistent classes Hibernate sẽ làm việc tốt hơn nếu các lớp đó tuân theo một số quy luật đơn giản được biết đến như là mô hình Plain Old Java Object (POJO) Các Persistent objects sẽ được lưu xuống database thông qua việc
hibernate xác định các bảng tương ứng với các trường được liên kết thông qua file ánh xạ
Trang 15Transient and detached objects and collections: một thể hiện của Persistent class mà hiện tại không có liên quan gì đến org.hibernate.Session Nó có thể được khởi tạo bởi ứng dụng và chưa persisted, hoặc nó được khởi tạo bằng việc đóng
org.hibernate.Session
Transaction: là một đối tượng single-thread, vòng đời ngắn, được ứng dụng dùng để xác định một đơn vị công việc Nó trừu tượng hoá ứng dụng từ các giao dịch nền JDBC, JTA hoặc CORBA
Để tạo nên ứng dụng Hibernate, có ba điều cần phải có, đó là:
1 Persistence Class:
Persistence class là một Plain Old Java Object hay POJO model Một POJO là tương tự như một JavaBean, có những getter và setter để truy câp các thuộc tính của nó là những instance variable (biến thực thể) Persistence class có những đặc điểm dưới đây:
Nó là thay thế hướng đối tượng cho bảng ở cơ sở dữ liệu
Các thuộc tính của bảng trở thành những instance variable của
persistence class.
Kiểu dữ liệu của các instance variable là domain của các thuộc tính.
Đối tượng của persistence class thay hế cho hàng của bảng.
Trang 16dụng để xác định bảng mà lớp thay thế Ví dụ để ánh xạ một bản mang tên ORDERS thành một persistence class với tên đầy đủ là
com.someorg.persist.Order sẽ như dưới đây:
<class name=”com.someorg.persist.Order” table=”ORDERS”>…</class>
• ID : Thành phần này sử dụng để ánh xạ khóa chíh của table thành một instance variable của class Thành phần cột con của id có thể sử dụng
để ánh xạ thành biến tương ứng Giá trị của khóa chính có thể tự động tạo ra được công bố ở đây Thành phần generator có thể được sử dụng
để nói cho Hibernate một lớp sẽ được sử dụng ở đâu để tự động tạo id, hoặc id được gán bởi ứng dụng.
<id name="id" type="string" unsaved-value="null">
<column name="id" sql-type="char(32)" not-null="true"/>
là ứng dụng bản thân nó sẽ cung cấp giá trị cho khóa chính.
• Property : thành phần này, thuộc về các cột thành phần con của nó, ánh
xạ những thuộc tính khác (hoặc các côt thành những instance variable của persistence class Thuộc tính name của property chứa tên của biến như một giá trị Thuộc tính name của thành phần column chứa tên của cột mà instance variable được ánh xạ Các thuộc tính length và sql-type trỏ đến độ dài và kiểu dữ liệu của cột