Rất nhiều dự ánlớn đã ra đời từ cộng đồng mã nguồn mở, có thể kể đến một số framework nổi tiếngnhư : Struts, Hibernate, Spring, JSF … Ở Việt Nam, phát triển các ứng dụng Web là hướng đi
Trang 1KHOA CÔNG NGHỆ THÔNG TIN
Trang 2KHOA CÔNG NGHỆ THÔNG TIN
Giáo viên hướng dẫn: ThS Trương Trọng Cần
Nghệ An, tháng 12 năm 2012
Trang 3Để 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 Vinh nói chung và các thầy cô trong khoa Công nghệ Thông tin 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 thầy Trương Trọng Cần ngườ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 FPT Đà Nẵng , các anh chị trong công ty: Anh Nguyễn Tấn Huy, Anh Liêm… đã 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
Trang 4Ngày nay, ngành công nghệ thông tin đang phát triển như vũ bão và đi vào mọimặ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ànhcô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 naythì 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ể đếnmộ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 laovớ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ự ánlớn đã ra đời từ cộng đồng mã nguồn mở, có thể kể đến một số framework nổi tiếngnhư : 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ẹncho 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ềmnó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 trong xây dựng ứng dụng Web Trực tuyến” 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
Trang 5
Chương 1 CÔNG NGHỆ STRUTS1 11.1 Tổng quan ngôn ngữ java 1
1.1.1 Lịch sử phát triển của Java 1
1.1.2 Mục đích của Java: 1
1.1.3 Đặc điểm của Java : 1
1.1.4 Các loại chương trình trong java : 2
1.1.5 Các thành phần của Java Environment2
1.1.6 Các loại ứng dụng java : 3
1.2 Môi trường phát triển ứng dụng eclipse 3
1.2.1 Giới thiệu Eclipse, download và cài đặt:3
Trang 61.5.1 Khái niệm: 15
1.5.2 Struts thực thi mô hình MVC 16
1.5.3 Cấu trúc của Struts bao gồm: 17
1.5.4 Các thành phần chính củamột ứng dụng Struts: 18
1.5.5 Các file cấu hình cần thiết : 18
1.5.6 Hoạt động của struct1 19
1.5.7 Ưu điểmcủa Struts 26
1.5.8 Nhược điểmcủa Struts : 27
Chương 2 DEMO WEBSITE ẨM THỰC 29
2.1 Giới thiệu 29
2.2 Tài liệu đặc tả yêu cầu – Website Ẩm Thực Nghệ An 29
2.2.1 Mô tả chung về hệ thống 29 2.2.2 Thiết kế cơ sở dữ liệu 30 2.2.3 Các màn hình giao diện người dùng. 35 KẾT LUẬN 49 i Kết quả đạt được 49
ii Hạn chế 49
iii Hướng phát triển 49
TÀI LIỆU THAM KHẢO 50
Trang 7Chương 1 CÔNG NGHỆ STRUTS1
1.1 Tổng quan ngôn ngữ java
1.1.1.Lịch sử phát triển của Java
• Ra đời tại Sun Microsystems bởiJames Gosling
• 1991:Version đầu tiên với tên “Oak”
• 1995:Tên chính thức là Java
1.1.2.Mục đích của Java:
• Dùng để phát triển ứng dụng cho các thiết bị điện tử “thông minh”
• Tạo các trang web có nội dung động (web applet)
• Hiện nay, Java được sử dụng để phát triển nhiều loại ứng dụng khác nhau: cơ sở dữ liệu, mạng, Internet, viễnthông
1.1.3 Đặc điểm của Java :
• Giống C/C++
• Đơn giản
• Object-oriented, hướng đối tượng
• Platform-independent, không phụ thuộc nền
Trang 8Chương trình dịch cổ điển
Chương trình
Trang 9• J2EE: Java 2 Enterprise Edition (Dùng để phát triển các ứng dụng lớn)
• J2ME: Java 2 Micro Edition (Dụng để phát triển các ứng dụng trên đtdd)
1.2 Môi trường phát triển ứng dụng eclipse
1.2.1.Giới thiệu Eclipse, download và cài đặt:
Eclipse là một nền tảng phát triển mã nguồn mở dựa trên Java, được cácnhà phát triển sử dụng để xây dựng những ứng dụng J2EE, sử dụng Eclipse nhà pháttriển có thể tích hợp với nhiều công cụ hỗ trợ khác để có được một bộ công cụ hòanchỉnh mà không cần dùng đến phần mềm riêng nào khác Eclipse SDK bao gồm 3phần chính: Platform, Java DevelopmentToolkit (JDT), Plug-in DevelopmentEnvironment (PDE) VớiJDT, Eclipse được xem như là một môi trường hỗ trợ pháttriển Java mạnh mẽ PDE hỗ trợ việc mở rộng Eclipse, tích hợp các Plug-in vàoEclipse Platform Eclipse Platform là nền tảng của toàn bộ phần mềm Eclipse, mụcđích của nó là cung cấp những dịch vụ cần thiết cho việc tích hợp những bộ công cụphát triển phần mếm khách dưới dạng Plugin, bản thân JDT cũng có thể được coi như
Trang 10là một Plug-in làm cho Eclipse như là một Java IDE (Integrated DevelopmentEnviroment).
Download, cài đặt: http://www.eclipse.org/downloads/
1.2.2 Kiến trúc Eclipse:
1.2.3.ThePlatformruntime:
• Công việc chính của Platform runtime là phát xem plug-in nào đang cótrong thư mục plug-in của Eclipse Mỗi Plug-in đều có 1 tập tinManifest liệt kê những kết nối mà plug-in cần Pug-in chỉ được tải vàoEclipse mỗi khi thực sự cần thiết để giảm lượng tài nguyên yêu cầu vàthời gian khởi tạo
1.2.4 The workspace :
• Workspace chịu trách nhiệm quản lý tài nguyên người dùng được tồchức dưới dạng Project Mỗi Project là một thư mục con trong thư mụcWorkspace
• Workspace bảo quản cấp thấp lịch sử những sự thay đổi tài nguyên,tránh thất thoát tài nguyên người dùng
• Workspace đồng thời chịu trách nhiệm thông bào những công cụ cấnthiết choviệc thay đổi tài nguyên
Trang 111.2.5 The Workbench :
• Work bench là giao diện đồ họa người dùng của Eclipse, gồm cóStandard WidgetToolkit(SWT) và JFace Eclipse không hòan toàn bắtbuộc phải sử dụng SWT hay Jface để lập trình giao diện, bạn vẫn có thể
sử dụng AWT hay SWING của Java thông qua việc cài đặt các ins
1.2.8.JFace:
JFace là tookit để xây dựng giao diện người dùng cấp cao, JFace là tầngtrên cùng của SWT, cung cấp các lớp thuộc mô hình MVC để phát triểncác ứng dụng đồ họa dễ dàng hơn
Trang 12• Cung cấp hệ thống tài liệu mởr ộng, có thể là định dạng HTML hay XML
Cửa sổ chính của eclipse
Trang 131.3 Giới thiệu j2ee và các thành phần
(Applet, JavaBean, JSP, Servlet, EJB)
Là 1 thành phần rất quan trọng và rộng lớn trong lĩnh vực java, J2EE được dù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ĩnh vực được chú trọng và ứng dụng nhiều nhất của java trong thực tế
Sơ đồ các thành phần trong J2EE
Trang 141.3.1 Applet :
• Là một chương trình Java chạy trên web browser
• Tất cả các applets phải là lớp con của lớp Applet hoặc JApplet
• Để tạo ra một applet, ta phải import:
1.1 Sự khác nhau giữa Applet và Application
• Applications chạy bằng Javainterpreter, còn applets chạy trên browser có hổ trợ Java, hoặc dùng ‘AppletViewer’ có trong JDK
Trang 15• Việc thực hiện một applications bắt đầu trong hàm ‘main()’ Còn applet thì không cần hàm main.
• Applications dùng ‘System.out.println()’đểxuất,trongkhiappletsdùng hàm
‘drawString()’đểhiểnthị
1.2 Các hạn chế về Security trên Applets
• Không thể đọc hoặc viết các file trên hệ thống file của user
• Không thể trao đổi với một site trên
• Không thể chạy được các chương trình trên hệ thống hiện hành
• Không thể tải bất kỳ chương trình được lưu trữ trên hệ thống của user
1.3.2 2 JavaBean:
JavaBeans là software component model Nó có thể tương tác với các đốitượng của các software khác và có thể được dùng lại Các software components mà cóthể dùng lại này được gọi là ‘beans’ Components được dùng trong distributedenvironments JavaBeans được thiết kế để dùng khi cần Java thường xây dựng cácsoftware thông qua các JavaBeans Khi mà JavaBeans được tạo ra, thì chúng có thểđược dùng như một thư viện không phụ thuộc nền
Các qui tắc để tạo ra một Beans
Trang 16 No thừa kế tất cả các ưu điểm cũng như các đặc tính của ngôn ngữ Java.
JSP có thể dùng trên tất cả các platforms
CáchlàmviệccủaJSP
Cácbướcxử lýcủa1 request
Cấu trúc của trang JSP:
Các thẻ lệnh HTML.
Mã lệnh Java Có 3 thành phần chính:
Trang 17Servlets đươc dùng để mở rộng các chức năng của Java-enabled server
Dùng để thay thế cho CGI Scripts
Trươc servlets, chúng ta có các công nghệ để tạo ra web applications:
Common Gateway Interface(CGI)
Fast CGI
ASP
Server-side Java Script
Trang 18Chạy trong Java Virtual Machine
Không bắt buộc Web browser phải hỗ trợ Java
Đặc điểm Servels:
Không phụ thuộc nền
Làm việc trên nhiều web servers
Là công nghệ đầu tiên của java để tạo ra web Application
Không nằm trong core Java API mà nằm trong hai package
javax.servlet và javax.servlet.http của Java Servlet Development Kit
(JSDK)
Kiến trúc Servels
Vòng đời của 1 Servels
Trang 19Cấu trúccủa1 Servlet:
Là lớp con của lớp HttpServlet Override phương thức doGet và doPost nếu cần Hai phương thức này đều nhận vào hai tham số
HttpServletRequest và HttpServletResponse Hai phương thức này đều ném ra IOException và ServletException
So sánh Servlet và JSP :
Trang 201.4 KiếntrúcMVC(Model_View_Controller)
1.4.1.Thế nào là mô hình MVC:
Mô hình MVC (Model - View - Controller) là một kiến trúc phần mềm hay mô hình thiết kế được sử dụng trong kỹ thuật phần mềm Nó giúp cho các developer
tách ứng dụng của họ ra 3 thành phần khác nhau Model, View và Controller
Mỗi thành phần có một nhiệm vụ riêng biệt và độc lập với các thành phần khác
1.4.2.Các thành phần trong MVC:
Model(Tầng dữ liệu):Đây là thành phần chứa tất cả các nghiệp vụ logic, phương thức
xử lý, truy xuất database, đối tượng mô tả dữ liệu như các Class, hàm xử lý
View(Tầng giao diện):Đảm nhận việc hiển thị thông tin, tương tác với người dùng,
nơi chứa tất cả các đối tượng GUI như textbox, images Hiểu một cách đơn giản,
nó là tập hợp các form hoặc các file HTML
Trang 21Controller(Tầngđiềukhiển):Giữ nhiệm vụ nhận điều hướng các yêu cầu từ người
dùng và gọi đúng những phương thức xử lý chúng Chẳng hạn thành phần này sẽnhận request từ url và form để thao tác trực tiếp với Model
1.4.3.Hoạt động của MVC
Nhìn lại sơ đồ phía trên, ta thấy có mũi tên nét liền và những mũi tên nét đứt.Những mũi tên nét đứt được hình thành trên quan điểm của người dùng mà khôngphải là của những nhà thiết kế phần mềm thực sự Do đó chúng ta chỉ quan tâmđến những mũi tên còn lại
Đây là một cách đơn giản để mô tả lại luồng sự kiện được xử lư trong MVC:
- User tương tác với View, bằng cách click vào button, user gửi yêu cầu đi
- Controller nhận và điều hướng chúng đến đúng phương thức xử lý ở Model
- Model nhận thông tin và thực thi các yêu cầu
- Khi Model hoàn tất việc xử lý, View sẽ nhận kết quả từ Model và hiển thị lạicho người dùng
1.4.4.Ưu và nhượcđiểm của MVC
Ưu điểm:
Thể hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế Do được chiathành các thành phần độc lập nên giúp phát triển ứng dụng nhanh, đơn giản, dễnâng cấp, bảo trì
Trang 22• Struts là một tập các Utilities: Struts cung cấp các lớp tiện ích để điều khiểnhầu hết các tác vụ trong việc phát triển các ứng dụng Web.
• Struts là một tập thư viện các thẻ JSP tùy chọn (CustomJSPTag): Struts cungcấp các thư viện thẻ tùy chọn cho việc thể hiện các thuộc tính của bean, quản
lý các HTML forms, lặp lại các kiểu cấu trúc dữ liệu, và đưa ra các HTML cóđiều kiện
1.5.2.Struts thực thi mô hình MVC
Mô hình Struts Framework thực thi mô hình MVC bằng cách sử dụng tập hợp các thẻ JSP, các thẻ tùy chọn JSP (customJSP tag), và các Javaservlet Dưới đây chúng ta sẽ mô tả ngắn gọn cách mà StrutsFramework ánh xạ đến mỗi thành phần trong mô hình MVC
Hình trên mô tả tiến trình mà hầu hết các ứng dụng Struts phải tuân theo
Tiến trình này có thể được chia thành 5 bước căn bản:
1 Request được tạo ra từ một View
2 Request được tiếp nhận bởi một ActionServlet (đóng vai trò là một Controller), và ActionServlet này sẽ lookup URI cần thiết trong file XML và xác định tên của lớp Action sẽ thực hiện các bussiness logic cần thiết
Trang 233 Lớp Action thực hiện các logic của nó trong các thành phần Model kết hợpvới ứng dụng.
4 Khi Action hoàn tất tiến trình sử lý của nó, nó sẽ trả điều khiển về cho ActionServlet Là một phần của thành phần trả về, lớp Action cung cấp một khóa xác định kết quả quả của tiến trình sử lý đó ActionServlet sử dụng khóa này để xác định kết quả sẽ được forward đến đâu để trình diễn ra ngoài
5 Yêu cầu được hoàn tất khi ActionServlet đáp ứng nó bằng cách forward yêu cầu đó đến một View được liên kết đến để trả về khóa đã đề cập ở trên bước 4, và View này sẽ trinh diễn kết quả của Action
Cấu trúc của Struts1.0
1.5.3.Cấu trúc của Struts bao gồm:
• Một hoặc nhiều Action, mỗi action trong trang web sẽ ánh xạ chính xác đếnmột thành phần <action> được định nghĩa trong file struts-config.xml Actionđược triệu gọi bởi người dùng từ một trang HTML hoặc JSP thông qua mộtliên kết hay thông qua thuộc tính action trong thẻ <form>
• Một thành phần <action> sẽ định nghĩa một lớp ActionForm, trong một sốtrường hợp, nó sẽ được sử dụng để validate các dữ liệu trong form đượcsubmit bởi người sử dụng Nó cũng định nghĩa lớp Action nào sẽ được sửdụng để xử lý các yêu cầu từ phía người dùng
Trang 24• Một lớp ActionForm có thể sử dụng một hoặc nhiều forward được định nghĩatrong thẻ <action> đề nói cho một ActionServlet trả về các response tươngứng với các request của người dùng Chúng ta có thể định nghĩa nhiều forwardtrong thẻ <action-mapping>.
1.5.4.Các thành phần chính củamột ứng dụng Struts:
• ActionServlet:đóng vai trònhư là một controller trong mô hình MVC, hay nóicách khác Action Servlet là sự thực thi controller của Struts đối với mô hìnhMVC ActionServlet lấy về các request từ phía người dùng và ánh xạ chúngđến thành phần <action> trong file struts-config.xml
• Action: định nghĩa một tác vụ có thể được gọi bởi người dùng Nó cũng địnhnghĩa lớp sẽ sử lý các request từ phía người dùng và trang JSP sẽ hiển thị kếtquả về cho người sử dụng
• Lớp Action: chứa toàn bộ những sử lý cho các yêu cầu của người dùng
• ActionForm: đi kèm với thẻ <action> trong file struts-config.xml, nó quản lýtoàn bộ các dữ liệu được submit lên từ phía người dùng và có thể thực hiệnvalidate các dữ liệu đó
• Trang JSP :được sử dụng để trả về trang HTML để thể hiện kết quả đã được sử
lý cho người dùng
1.5.5.Các file cấu hình cần thiết :
• web.xml: file này chứa toàn bộ các cấu hình của ActionServlet, các sự ánh xạ của các yêu cầu từ phía người dùng đến ActionServlet, và tất các StrutsTag LibraryDefinitions (TLDs)
• struts-config.xml: file này chứa tất cả các thông tin cấu hình cho một ứng dựng xây dựng dựa trên Struts
• Application Resources.properties: file này trung tâm chứa các nội dung tĩnh được sử dụng trong toàn bộ ứng dụng Struts Nó cho phép các nhà phát triển
dễ dàng thay đổi nội dung các text và các nội dung dùng chung sử dụng trong ứng dụng
Các thư viện thẻ Struts để xây dựng các thành phần trình diễn trong một ứng dụng:
+<templete>: cung cấp cho nhà phát triển ứng dụng một tập các thẻ JSP để
Trang 25Chia nhỏ giao diện người dùng thành các thành phần có thể dễ dàng tháo rắp.+<bean>: cung cấp cho nhà phát triển ứng dụng một tập các thẻ JSP để quản lý đầu ra từ một JavaBean.
+<logic>: có thể được sử dụng để ứng dụng các điều kiện logic trong một trang JSP
+<html>: có thể sử dụng để tạo ra các thành phần form
1.5.6.Hoạt động của struct1
Controller trung tâm điều hành luồng ứng dụng, ủy quyền cho các bộ xử lý thích hợp gọi là Action
Action Handlers có thể sử dụng các model
components
Model đóng gói trạng thái hoặc logic nghiệp vụ
Điều khiển được chuyển tiếp (forward) cho Controller với View phù hợp
Việc forward có thể được xác định bằng việc tra cứu từ tập các mappings trong file cấu hình, cho phép tăng độ linh động gữa tầng View và Model
3 thành phần chính trong Struts
Servlet controller (Controller)
Java Server Pages hoặc bất kỳ công nghệ hiển thị nào khác (View)
Application Business Logic ở dạng bất kỳ phù hợpvới ứng dụng (Model)Struts tập trung chủ yếu vào phần Controller
Struts có sự độc lập giữa Model & View
Trang 26 Struts có thể sử dụng bất kỳ công nghệ Model &View nào
File cấu hình chứa các action mappings
Ánh xạ URL với các Action
Controller sử dụng các mapping này để trả về HTTP requests cho Action nào của ứng dụng
Xác định forwarding/navigation
Mapping phải mô tả được
Đường dẫn của yêu cầu: request path
Action xử lý request nhận được
1.5.6.1 kiến trúc tầng controller trong struct1
Nhiệm vụ
Giống như 1 switch trong kiến trúc MVC
Tất cả các request phải đi qua controller
Chịu trách nhiệm điều khiển luồng cho các xử lý request (actionmapping)
Đọc file cấu hình để xác định luồng điều khiển
Thành phần
Trang 27 ActionServlet (Struts cung cấp)
Thực hiện vai trò của Controller
Xử lý các user requests
Xác định xem user cần gì, căn cứ ào request nhận được
Lấy dữ liệu từ model (nếu cần thiết), và Lấy ra view phù hợp trả về chongười dùng Ủy nhiệm hầu hết những công việc này cho lớp Action Chịu trách nhiệmkhởi tạo và dọn dẹp tài nguyên loads các cấu hình ứng dụng trong web.xml
Duyệt lần lượt các goes through an enumeration of all init-param elements,looking for those elements who's name starts with config/ for modules
Để truy cập vào module foo, sử dụng URL như:
http://localhost:8080/myApp/foo/someAction.do
RequestProcessor (Struts 1.1) (Struts cung cấp Cho mỗi module) processPath
Xác định đường dẫn (path) được request Sau đó sẽ được sử dụng để lấy vềmột ActionMapping processLocale
Chọn một locale (nếu chưa chọn locale nào) và đặt nó vào trong request.processContent
Thiết lập content type mặc định (tùy chọn cách encoding) cho tất cả cácresponse nếu được yêu cầu processMapping
Xác định ActionMapping ứng với đường dẫn yêu cầu processRoles
Nếu mapping được kết hợp với một role, cần đảm bảo user có role tươngứng đó Nếu không, tạo ra một error và dừng xử lý request.processActionForm
Tạo một thực thể ActionForm (nếu cần thiết) kết hợp với mapping trên (nếu có), với tầm vực (scope) phù hợp processPopulate
Gắn ActionForm với request, nếu có processValidate
Thực hiện validate (nếu được yêu cầu) trên ActionForm gắn với request này(nếu có) processForward
Nếu mapping biểu diễn một forward, forward đến đường dẫn được chỉ địnhtrong mapping processInclude
Nếu mapping biểu diễn một include, include kết quả của việc gọi đến đườngdẫn (path) trong request này processActionCreate
Tạo một thực thể của lớp được đặc tả trong ActionMapping đang xét (nếu cần) processActionPerform
Là lúc mà phương thức perform () hoặc execute () sẽ được gọi processForwardConfig