Java cũng đã có cho riêng mình một số Framework như Hibernate,Spring, Struts,…Nhận thấy Struts 2 là một Framework khá mới mẻ của Java, là một kỹ sư Côngnghệ thông tin trong tương lai, em
Trang 2LỜI CẢM ƠN
Trước tiên, Em xin gửi lời cảm ơn và lòng biết ơn sâu sắc đến ThS NguyễnCông Nhật, người đã tận tình chỉ bảo, hướng dẫn em trong quá trình thực hiện đồ ántốt nghiệp
Em xin gửi lời cảm ơn anh Nguyễn Tấn Huy, anh Võ Văn Liêm – người hướngdẫn và chỉ tảo em trong suốt thời gian thực tập tốt nghiệp và thực hiện đồ án
Em xin gửi lời cảm ơn tới các thầy cô giáo đã giảng dạy em trong suốt nhữngnăm học qua, đã cho em nhiều kiến thức quý báu để tôi vững bước trên con đường họctập của mình
Tôi xin gửi lời cảm ơn tới các bạn trong lớp 49K-CNTT đã giúp đỡ tôi trongsuốt quá trình học tập tại trường
Và cuối cùng, con xin bày tỏ lòng biết ơn vô hạn tới bố mẹ và những ngườithân trong gia đình đã luôn bên cạnh, động viên và tạo điều kiện cho con trong suốtquá trình thực hiện đồ án cũng như trong suốt quá trình học tập
Vinh, ngày 10 tháng 12 năm 2012
Sinh viên Bùi Đức Anh
Trang 3Để tạo ra được một website lớn và phức tạp thỏa mãn tối ưu các nhu cầu ngàycàng cao của người sử dụng, các nhà phát triển đã nghiên cứu và cho ra đời nhiềuFramework Java cũng đã có cho riêng mình một số Framework như Hibernate,Spring, Struts,…
Nhận thấy Struts 2 là một Framework khá mới mẻ của Java, là một kỹ sư Côngnghệ thông tin trong tương lai, em quyết định chọn đề tài “Tìm hiểu Công nghệ Struts
2 và xây dựng Website Quản lý yêu cầu trực tuyến” nhằm tìm hiểu, nắm bắt vững và
áp dụng được các kiến thức của Struts 2 Framework để xây dựng một Website nóichung, Website Quản lý yêu cầu trực tuyến nói riêng với mong muốn đóng góp đượcmột phần nhỏ làm cho quy trình quản lý các tiện nghi của một trường Đại học, trướchết là trường Đại học Vinh chúng ta đạt hiệu quả cao
MỤC LỤC
Trang 4LỜI CẢM ƠN 1
LỜI MỞ ĐẦU 2
NỘI DUNG 5
Chương 1: TỔNG QUAN CÁC KIẾN THỨC CƠ BẢN 5
1.1 Tổng quan về ngôn ngữ Java 5
1.1.1 Giới thiệu 5
1.1.2 Các đặc trưng của java 5
1.1.3 Các kiểu chương trình Java 7
1.1.4 Máy ảo Java (JVM-Java Virtual Machine) 8
1.1.5 Giới Thiệu về J2EE 9
1.2 JSP & Servlet 9
1.2.1 Servlet 9
1.2.2 JSP (Java Server Pages) 11
Chương 2 : CÔNG NGHỆ STRUTS 2.0 TRONG JAVA 14
2.1 Kiến trúc MVC 14
2.1.1 Giới thiệu 14
2.1.2 Các thành phần của MVC 15
2.1.3 Mối quan hệ giữa các thành phần trong MVC 16
2.1.4 Ưu điểm và nhược điểm của MVC 16
2.2 Giới thiệu về công nghệ Struts 17
2.2.1 Các thành phần của Struts 18
2.2.2 Các thành phần chính yếu và thường dùng của Struts Framework 19
2.2.3 Cơ chế hoạt động của Struts 21
2.3 Struts 2 22
2.3.1 Một số đặc tính cải tiến của Struts 2 Framework 22
2.3.2 Khác nhau giữa Struts 2 Framework với Struts 1 Framework 23
2.3.3 Kiến trúc của Struts 2 24
2.3.4 Các thành phần chính yếu và thường dùng của Struts 2 Framework 25
2.3.5 Cơ chế hoạt động của Struts 2 Framework 27
Trang 5Chương 3: ỨNG DỤNG CÔNG NGHỆ STRUTS 2.0 XÂY DỰNG WEBSITE
QUẢN LÝ YÊU CẦU TRỰC TUYẾN 29
3.1 Mô tả bài toán 29
3.2 Phân tích thiết kế hệ thống 29
3.2.1 Phân tích yêu cầu 29
3.2.2 Người sử dụng 29
3.2.3 Các chức năng chính 29
3.2.4 Đặc điểm của một yêu cầu 30
3.2.5 Biểu đồ phân cấp chức năng 31
3.3 Xây dựng cơ sở dữ liệu và giao diện 35
3.3.1 Thiết kế cơ sở dữ liệu vật lý 35
3.3.2 Thiết kế giao diện 38
KẾT LUẬN 44
Kết quả đạt được 44
Hạn chế 44
Hướng phát triển 44
TÀI LIỆU THAM KHẢO 45
Trang 6NỘI DUNG Chương 1: TỔNG QUAN CÁC KIẾN THỨC CƠ BẢN
1.1 Tổng quan về ngôn ngữ Java
1.1.1 Giới thiệu
Java là một ngôn ngữ lập trình được Sun Microsystems giới thiệu vào tháng 6năm 1995 Từ đó, nó trở thành một công cụ lập trình của các lập trình viên chuyênnghiệp Java được xây dựng trên nền tảng của C và C++ Do vậy nố sử dụng các cúpháp của C và các đặc trưng hướng đối tượng của C++
Vào năm 1991, một nhóm các kỹ sư của Sun Microsystems có ý định thiết kếmột ngôn ngữ lập trình để điều khiển các thiết bị điện tử như Tivi, máy giặt, lò nướng,
… Mặc dù C và C++ có khả năng làm việc này nhưng trình biên dịch lại phụ thuộcvào từng loại CPU
Trình biên dịch thường phải tốn nhiều thời gian để xây dựng nên rất đắt.Vì vậy
để mỗi loại CPU có một trình biên dịch riêng là rất tốn kém Do đó nhu cầu thực tế đòihỏi một ngôn ngữ chạy nhanh, gọn, hiệu quả và độc lập thiết bị tức là có thể chạy trênnhiều loại CPU khác nhau, dưới các môi trường khác nhau “Oak” đã ra đời và vàonăm 1995 được đổi tên thành Java Mặc dù mục tiêu ban đầu không phải có Internetnhưng do đặc trưng không phụ thuộc thiết bị nên Java đã trở thành ngôn ngữ lập trìnhcho Internet
Java là ngôn ngữ vừa biên dịch vừa thông dịch Đầu tiên mã nguồn được biêndịch bằng công cụ JAVAC để chuyển thành dạng ByteCode Sau đó được thực thi trêntừng loại máy cụ thể nhờ chương trình thông dịch Mục tiêu của các nhà thiết kế Java
là cho phép người lập trình viết chương trình một lần nhưng có thể chạy trên bất cứphần cứng cụ thể nào
Ngày nay, Java được sử dụng rộng rãi để viết chương trình chạy trên Internet
Nó là ngôn ngữ lập trình hướng đối tượng độc lập thiết bị, không phụ thuộc vào hệđiều hành Nó không chỉ dùng để viết các ứng dụng chạy đơn lẻ hay trong mạng màcòn để xây dựng cá trình điều khiểu thiết bị cho điện thoại di động, PDA,…
1.1.2 Các đặc trưng của java
Đơn giản
Những người thiết kế mong muốn phát triển một ngôn ngữ dễ học và quen thuộcvới đa số người lập trình Do vậy Java được loại bỏ các đặc trưng phức tạp của C và C+
Trang 7+ như thao tác con trỏ, thao tác nạp đè (overload), … Java không sử dụng lệnh “gôt”cũng như file header(.h) Cấu trúc “struct” và “union” cũng được loại bỏ khỏi Java.
Hướng đối tượng
Java được thiết kế xoay quanh mô hình hướng đối tượng Vì vậy trong Java,tiêu điểm là dữ liệu và các phương pháp thao tác lên dữ liệu đó Dữ liệu và các phươngpháp mô tả trạng thái và các ứng xử của một đối tượng trong Java
Ở mức nhị phân, một chương trình đã biên dịch có thể chạy trên nền khác nhau
mà không cần dịch lại mã nguồn Tuy vậy cần có phẩn mềm máy ảo Java hoạt độngnhư một trình thông dịch tại máy thực thi
Java cung cấp một số lớp để kiểm tra bảo mật
Ở lớp đầu tiên, dữ liệu và các phương pháp được đóng gói bên trong lớp Chúng chỉđược truy xuất thông qua các giao diện mà lớp cung cấp Java không hỗ trợ con trỏ vìvậy không cho phép truy xuất bộ nhớ trực tiếp Nó cung cấp kỹ thuật dọn rác trong bộnhớ Các đặc trưng này tạo cho Java an toàn và có khả năng cơ động cao
Trong lớp thứ hai, trình biên dịch kiểm soát để đảm bảo mã an toàn Lớp thứ bađược đảm bảo bởi trình thông dịch Chúng kiểm tra xem bytecode có đảm bảo các quytắc an toàn trước khi thực thi Lớp thứ tư kiểm soát việc nạp các lớp lên bộ nhớ đểgiám sát việc vi phạm giới hạn truy xuất trước khi nạp vào hệ thống
Phân tán
Java có thể dùng để xây dựng các ứng dụng có thể làm việc trên nhiều phầncứng, hệ điều hành và giao diện đồ họa Java được thiết kế cho các ứng dụng chạy trênmạng Vì vậy chúng đước sử dụng rộng rãi trên Internet, nơi sử dụng nhiều nền tảng
Trang 8Đa luồng
Chương trình Java sử dụng kỹ thuật đa tiến trình (Multithread) để thực thi cáccông việc đồng thời Chúng cũng cung cấp giải pháp đồng bộ giữa các tiến trình Đặctính hỗ trợ đa tiến trình này cho phép xây dựng các ứng dụng trên mạng chạy uyểnchuyển
Động
Java được thiết kế như một ngôn ngữ động để đáp ứng cho những môi trường
mở Các chương trình Java bổ sung các thông tin cho các đối tượng tại thời gian thựcthi Điều này cho phép khả năng liên kết động các mã
1.1.3 Các kiểu chương trình Java
Applets
Đây là chương trình chạy trên Internet thông qua các trình duyệt hỗ trợ Javanhư IE hay Netscape Bạn có thể dùng các công cụ của Java để xây dựng Applet.Applet được nhúng bên trong trang Web hoặc file HTLM Khi trang Web hiển thịtrong trình duyệt, Applet sẽ được nạp và thực thi
xử lý trên Form của HTML là cách sử dụng đơn giản nhất của Servlet Chúng còn cóthể được dùng để xử lý dữ liệu, thực thi các transaction và thường được thực thi quamáy chủ Web
Ứng dụng cơ sở dữ liệu
Các ứng dụng này sử dụng JDBC API để kết nối tới cơ sở dữ liệu Chúng có thể
là Applet hay ứng dụng, nhưng Applet bị giới hạn bởi tính bảo mật
Trang 91.1.4 Máy ảo Java (JVM-Java Virtual Machine)
Máy ảo Java là trái tim của ngôn ngữ Java, là một trong các phần tử tạo choJava thành công và các chương trình Java viết một lần chạy được ở bất kỳ đâu là nhờ
sự giúp đỡ của máy ảo Java
Máy ảo Java là một phần mềm dựa trên cơ sở máy tính ảo Nó có tập hợp cáclệnh logic để xác định các hoạt động của máy tính Người ta có thể xem nó như một hệđiều hành thu nhỏ Nó thiết lập các lớp trừu tượng cho phần cứng bên dưới, hệ điềuhành, mã đã biên dịch
Trình biên dịch chuyển mã nguồn thành các lệnh của máy ảo mà không phụthuộc vào phần cứng cụ thể Trình thông dịch trên mỗi máy sẽ chuyển tập lệnh nàythành chương trình thực thi Máy ảo tạo ra một môi trường bên trong để thực thi cáclệnh bằng cách:
- Các “Frame” chứa các trạng thái của cá phương pháp
- Các toán hạng của mã bytecode
- Các tham số truyền cho phương pháp
- Các biến cục bộ
Khi JVM thực thi mã, một thanh ghi cục bộ có tên “Program Counter” được sửdụng Thanh ghi này trỏ tới lệnh đang thực hiện Khi cần thiết, có thể thay đổi nộidung thanh ghi để đổi hướng thực thi của chương trình Trong trường hợp thôngthường thì từng lệnh một nối tiếp nhau sẽ được thực thi
Một khái niệm thông dụng khác trong Java là trình biên dịch “Just In JIT” Các trình duyệt thông dụng như Netcape hay IE đều có JIT bên trong để tăng tốcthực thi một chương trình Java Mục đích chính của JIT là chuyển tập lệnh bytecodethành mã máy cụ thể cho từng loại CPU Các lệnh này sẽ được lưu trữ và sử dụng mỗikhi gọi đến
Time-1.1.5 Giới Thiệu về J2EE
J2EE là thuật ngữ viết tắt của Java 2 Platform, Enterprise Edition Đây là mộtmôi trường phát triển và triển khai các ứng dụng được phát triển bởi SunMicrosystems, là cái nền cung cấp các dịch vụ, các hàm giao tiếp (API) và các giao
Trang 10J2EE là một thành phần quan trọng và rộng lớn trong lĩnh vực Java, nó đượcdùng để phát triển các ứng dụng lớn mang tính chất phân tán rộng khắp Đây là lĩnhvựa được chủ trọng và ứng dụng nhiều nhất của java trong thực tế.
Kiến trúc J2EE tổng quát
Trong đó:
- EJB (Enterprise java bean) container: quản lý và thực thi các thành phầnenterprice bean
- Web container : quản lý và thực thi các thành phần JSP và Servlet
- Application Client Container : quản lý và thực thi các thành phần phía client
1.2 JSP & Servlet
1.2.1 Servlet
Trong thời gian đầu, người ta thường sử dụng Common gateway Interface(CGI) để xử lý trang động Khi có một yêu cầu cho một trang động, web server sẽchuyển yêu cầu này đến một script file nào đó và khởi động script file này Nội dungcủa toàn bộ hay một phần của trang động được tao ra bởi script file Kỹ thuật này gặpnhiều khó khăn Việc khởi động một script file cũng tương đương với chạy mộtprocess hay một ứng dụng, nó đòi hỏi khá nhiều tài nguyên của web server Nếu cóhàng ngàn yêu cầu cùng một lúc thì web server sẽ không thể nào đáp ứng được
Servlet API được phát triển dựa trên những điểm mạnh của Java platform nhằmgiải quyết vấn đề của CGI và trình chủ server API Nó là một API đơn giản hỗ trợ tất
cả các Web server và thậm chí các ứng dụng máy chủ dùng để kiểm tra và quản lý các
Trang 11công việc trên server (load – balancing) Nó giải quyết vấn đề thực thi bằng việc thựchiện tất cả các yêu cầu như những dòng trong một xử lý, hoặc trên một hệ thống load –balancing sẽ là mỗi xử lý trên một server trong kết chùm cluster Các servlet dễ dàngchia sẽ tài nguyên Bạn có thể sử dụng JavaMail để đọc và gửi mail, Java DatabaseConnect (JDBC) để truy cập database, lớp File và những lớp quan hệ để truy cập hệthống file, RMI, CORBA, Enterprise Java Beans (EJB) để truy cập các hệ thống kếthừa…
Servlet gồm các phương thức cơ bản sau :
- init() : Phương thức này được gọi khi lần đầu tiên trình chủ Web server nạp mãthực thi của servlet từ tập tin class vào bộ nhớ và bắt đầu cho phép Servlet hoạtđộng Ta có thể dùng phương thức này để khởi tạo các biến môi trường và giátrị ban đầu cần thiết cho quá trình thực thi Servlet tiếp theo
- service() : Sau khi phương thức init() đã hoàn tất trình chủ Web server sẽ gọiđến phương thức service() Khi trình chủ nạp servlet vào bộ nhớ, phương thứcinit() chỉ được gọi duy nhất một lần trong khi phương thức service() có thểđược gọi nhiều lần ứng với mỗi yêu cầu servlet phát sinh từ trình duyệt phíamáy khách Bên trong phương thức service() có thể sử dụng đối tượng tham sốServletRequest và ServletResponse để tiếp nhận dữ liệu từ trình khách chuyểnlên và kết xuất kết quả phản hồi lại trình khách
- destroy() : Khi servlet không còn dùng đến nữa hoặc hết thời gian quy định lưutrữ trong bộ nhớ của trình chủ Web server, nó sẽ bị trình chủ giải phóng Trướckhi servlet bị hủy, phương thức destroy() sẽ được gọi
- getServletConfig() và getServletInfor() : Hai phương thức này nhằm mục đíchcung cấp thông tin Phương thức getServletConfig() giúp người sử dụng servlet
có được đối tượng ServletConfig chứa các thông tin khởi tạo từ môi trường rồiđưa vào servlet Phương thức getServletInfor() trả về một chuỗi thông tin mô tả
ý nghĩa và mục đích của servlet
Một Servlet khi được khởi tạo thì nó sẽ tồn tại suốt trong bộ nhớ của server Khi
có một yêu cầu từ phía trình khách nó sẽ sẵn sàng được sử dụng chứ không cần khởitạo lại một lần nữa Servlet chỉ ngừng khi chúng ta stop hoặc restart lại server
1.2.2 JSP (Java Server Pages)
JSP còn được biết đến với một cái tên khác là Java Scripting Preprocessor – làmột công nghệ Java cho phép các nhà phát triển tạo nội dung HTML, XML hay một sốđịnh dạng khác của trang web một cách năng động, trong khi hồi âm yêu cầu của trình
Trang 12khách Công nghệ này cho phép người ta nhúng mã Java và một số hành động xử lý đãđược định trước vào trong nội dung tĩnh của trang.
Cú pháp của JSP cho thêm các thẻ XML mới, gọi là JSP actions Những JSPactions này được dùng để tạo ra các thư viện thẻ JSP, là những cái đóng vai trò vàoviệc mở rộng các thẻ HTML hay XML tiêu chuẩn Thư viện thẻ là phương pháp mởrộng khả năng của một web server trong khi những mở rộng đó không phụ thuộc vào
hệ nền
Trước khi hiển thị ra trình duyệt, tập tin JSP phải được biên dịch thành Servlet,dùng bộ biên dịch JSP (JSP compiler) Bộ biên dịch JSP có thể tạo servlet thành mãnguồn Java trước, rồi biên dịch mã nguồn ra tập tin class dùng bộ biên dịch Java, hoặc
có thể trực tiếp tạo mã bytecode cho servlet từ trang JSP
Trang JSP có chu trình sống xác định tính từ khi hệ thống đọc biên dịch trangJSP, gọi thực thi và loại trang ra khỏi bộ nhớ Chu trình sống của JSP trải qua các giaiđoạn sau :
- Biên dịch trang JSP
Khi trình duyệt yêu cầu trang JSP, Web server sẽ kiểm tra trang JSP đã được biêndịch hay chưa Nếu chưa biên dịch hoặc đã biên dịch nhưng trang JSP mới vừathay đổi trong mà nguồn thì Web server sẽ thực hiện biên dịch trang JSP Quá trìnhbiên dịch trang JSP thực tế là chuyển trang JSP thành Servlet File biên dịch classcủa trang sẽ được đặt trong thư mục đệm Như vậy quá trình biên dịch chỉ diễn ramột lần Nếu trang đã biên dịch mà sau đó không có thay đổi mã nguồn thì quátrình biên dịch lần sau sẽ không xảy ra, do đó tốc độ thực thi trang sẽ nhah hơn.Sau khi trang đã được biên dịch, mã trang sẽ được nạp vào bộ nhớ để thực thi
- Nạp trang
Từ giai đoạn này, trang JSP đã được biên dịch ra servlet cho nên việc nạp trang JSPcũng giống như nạp servlet Để nạp servlet, trình chủ Web server cần phải biết têncủa lớp servlet (file class) cũng là tên mà trình duyệt dùng để triệu gọi servlet Cácservlet mặc định của Jrun được cài trong thư mục [JRUN_HOME]\servlets Khi cómột yêu cầu triệu gọi JSP, trình chủ Web server sẽ xem JSP đã nạp vào bộ nhớ haychưa, nếu chưa có nó sẽ nạp vào bộ nhớ
- Khởi tạo
Khi nạp mã thành công, Web server sẽ gọi đến phương thức khởi tạo trang Mặc dùJSP được dịch ra servlet nhưng phương thức khởi tạo của JSP lại mang tên jspInit()chứ không phải init()
- Thực thi
Trang 13Sau quá trình khởi tạo JSP sẽ gọi đến phương thức _jspService() Phương thứcnày sẽ cho ta hai lớp đối tượng HttpServletRequest và HttpServletResponse để đọc
và ghi kết xuất trả về trình khách
- Dọn dẹp
Khi trang JSP đã thực thi xong, trình chủ Web server sẽ gọi phương thứcjspDestroy() để giải phóng mã trang ra khỏi bộ nhớ
Cơ chế hoạt động của JSP
Cơ chế hoạt động của JSP có thể được mô tả như sau: Các đoạn mã Java đượcnhúng trong trang web dưới các thẻ đặc biết được quy định gần giống như thẻ HTML.Khi có yêu cầu gửi tới, web server sẽ chuyển yêu cầu ho Java Engine để lấy trang JSP
từ hệ thống tập tin Bộ biên dịch JSP sẽ chuyển các mã lệnh Java và toàn bộ nội dungtrang JSP thành một Servlet Servlet này sẽ được thực thi trong môi trường máy chủJava để trả lại các thông tin cho web server và web server chuyển lại cho trang JSP.Các thẻ này sẽ kết hợp với các mã HTML/XML để tạo ra kết xuất cuối cùng trả về choweb client Các chức năng của trang JSP hoàn toàn giống với Servlet, tuy nhiên chúng
ta không cần tạo Servlet này Do đó viết một trang JSP sẽ đơn giản hơn viết mộtServlet Theo cơ chế này thì trang JSP có thể phải thực hiện chậm hơn Servlet thuầntúy, nhưng chỉ là lần đầu khi trang JSP được gọi đến và biên dịch Ở các lần gọi kếtiếp, sẽ không cần biên dịch lại trang JSP nữa (trừ khi có thay đổi nội dung) Mã thựcthi JSP/Servlet là mã bytecode, có thể thường trú trong bộ nhớ nên việc xử lý JSP xét
về tốc độ sẽ nhanh hơn các trang ASP sử dụng cơ chế diễn dịch, hay công nghệ CGI
Trang 15Chương 2: CÔNG NGHỆ STRUTS 2.0 TRONG JAVA
2.1 Kiến trúc MVC
2.1.1 Giới thiệu
Trước đây, chúng ta dùng mô hình cổ điển khi lập trình một trang JSP chúng taphải đan xen các mã HTML cùng với các đoạn mã Java Tất cả được gói gọn trongJSP hoặc Servlet từ việc xử lý request, xác nhận tính hợp lệ của dữ liệu, điều quảnbusiness logic và genetare response Do vậy, có những khó khăn có thể gặp phải nhưlà:
Mặc dù về khái niệm hết sức đơn giản, kiểu lập trình này không phù hợp choviệc phát triển các ứng dụng quy mô lớn vì chắc chắn một số lượng lớn các tính năng
sẽ bị lặp lại trong các trang JSP Cũng vậy, kiểu lập trình này tạo nên sự ràng buộckhông cần thiết giữa business logic và presentation logic của ứng dụng
Người thiết kế giao diện cũng phải biết các ngôn ngữ lập trình, hoặc bạn phảitrực tiếp thiết kế chúng
Việc bảo trì chúng thường rất khó khăn vì một phần các mã Java lẫn lộn với mãHTML
Khi có lỗi xảy ra, việc tìm ra lỗi và định vị lỗi cũng là một vấn đề khó khăn
Để khắc phục những khó khăn trên, người ta đã dưa ra mô hình MVC
Mô hình MVC giải quyết vấn đề của mô hình cổ điển với việc cung cấp một sựphân tách trong ứng dụng Trong mô hình MVC, mỗi Servlet trung tâm, được gọi làController, tiếp nhận tất cả các request cho ứng dụng Sau đó, Controller sẽ xử lýrequest và làm việc với Model để chuẩn bị những dữ liệu cần thiết cho View (thường
là JSP) và forward dữ liệu tới trang JSP Sau đó sử dụng các dữ liệu đã được chuẩn bịbởi Controller để genetate một response về cho browser Trong mô hình này, businesslogic và presentation logic được phân tách nhau Việc phân tách business code vàpresent code giúp chúng ta có thể sử dụng nhiều giao diện cho ứng dụng, chúng có thể
là Web, wireless hay GUI Thêm vào đó, việc phân tách này còn giúp cung cấp việc tái
sử dụng lại code một cách hoàn hảo
Trang 16Mô hình MVC
2.1.2 Các thành phần của MVC
Mô hình MVC chia các components của ứng dụng thành ba phần khác nhau làModel, View và Controller Mỗi component đảm nhận một trách nhiệm nhất định vàđều độc lập với các component khác Việc thay đổi một component sẽ không ảnhhưởng hoặc ảnh hưởng rất ít đến các component khác
Model
Model là các thành phần hỗ trợ ánh xạ dữ liệu lên bộ nhớ, lưu trữ dữ liệu tạmthời trên bộ nhớ, hỗ trợ các cách thức xử lý dữ liệu, khả năng giao tiếp và trao đổi dữliệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu
Tất cả các Business Logic đều được thực thi ở Model Dữ liệu nhập vào bởingười sử dụng qua View sẽ được kiểm tra ở Model trước khi được lưu vào cơ sở dữliệu
Trong ứng dụng Web của Java, Model sẽ là JavaBean hay Enterprise JavaBeanhay Web service
View
View là thành phần hỗ trợ trình bày dữ liệu hay kết quả ra màn hình, hỗ trợnhập thông tin từ phía người dùng
Trang 17Các thành phần này có khả năng truy cập, truy xuất Model thông qua nhữnghành vi mà Model cho phép nhưng View không thể thay đổi các thành phần trongModel.
Trong ứng dụng Web thì các trang HTML, JSP,… là những thành phần đại diệncho View
Controller
Controller là trung gian giữa Model và View Controller có trách nhiệm nhậncác yêu cầu từ Client Khi mà yêu cầu được nhận từ Client, Controller sẽ thực thibusiness logic thích hợp từ Model và sau đó xuất ra dữ liệu cho user sử dụng Viewcomponent
Servlet, Action, ActionForm, struts-config.xml là các thành phần củaController
2.1.3 Mối quan hệ giữa các thành phần trong MVC
Mối quan hệ giữa View và Controller:
Trong MVC truyền thống, các view và controller được kết hợp chặt chẽ vớinhau Mỗi view được kết hợp với một controller duy nhất Controller được xem nhưmột Strategy (sự quản lý) mà view sử dụng cho đầu vào View cũng chịu trách nhiệmtạo ra các khung nhìn và controller mới
Mối quan hệ giữ Model và View:
View lệ thuộc vào Model bởi vì khi các tổ chức interface của Model thay đổinghĩa là View phải thay đổi theo
Chúng ta tránh nhầm lần về khái niệm ở trên là tách biệt giữa View và Model là
có lợi, nhưng tại sao ở đây View lại lệ thuộc vào Model Khái niệm của chúng ta ở đây
là tách biệt dữ liệu và thành phần xử lý bên trong, hệ thống sẽ trở nên uyển chuyển khichúng ta thay đổi thành phần cài đặt trong Model, không phải thay đổi interfaceModel
Mối quan hệ giữa Model và Controller:
Controller được thiết kế để kết nối với Model, điều khiển, truy xuất Model Dovậy, ở Model có sự thay đổi thì Controller cũng phải thay đổi theo để có thể truy xuất
và điều khiển cho phù hợp
2.1.4 Ưu điểm và nhược điểm của MVC
Ưu điểm:
Giao diện người sử dụng có khả năng thay đổi dễ dàng
Các view và các controller khác nhau có thể được thay đổi để đưa ra sự lựa
Trang 18Bởi vì MVC đòi hỏi giao diện người sử dụng ứng dụng được cấu trúc thành cácđối tượng kế thừa nhau và định nghĩa các quan hệ chuẩn giữa các đối tượng này, cácphiên bản chung của các đối tượng này là có thể có được.
Chúng thông thường được gọi là các thành phần giao diện kết hợp với các view
và các controller thành một đối tượng đơn
Nhiều view khác nhau có thể hoạt động tại một thời điểm Mỗi view mô tả đồngthời và độc lập thông tin giống nhau từ một model Điều này áp dụng nhiều đối vớiGUI MVC hơn là web MVC
Các khung nhìn được đồng bộ hóa
Cơ chế truyền sự thay đổi dảm bảo rằng tất cả các khung nhìn có thể được phảnứng một cách đồng thời trạng thái hiện tại của model
Kiểm thử dễ dàng hơn
Nhược điểm:
Gia tăng sự phức tạp
Sự kết hợp chặt chẽ của view và controller đối với model
Sự thay đổi đối với giao diện model đòi hỏi sự thay đổi song song trong view
và có thể đòi hỏi sự thay đổi thêm đối với controller
Cơ chế truyền sự thay đổi có thể không hiệu quả khi model thay đổi thườngxuyên đòi hỏi nhiều thông báo thay đổi
Sự tách biệt rõ ràng là rất khó, đôi khi là không thể
2.2 Giới thiệu về công nghệ Struts
Sau khi tìm hiểu về JSP & Servlet, một câu hỏi đặt ra là : Mô hình JSP & Servlet
có đủ khả năng đáp ứng được yêu cầu của hệ thống hay không Câu trả lời là mô hìnhJSP & Servlet không, nó chỉ đáp ứng được cho một hệ thống nhỏ với các xử lý đơngiản Đối với việc xây dựng những hệ thống lớn thì mô hình JSP & Servlet sẽ khôngđược ứng dụng bởi một số nhược điểm sau:
- Kiến trúc của JSP & Servlet khá đơn giản, việc gộp các action (các hàm xử lýthông tin) là điều rất không nên Bởi khi thiết kế hệ thống, các module củachương trình cần phải được sắp xếp hợp lý, các action được chỉnh sửa màkhông ảnh hưởng tới giao diện hiển thị
- Ngoài ra, việc phân chia các thành phần hợp lý dựa theo mẫu thiết kế chuẩn củamột hệ thống được người dùng đánh giá rất cao Sau khi hoàn thiện, nếu bảnthân người dùng muốn phát triển tiếp ứng dụng của mình, họ cần có một hướngdẫn chi tiết cách sửa các thành phần trong các package Trong quá trình thiết kếmột hệ thống lớn, yêu cầu phải đòi hỏi làm việc theo nhóm, để quá trình thiết kế
Trang 19một hệ thống lớn, yêu cầu phải đòi hỏi làm việc theo nhóm, để quá trình phâncông công việc hợp lý, việc phân tách các thành phần của hệ thống là cần thiết.Nếu không, quá trình làm việc sẽ thường xuyên bị gián đoạn.
Công nghệ Struts đã thành công trong việc tối ưu các khuyết điểm vốn có của JSP
& Servlet
Struts là một framework phục vụ cho việc phát triển các ứng dụng Web trên Java
Sử dụng mẫu thiết kế MVC, struts giải quyết rất nhiều các vấn đề liên quan đến cácứng dụng Web hướng business đòi hỏi hiệu năng cao sử dụng Java servlet và JSP Ứngdụng chạy trực tiếp trên JSP/Servlet chưa đáp ứng được hết yêu cầu bảo mật vàchuyên nghiệp cho một hệ thống lớn Struts cơ bản định hình lại cách các Webprogrammer nghĩ về và cấu trúc một ứng dụng Web
Thư viện JSP
Struts đưa ra các thư viện thẻ để hỗ trợ việc lập trình View logic trong JSP Cácthư viện thẻ JSP cho phép các JSP author sử dụng các thẻ giống HTML
- Html: Sử dụng để generate các HTML form tương tác với Struts API
- Bean: Sử dụng để làm việc với các JavaBean object trong JSP
- Logic: Sử dụng để implement các logic điều kiện đơi giản trong JSP
- Nested: Sử dụng để cho phép các mức nested tùy ý
Tiles plugin
Tiles là một JSP template framework giúp thuận tiện cho việc tái sử dụng mãHTML Nó hỗ trợ việc xây dựng ứng dụng theo dang Master Page để áp dụng trêntoàn trang web
Validator plugin
Validator là một framework với khả năng thực hiện xác nhận tính hợp lệ của dữ
Trang 202.2.2 Các thành phần chính yếu và thường dùng của Struts Framework
ActionServlet
ActionServlet là một class thực hiện chức năng của controller trong việc đónnhận tất cả HTTP request, khởi tạo những đối tượng thành phần liên quan đến StrutsFramework trong khoảng thời gian nó hoạt động và xác định Action xử lý tương ứngcủa mỗi request để chuyển giao
ActionServlet phải được mapping trong tập tin web.xml bởi vì bản chất nó làmột servlet
Thông thường khi mapping, nó thường được mapping với url-pattern có dạng
Struts Config (struts-config.xml)
Là tập tin hỗ trợ cấu hình mapping và xử lý trong Struts Framework
Trong quá trình thực thi ban đầu, toàn bộ nội dung tập tin này được parsing vàđược lưu trong các JavaBeans của gói org.apche.struts.config
Trang 21ActionForm cũng có thành phần, tính chất tương tự như JavaBean đó là cácthuộc tính và định nghĩa các phương thức getXxx() và setXxx cho chúng Ngoài ra,nếu bắt validation, chúng ta phải cài đặt thêm hàng validate, để reset giá trị chúng tacài đặt thêm hàng reset.
ActionForm chỉ tồn tại hai tầm vực là request và session thay vì bốn tầm vựcnhư của JavaBean
ActionForm phải được định nghĩa trong Struts Config để thông qua đó ứngdụng sử dụng khai thác action form thông qua tên luận lý – mapping không phải tênclass cụ thể để tạo thuận lợi, linh hoạt và uyển chuyển trong ứng dụng
Action
Action là một class xử lý đón nhập request và trả về response, thực tế Action cóthể xem như là nơi xử lý chức năng của ứng dụng thông qua việc gói các hành vi –phương thức của JavaObject hay Model
Mỗi action phải được mapping trong Struts Config thông qua khái niệm path đểkhi một request được gọi, ActionServlet sẽ thông qua path định nghĩa trong StrutsConfig để xác định action tương ứng
Một trong những phương thức callback bắt buộc phải override để khiActionServlet chuyển dữ liệu request xử lý tên Action thì Action kích hoạt, đó là hàmexecute
Hàm execute có chức năng đón nhận request, đưa response, xử lý business logic
và quan trọng hơn cả là xác định request sẽ chuyển xử lý tiếp ở đối tượng nào hay kếtxuất kết quả thông qua response
Cú pháp của hàm excute có dạng:
public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception
Trong đó:
ActionForward xác định chuyển xử lý request đến một thành phầntrong ứng dụng xử lý tiếp hay xác định response đến người dùng
Trang 22ActionMapping xác định định hướng xuất tùy theo nội dung thựchiện trong Action.
Request và response là cặp đôi của HTTP mà Action đón nhậnthông tin xử lý và phản hồi
ActionForm xác định form dữ liệu kèm theo để đưa vào excute đểlấy dữ liệu trong quá trình xử lý
2.2.3 Cơ chế hoạt động của Struts
Cơ chế hoạt động của Struts
Khi user gửi yêu cầu truy xuất ứng dụng web, request được chuyển đếnActionServlet, đây là Servlet được tạo sẵn trong Framework để làm chức năng nhưController
Action Server trích xuất thành phần request nhận được để so sánh với nội dung đượcmapping trong tập tin cấu hình struts-config.xlm để tìm ra các thành phần tương ứngcần xử lý
Nếu không tìm thấy sẽ báo lỗi 404 hay lỗi tương ứng Ngược lại, nếu tìm thấy
sẽ xác định action và View tương ứng của phần xử lý View ở đây bao gồm form đóngiá trị nhập và kết xuất để trả về người dùng
Giá trị tương ứng của form nhập được lưu trữ vào FormBean, thực tế là mộtJava Object có chứa các thuộc tính và các phương thức truy cập getXxx(), setXxx().Tại đây, nếu có áp dụng validation thì dữ liệu được checking, checking thành công thì
Trang 23mới được lưu trữ vào formbean và kích hoạt chuyển dữ liệu của FormBean đến Actiontương ứng để xử lý.
Action khi đón nhận FormBean sẽ gọi thành phần xử lý tương ứng từ JavaBeanhay Object tương ứng hay kết nối dữ liệu từ Database về (nếu có) để xử lý
Sau khi xử lý hoàn tất, Action sẽ phải trả kết quả trở về Action Servlet đồngthời mapping trong struts-config.xml để xác định view kết xuaatscho người dùng dựatrên kết quả xử lý trên struts-config
Khi xác định xon, dữ liệu từ kết quả xử lý Action và FormBean sẽ được đổ vàotrang JSP kết xuất tương ứng và kết quả thành công chuyển về ActionServlet
Action Servlet response kết quả về client Quá trình xử lý hoàn tất
2.3 Struts 2
Struts 2 là một Framework được phát triển bởi sự kết hợp của Struts vàwebwork Đây là một Framework hỗ trợ thiết kế và xây dựng ứng dụng web theo môhình MVC thông qua việc cung cấp hàng loạt các thư viện và tiện ích để hỗ trợ ngườidùng phát triển ứng dụng Web theo mô hình MVC một cách nhanh chóng và dễ dàng
Struts 2 Framework hỗ trợ việc xây dựng ứng dụng Web theo mô hình MVCnhưng đơn giản hơn mô hình Struts 1 Framework 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
2.3.1 Một số đặc tính cải tiến của Struts 2 Framework
JavaBeans được sử dụng thay thế ActionForm và có phương thức chỉ định đểkích hoạt thực thi (mặc định là phương thức execute không tham số truyền và kiểu trả
về là String) nhằm tăng khả năng tái sử dụng của các object trong các ứng dụng và cácframework khác Đặc biệt, chúng dễ dàng thuận tiện cho testing từng thành phần chứcnăng và thành phần
Sử dụng cả annotation và tập tin cấu hình XML rút gọn
Sử dụng ngôn ngữ mới Object Graphic Notation Language (ONGL) thay thếcho EL của JSP
Sử dụng bộ taglib dung nhất thay cho 4-5 bộ taglib trong Struts 1 Framework vàJSTL 1.1 trong JSP
2.3.2 Khác nhau giữa Struts 2 Framework với Struts 1 Framework
Sử dụng ActionServlet làm Controller Sử dụng FilterDispatcher làm ControllerDùng HTML form kết hợp với Dùng các thuộc tính trong Action class để