Tải bản đầy đủ

CÔNG NGHỆ PHẦN MỀM:STRUCT 2 FRAMEWORK VÀ HIBERNATE

CHUYÊN ĐỀ CÔNG NGHỆ PHẦN MỀM

TÌM HIỂU VỀ STRUCT 2 FRAMEWORK
VÀ HIBERNATE

Phần đánh giá của GV chấm bài

________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
________________________________________________________
_______
Tp. Hồ Chí Minh, ngày

tháng năm

(kí và ghi họ tên)



TÓ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ề:
 Struts1
 Struts 2
 So sánh Struts 1 và Struts 2
 Hibernate các phiên bản
 Hibernate 4


MỤC LỤC


Chươ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 Framework
Trên nền các phần mềm lập trình:
 Eclipse JEE 4.0
 Những thông tin chi tiết và mở rộng về công nghệ sẽ được nhóm em triển khai
trong chương 2 .
1.2 Tính khoa học và thực tiễn.
Trong lĩnh vực phát triển ứng dụng Web, các công nghệ mới liên tiếp ra đời, cải
tiến để hỗ trợ cho các nhà phát triển, các lập trình viên xây dựng Web cách

nhanh chóng và chất lượng và hiệu quả cao, thêm vào đó là sự bảo mật chứng
thực người dùng, nâng cao tính tin cậy dễ sử dụng, tính thân thiện cao cho
người dùng. Struts & Hibernate là những framework được tin dùng và phổ biến
trong lĩnh vực web java hiện nay do đó tin rằng trang Web sẽ được xây dựng
nhanh chóng, đẹp mắt và bảo mật rất tốt. Hiện nay, được sử dụng phổ biến
nhất là Struts2và Hibernate4 framework.
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.


CHƯƠ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


- 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
- Linh động và dễ mở rộng
- Có một cộng đồng đông đảo
- Ổn định và không ngừng phát triển
- Mã nguồn mở hoàn toàn
- Tích hợp tốt với J2EE
- 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.


2.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:
 Servlet API 2.4
 JSP API 2.0
 Java 5
2.2.2 Lợi ích Strust 2.
Struts 2 được xây dựng và phát triển dựa trên nền tảng mô hình MVC nên nó
thừa hưởng được đầy đủ các ưu điểm mà mô hình MVC đem lại.
- Dễ dàng tùy chỉnh (customize) chu kỳ xử lý (request lifecycles ) cho từng
action

- Giải quyết hiệu quả vấn đề internationlization và localization trong các ứng
dụng web


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


ActionProxy: 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


e. 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.
2.2.5 So sánh Strust 1 và Strust 2.

Struts 1

Struts 2

Sử dụng ActionServlet làm Controller Sử dụng Fillter Dispatcher là Controller
Dùng các thuộc tính trong Action class
Đón nhận giá trị nhập bằng cách dùng để đón nhận giá trị nhập từ Form và
HTML Form kết hợp ActionForm

thực hiện xử lý cùng với validation nếu

object và xử lý validation nếu cần

cần

Action bắt buộc implement Action

Action class không cần bắt buộc

interface

implement Action interface

Action là một Singleton pattern. Duy
nhất một instance của Action đón nhận Một Instance của Action sẽ đón nhận
để xử lý mọi request.

một request khác nhau.
Cung cấp một taglib duy nhất đảm bảo

Gây khó khăn cho người dùng khi

đầy đủ các thành phần hỗ trợ xử lý từ

cung cấp một hệ thống quá nhiều taglib đơn giản đến nâng cao
Sử dụng EL và JSTL

Sử OGNL để xử lý

Dùng cơ chế biên dịch của JSP để kết Sử dụng ValueStack cho phép taglib
nối các thành phần trong xử lý

truy vập giá trị trong quá trình xử lý
Sử dụng cơ chế interceptor để đảm bảo
tích hợp nhiều thành phần và nâng cấp

Chia thành module để chuyển đổi thao ứng dụng một cách uyển chuyển linh
tác và đòi hỏi kết hợp của

hoạt, đặc biệt là tích hợp mà không làm

switchAction để tạo sự kết hợp giữa

ảnh hưởng các thành phần có sẵn khi

các thành phần khi làm việc theo nhóm làm việc theo nhóm
Hình 2.2.5 Sự khác nhau giửa Struts2 và Struts1.


Sự 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:


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


2.3.3 Kiến Trúc Hibernate.

Bảng 0 Kiến trúc Hibernate


Hibernate 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ạ.


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

2. Mapping file:
Mapping file là một file XML chứa ánh xạ chi tiết giữa persistence class và
bảng nó thay thế. Các thành phần bắt buộc của file XML này là:
• Hibernate-mapping: Đây là thành phần gốc bao tất cả các thành phần

khác

• Class: được sử dụng để ánh xạ tên bản thành persistence class. Tên

thuộc tính được sử dụng để xác định tên lớp, và thuộc tính bản được sử


dụ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:

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





Ví dụ trên nói cho Hibernate rằng, tên của khóa chính là id mà nó đã
được ánh xạ thành instance variable "id". Kiểu dữ liệu của nó là
"string" được ánh xạ cho cột "id" có kiểu "char(32)" thay thế bởi thuộc
tính sql-type. Thuộc ính lớp của generator chứa giá trị "assigned" nghĩa
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




• Hibernate là một công nghệ hổ trợ kết nối CSDL mạnh mẽ dựa trên mô hình
ORM, cung cấp các tuỳ chọn và tự động thực thi kết nối, quản lý kết nối, tạo
ra các lớp POJO ánh xạ trực tiếp đến các bảng trong CSDL bằng cách sử
dụng Hibernate Reverse tools.


• Ngoài ra, Hibernate còn cung cấp ngôn ngữ truy vấn HQL, là ngôn ngữ hoàn
toàn hướng đối tượng và hiểu các khái niệm như inheritance, polymorphism,
và association


3. Hibernate Configuration file:
File này có thể được gọi trỏ đến ứng dụng sử dụng Hibernate. Nguyên nhân là
nó chứa cấu hình điều khiển giao tiếp với database ở phía dưới. Ở đây, tất cả
các file mapping được sử dụn bởi ứng dụng được công bố. Địnn dạng thành
phần của hibernate-configuration là thành phần gốc. Hầu hết các thành phần
thông dụng sử dụng trong file XML là:
• Property: Thuộc tính name của thành phần property có thể được sử dụng để
cấu hình những tham số khác nhau. Trong công nghệ Hibernate, những tham
số này được biết như là những tham số property. Kiểu database server
(MySQL, Oracle...), dialect class, URL của database, username/password...
là những tham số property khác nhau. Để đặt chúng vào trong mã:


name="connection.driver_class">org.hsqldb.jdbcDriver
jdbc:hsqldb:data/tutorial
sa
:
:

• Mapping: Nó là thành phần kết nối tất cả các file mapping,, cũng gọi là

các file hbm, được sử dụng bởi ứng dụng đã công bố. Thuộc tính
resource được cho giá trị của đường dẫn file hbm.



Chương 4 – KẾT LUẬN
Thông qua việc thực hiện đề tài Tìm hiểu Struts2 Framework, Hibernate 4.0
Framework. Nhóm đã nắm bắt được kiến thức nền tản về công nghệ Struts 2 và
Hibernate 4.0
Mỗi framework nó đều có mục đích cũng như tác dụng khác nhau, đơn cử như
Struts chuyên để hỗ trợ tầng View hay Hibernate chuyên hỗ trợ tầng data access (kết
nối, truy xuất với CSDL)


TÀI LIỆU THAM KHẢO

[1]. Mkyong, February 9, 2012, Struts 2 Tutorial. Được tham khảo từ nguồn trong
link sau http://www.mkyong.com/tutorials/struts-2-tutorials
[2]. Viral Patel, 23-12-2009, Tutorial: Create Struts 2 Application in Eclipse.
Được lấy từ http://viralpatel.net/blogs/tutorial-create-struts-2-application-eclipseexample.
[3]. http://kieutrongkhanh.net/index.php/struts-2/72-tng-quan-v-struts-2framework./
[4]. http://struts.apache.org/release/2.0.x/docs/ajax-tags.html.




Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×