Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 73 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
73
Dung lượng
1,02 MB
Nội dung
Lời nói đầu Hiện công ty hay tổ chức phát triển phần mềm Việt Nam chưa có nơi để quảng bá phần mềm mình, đồng thời tổ chức hay cá nhân chưa có nơi để đưa phần mềm lên mạng cộng đồng download tham khảo Để đáp ứng nhu cầu có ý định xây dựng mét Website Phanmemviet.com (Phần mềm Việt) cho phép nhà cung cấp sản phẩm phần mềm Việt Nam quảng bá sản phẩm phần mềm họ Đồ án tốt nghiệp: “Nghiên cứu công nghệ Struts, ứng dông xây dùng Website Phần mÒm Việt” gồm ba chương với nội dung nh sau: Chương Cơ sở lý thuyết Chương Phân tích toán Chương Xây dựng ứng dụng Em xin chân thành cảm ơn cô giáo: Th.S Bùi Thị Hòa tận tình hướng dẫn em hoàn thành đồ án tốt nghiệp Trong phạm vi thời gian, tài liệu tham khảo khả thân hạn chế, đồ án không tránh khỏi thiếu sót, em mong góp ý thầy cô bạn Hà Nội, ngày 1/5/2004 Sinh viên thực hiện: Trần Nhật Hóa Danh mục hình Lời nói đầu .1 Danh mục hình Danh mục bảng Mục lục .8 Chương Cơ sở lý thuyết .9 1.1 Giới thiệu Jakarta Struts 1.1.1 Đặt vấn đề 1.1.2 Dự án Jakarta Struts 1.1.3 Mô hình thiết kế MVC .9 Hình 1.1: Mô hình MVC 10 Sau số ưu điểm việc sử dụng mô hình MVC: 10 1.1.4 Struts – Sự cài đặt mô hình MVC: .11 Hình 1.2: Struts - cài đặt MVC 11 1.1.5 Web application 13 Hình 1.3: Cấu trúc thư mục ứng dụng Web .14 1.1.6 Tổng quan kiến trúc Java Servlet JavaServer Page 16 a Kiến trúc Java Servlet .16 Hình 1.4: Sự thực thi Java Servlet 16 Hình 1.5: Một mô hình đối tượng đơn giản Servlet Framework 17 b Các class GenericServlet HttpServlet: 17 c Vòng đời Servlet 18 d Xây dùng Servlet .20 e JavaServer Page 22 Hình 1.6: Kết ví dụ JSP 22 Hình 1.7: Các bước JSP request 23 1.1.7 Bắt đầu với Struts .23 a Tạo ứng dụng Struts: 23 c Tạo thành phần Controller 29 1.1.8 Triển khai ứng dụng Struts .32 1.1.9 ActionServlet Class 34 1.1.10 Giới thiệu Struts version 1.1 36 ActionServlet RequestProcessor 36 Thay đổi class Struts Action 37 Thay đổi web.xml struts-config.xml 37 1.2 Giới thiệu Log4j .37 1.3 Giới thiệu UML Rational Rose: 39 1.3.1 Giới thiệu UML 39 1.3.2 Giới thiệu Rational Rose .42 Rational Rose modeler: 43 Rational Rose professional: 43 Rational Rose Real – Time: 43 Rational Rose Enterprise: .43 Rational Rose DataModeler: 43 Chương 2: Phân tích toán .45 2.1 Mô tả chức năng: 45 Hình 2.1: Các tác nhân thành phần Website 45 Các chức thể qua biểu đồ User Case sau: 46 Hình 2.2: Biểu đồ User Case 46 2.2 Giới thiệu User Case: .46 2.2.1 User Case: Download .46 a Mô tả: 46 b Biểu đồ trình tự: 47 Hình 2.3: Biểu đồ trình tự User Case Download .47 2.2.2 User Case: Manage Category 47 Hình 2.4: User Case Manage Category 47 a Mô tả: 47 b Các biểu đồ trình tự: 48 Hình 2.5: Biểu đồ trình tự User Case Add New Category 48 Hình 2.6: Biểu đồ trình tự User Case Delete Category 48 Hình 2.7: Biểu đồ trình tự User Case Update Category 49 Hình 2.8: Biểu đồ trình tự User Case View Category .49 2.2.3 User Case: Manage Customer 50 Hình 2.9: User Case Manage Customer 50 a Mô tả: 50 b Các biểu đồ trình tự: 50 Hình 2.10: Biểu đồ trình tự User Case Add New Customer 50 Hình 2.11: Biểu đồ trình tự User Case Delete Customer 51 Hình 2.12: Biểu đồ trình tự User Case Update Customer .51 Hình 2.13: Biểu đồ trình tự User Case View Customer 52 2.2.4 User Case: Manage Software 52 Hình 2.14: User Case Manage Software 52 a Mô tả: 52 b Các biểu đồ trình tự: 53 Hình 2.15: Biểu đồ trình tự User Case Add New Software 53 Hình 2.16: Biểu đồ trình tự User Case Delete Software 53 Hình 2.17: Biểu đồ trình tự User Case Update Software 54 Hình 2.18: Biểu đồ trình tự User Case View Software 54 2.2.5 User Case: Order Software .55 a Mô tả: 55 b Biểu đồ trình tự: 55 Hình 2.19: Biểu đồ trình tự User Case Order Software 55 2.2.6 User Case: Register 56 a Mô tả: 56 b Biểu đồ trình tự: 56 Hình 2.20: Biểu đồ trình tự User Case Register 56 2.2.7 User Case: Search .56 a Mô tả: 56 b Biểu đồ trình tự: 57 Hình 2.21: Biểu đồ trình tự User Search 57 2.2.8 User Case: Signin .57 a Mô tả: 57 b Biểu đồ trình tự: 57 Hình 2.22: Biểu đồ trình tự User Case Signin 57 Chương 3: Xây dựng ứng dụng 59 3.1 Thiết kế sở liệu 59 Hình 3.1: Thiết kế sở liệu 59 3.2 Xây dựng thành phần Views 59 Hình 3.2: Thư mục webApplication 60 3.3 Xây dựng thành phần Controller 62 Hình 3.3: Package org.phanmemviet.download.handlers .69 3.4 Xây dựng thành phần Model: 69 Hình 3.4: Các class tương ứng phần Bean DAO 69 Hình 3.5: Gãi formbeans 70 3.5 KÕt đạt được: 70 Hình 3.6: Giao diện Website 71 Kết luận 72 Tài liệu tham khảo 72 Danh mục bảng Lời nói đầu .1 Danh mục hình Danh mục bảng Mục lục .8 Chương Cơ sở lý thuyết .9 1.1 Giới thiệu Jakarta Struts 1.1.1 Đặt vấn đề 1.1.2 Dự án Jakarta Struts 1.1.3 Mô hình thiết kế MVC .9 Hình 1.1: Mô hình MVC 10 Bảng 1.1: Ba thành phần mô hình MVC 10 Sau số ưu điểm việc sử dụng mô hình MVC: 10 1.1.4 Struts – Sự cài đặt mô hình MVC: .11 Hình 1.2: Struts - cài đặt MVC 11 1.1.5 Web application 13 Hình 1.3: Cấu trúc thư mục ứng dụng Web .14 Bảng 1.2: Cấu trúc thư mục ứng dụng Web .15 1.1.6 Tổng quan kiến trúc Java Servlet JavaServer Page 16 a Kiến trúc Java Servlet .16 Hình 1.4: Sự thực thi Java Servlet 16 Hình 1.5: Một mô hình đối tượng đơn giản Servlet Framework 17 b Các class GenericServlet HttpServlet: 17 c Vòng đời Servlet 18 d Xây dùng Servlet .20 e JavaServer Page 22 Hình 1.6: Kết ví dụ JSP 22 Hình 1.7: Các bước JSP request 23 1.1.7 Bắt đầu với Struts .23 a Tạo ứng dụng Struts: 23 Bảng 1.3: Các thuộc tính thẻ ví dụ 26 c Tạo thành phần Controller 29 Bảng 1.4: Các tham số đưa vào 31 1.1.8 Triển khai ứng dụng Struts .32 1.1.9 ActionServlet Class 34 1.1.10 Giới thiệu Struts version 1.1 36 ActionServlet RequestProcessor 36 Thay đổi class Struts Action 37 Thay đổi web.xml struts-config.xml 37 1.2 Giới thiệu Log4j .37 1.3 Giới thiệu UML Rational Rose: 39 1.3.1 Giới thiệu UML 39 1.3.2 Giới thiệu Rational Rose .42 Rational Rose modeler: 43 Rational Rose professional: 43 Rational Rose Real – Time: 43 Rational Rose Enterprise: .43 Rational Rose DataModeler: 43 Chương 2: Phân tích toán .45 2.1 Mô tả chức năng: 45 Hình 2.1: Các tác nhân thành phần Website 45 Các chức thể qua biểu đồ User Case sau: 46 Hình 2.2: Biểu đồ User Case 46 2.2 Giới thiệu User Case: .46 2.2.1 User Case: Download .46 a Mô tả: 46 b Biểu đồ trình tự: 47 Hình 2.3: Biểu đồ trình tự User Case Download .47 2.2.2 User Case: Manage Category 47 Hình 2.4: User Case Manage Category 47 a Mô tả: 47 b Các biểu đồ trình tự: 48 Hình 2.5: Biểu đồ trình tự User Case Add New Category 48 Hình 2.6: Biểu đồ trình tự User Case Delete Category 48 Hình 2.7: Biểu đồ trình tự User Case Update Category 49 Hình 2.8: Biểu đồ trình tự User Case View Category .49 2.2.3 User Case: Manage Customer 50 Hình 2.9: User Case Manage Customer 50 a Mô tả: 50 b Các biểu đồ trình tự: 50 Hình 2.10: Biểu đồ trình tự User Case Add New Customer 50 Hình 2.11: Biểu đồ trình tự User Case Delete Customer 51 Hình 2.12: Biểu đồ trình tự User Case Update Customer .51 Hình 2.13: Biểu đồ trình tự User Case View Customer 52 2.2.4 User Case: Manage Software 52 Hình 2.14: User Case Manage Software 52 a Mô tả: 52 b Các biểu đồ trình tự: 53 Hình 2.15: Biểu đồ trình tự User Case Add New Software 53 Hình 2.16: Biểu đồ trình tự User Case Delete Software 53 Hình 2.17: Biểu đồ trình tự User Case Update Software 54 Hình 2.18: Biểu đồ trình tự User Case View Software 54 2.2.5 User Case: Order Software .55 a Mô tả: 55 b Biểu đồ trình tự: 55 Hình 2.19: Biểu đồ trình tự User Case Order Software 55 2.2.6 User Case: Register 56 a Mô tả: 56 b Biểu đồ trình tự: 56 Hình 2.20: Biểu đồ trình tự User Case Register 56 2.2.7 User Case: Search .56 a Mô tả: 56 b Biểu đồ trình tự: 57 Hình 2.21: Biểu đồ trình tự User Search 57 2.2.8 User Case: Signin .57 a Mô tả: 57 b Biểu đồ trình tự: 57 Hình 2.22: Biểu đồ trình tự User Case Signin 57 Chương 3: Xây dựng ứng dụng 59 3.1 Thiết kế sở liệu 59 Hình 3.1: Thiết kế sở liệu 59 3.2 Xây dựng thành phần Views 59 Hình 3.2: Thư mục webApplication 60 Bảng 3.1: Các thuộc tính thẻ .62 3.3 Xây dựng thành phần Controller 62 Hình 3.3: Package org.phanmemviet.download.handlers .69 3.4 Xây dựng thành phần Model: 69 Hình 3.4: Các class tương ứng phần Bean DAO 69 Hình 3.5: Gãi formbeans 70 3.5 KÕt đạt được: 70 Hình 3.6: Giao diện Website 71 Kết luận 72 Tài liệu tham khảo 72 Mục lục Lời nói đầu .1 Danh mục hình Danh mục bảng Mục lục .8 Chương Cơ sở lý thuyết .9 1.1 Giới thiệu Jakarta Struts 1.1.1 Đặt vấn đề 1.1.2 Dự án Jakarta Struts 1.1.3 Mô hình thiết kế MVC .9 1.1.4 Struts – Sự cài đặt mô hình MVC: .11 1.1.5 Web application 13 1.1.6 Tổng quan kiến trúc Java Servlet JavaServer Page 16 1.1.7 Bắt đầu với Struts .23 1.1.8 Triển khai ứng dụng Struts .32 1.1.9 ActionServlet Class 34 1.1.10 Giới thiệu Struts version 1.1 36 1.2 Giới thiệu Log4j .37 1.3 Giới thiệu UML Rational Rose: 39 1.3.1 Giới thiệu UML 39 1.3.2 Giới thiệu Rational Rose .42 Chương 2: Phân tích toán .45 2.1 Mô tả chức năng: 45 2.2 Giới thiệu User Case: .46 2.2.1 User Case: Download .46 2.2.2 User Case: Manage Category 47 2.2.3 User Case: Manage Customer 50 2.2.4 User Case: Manage Software 52 2.2.5 User Case: Order Software .55 2.2.6 User Case: Register 56 2.2.7 User Case: Search .56 2.2.8 User Case: Signin .57 Chương 3: Xây dựng ứng dụng 59 3.1 Thiết kế sở liệu 59 3.2 Xây dựng thành phần Views 59 3.3 Xây dựng thành phần Controller 62 3.4 Xây dựng thành phần Model: 69 3.5 KÕt đạt được: 70 Kết luận 72 Tài liệu tham khảo 72 Chương Cơ sở lý thuyết 1.1 Giới thiệu Jakarta Struts 1.1.1 Đặt vấn đề Quả ý kiến tốt nh ta đặt giải pháp dịch vụ Web dựa sở việc thiết kế theo mô hình Model – View – Controller (MVC) Trong phần nghiên cứu Struts, công nghệ cho phép việc thiết kế ứng dụng Web dựa mô hình 1.1.2 Dự án Jakarta Struts Jakarta Struts dự án phần mềm nguồn mở bảo trợ tập đoàn phần mềm Apache, cài đặt mô hình Model – View – Controller (MVC) Dự án Struts ban đầu sáng tạo Craig McClanahan vào tháng năm 2000 từ đến tiếp tục phát triển cộng đồng phần mềm nguồn mở Đầu tiên, dự án Struts thiết kế với mục đích cung cấp khung cho việc thiết kế ứng dụng Web cách tách biệt tầng trình diễn với tầng giao dịch tầng liệu Sau bắt đầu, dự án Struts nhận hỗ trợ lớn từ phía nhà lập trình, nhanh chóng trở thành nhân tố bật cộng đồng phần mềm nguồn mở Tuy nhiên, có tranh cãi nhỏ xảy cộng đồng nhà phát triển loại hình thiết kế dự án Struts Theo tài liệu cung cấp nhà phát triển dự án Struts mẫu hình sau MVC, vài người lại cho gần với mô hình Front Controller mô tả Sun's J2EE Blueprints Program Thực tế mô hình gần với mô hình Front Controller 1.1.3 Mô hình thiết kế MVC Để hiểu Struts Framework, ta phải có kiến thức mô hình thiết kế MVC - mô hình làm sở cho Struts Mô hình MVC xuất phát từ Smalltalk, nã bao gồm thành phần là: Model, View, Controller Hình 1.1: Mô hình MVC Bảng sau mô tả thành phần đó: Thành phần Model View Mô tả Biểu diễn đối tượng liệu Model điều khiển cần đưa cho người sử dụng Phục vụ cách hiển thị hình Model Đây đối tượng thể trạng thái đối tượng liệu Xác định cách thức mà giao diện phản ứng với Controller thông tin từ phía người dùng Thành phần Controller đối tượng điều khiển Model hay đối tượng liệu Bảng 1.1: Ba thành phần mô hình MVC Sau số ưu điểm việc sử dụng mô hình MVC: - Tính tin cậy (Reliability): Tầng trình diễn tầng giao dịch tách biệt nhau, cho phép ta thay đổi cách nhìn ứng dụng mà không cần phải biên dịch lại code thành phần Model hay Controller - Tính sử dụng lại thích nghi cao (High reuse and adaptability): Mô hình MVC cho phép ta sử dụng nhiều thể loại View, tất truy nhập chung mét server-side code Nã bao gồm Web browsers (HTTP) 10 Chương 3: Xây dựng ứng dụng Như trình bày chương 1, Struts mô hình dựa mô hình thiết kế MVC, ta phải tuân theo quy trình mẫu cho việc phát triển ứng dụng Web Struts Quy trình khởi đầu việc xác định thành phần Views ứng dụng, sau kiến tạo thành phần đối tượng Controller phục vụ cho Views cuối thành phần Model thực thi 3.1 Thiết kế sở liệu Với tác nhân thành phần sử dụng, sở liệu thiết kế biểu đồ sau: USERS USER_ID: INTEGER USERNAME: VARCHAR(50) PASSWORD: VARCHAR(20) FULLNAME: VARCHAR(50) BIRTHDAY: VARCHAR(10) SEX_CODE: VARCHAR(1) ROLE: VARCHAR(2) INSERT_ID: VARCHAR(50) INSERT_DATE: DATE UPDATE_ID: VARCHAR(50) VOTE CUSTOMER_ID: INTEGER SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER FEATURES_LEVEL: INTEGER USING_LEVEL: INTEGER STABILITY_LEVEL: INTEGER INTERFACE_LEVEL: INTEGER CUSTOMER CUSTOMER_ID: INTEGER USERNAME: VARCHAR2(50) PASSWORD: VARCHAR2(50) TYPE: VARCHAR2(1) CATEGORY: VARCHAR2(1) FIRSTNAME: VARCHAR(20) LASTNAME: VARCHAR(20) E_MAIL: ADDRESS: VARCHAR(255) VARCHAR(100) ADDR_STREET: VARCHAR2(20) ADDR_CITY: VARCHAR2(20) ADDR_PROVINCE: VARCHAR2(20) ADDR_COUNTRY: VARCHAR2(20) ADDR_POSTCODE: VARCHAR2(20) PHONE: VARCHAR(15) FAX: VARCHAR2(15) WEBSITE: VARCHAR2(100) CARD_NUMBER: VARCHAR(50) CATEGORY CATEGORY_ID: INTEGER PLATFORM_ID: INTEGER SOFTWARE SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER NAME: ADD_DATE: DATE VARCHAR(100) OVERVIEW: VARCHAR(255) MAIN_DESC: BLOB EXTRA_DESC: BLOB PUBLISHER: VARCHAR(30) PUBLISHER_SITE: VARCHAR(100) UNINSTALLER: VARCHAR(1) REQUIREMENTS: VARCHAR(255) KEYWORDS: VARCHAR2(255) PROVER_ID: VARCHAR2(50) INSERT_ID: VARCHAR(50) INSERT_DATE: DATE UPDATE_ID: VARCHAR(50) UPDATE_DATE: DATE ACTIVE_FLAG: VARCHAR(1) NAME: VARCHAR(50) IMAGE_ON: VARCHAR(50) IMAGE_OFF: VARCHAR(50) DESCRIPTION: BLOB PARENT_ID: INTEGER INSERT_ID: VARCHAR(50) INSERT_DATE: DATE UPDATE_ID: VARCHAR(50) UPDATE_DATE: DATE ACTIVE_FLAG: VARCHAR(1) DISPLAY_FLAG: VARCHAR(1) CATEGORY_ID: INTEGER PLATFORM_ID: INTEGER OS_SOFTWARE SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER OS_ID: INTEGER PLATFORM PLATFORM_ID: INTEGER NAME: VARCHAR(50) ON_IMAGE: VARCHAR(100) OFF_IMAGE: VARCHAR(100) DESCRIPTION: BLOB PARENT_ID: INTEGER INSERT_ID: VARCHAR(50) INSERT_DATE: DATE UPDATE_ID: VARCHAR(50) OS OS_ID: INTEGER PLATFORM_ID: INTEGER OS_NAME: OS_DESC: BLOB VARCHAR2(100) INSERT_ID: VARCHAR2(50) INSERT_DATE: DATE UPDATE_ID: VARCHAR2(50) UPDATE_DATE: DATE ACTIVE_FLAG: VARCHAR2(1) ORDERS ORDER_ID: INTEGER CUSTOMER_ID: INTEGER LICENSE_ID: INTEGER SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER TYPE_MONEY: VARCHAR(10) QUANTITY: INTEGER ORDER_DATE: DATE ORDER_STATUS: VARCHAR(1) DOWNLOAD CUSTOMER_ID: INTEGER LICENSE_ID: INTEGER SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER DOWNLOAD_DATE: DATE LICENSE LICENSE_ID: INTEGER SOFTWARE_ID: INTEGER PLATFORM_ID: INTEGER CATEGORY_ID: INTEGER NAME: VARCHAR(100) FILE_NAME: VARCHAR(100) FILE_SIZE: INTEGER LOCATION: VARCHAR(100) PRICE: INTEGER DESCRIPTION: BLOB ADD_DATE: DATE INSERT_ID: VARCHAR(50) Hình 3.1: Thiết kế sở liệu 3.2 Xây dựng thành phần Views 59 Mỗi thành phần View ứng dụng xây dựng tương ứng với trang JSP, file JSP đặt thư mục webApplication, chúng kết hợp kí pháp JSP/HTML vài kết hợp thư viện thẻ Struts Hình 3.2: Thư mục webApplication Kí pháp JSP/HTLM tương tù nh trang Web song file JSP có số điểm khác biệt, thẻ Struts * Thẻ Struts Template Các thẻ cung cấp phương thức đơn giản để định nghĩa thành phần sử dụng chung Views Công việc thực thông qua việc sử dụng ba loại thẻ, qua cho phép định files template, là: , - Thẻ sử dụng để nhận lấy thành phần chứa đựng mét bean lưu giữ mét request Nó sử dụng để xác định template JSP thực tế tham chiếu thẻ - Thẻ sử dụng để nhận lấy chèn nội dung URI xác định Thẻ hoạt động nh cha hay nhiều thẻ , mà chúng nh tham sè để xác định 60 template JSP - Thẻ sử dụng để chứa thành phần phạm vi request Nó cha thẻ put khác Thẻ rõ nội dung chèn vào template Ví dô: Trang home.jsp Trong đoạn code này: có nhiệm vụ lấy giá trị title.homepage từ file ApplicationResources.properties, file sử dụng cho líp View để khai báo string quản lý thành phần Controller Sự liên kết thành phần View thành phần khác thực thông qua thẻ Ví dô: Trong trang login.jsp Các thuộc tính thẻ sử dụng ví dụ miêu tả bảng sau: Thuộc tính Action Mô tả Tương ứng với URL mà form submit Thuộc tính sử dụng để tìm ActionMapping file Struts-config.xml Giá trị thuộc tính sử dụng ví 61 dụ là: /provider.login.process.do Xác định khoá mà ActionForm tham chiếu đến Chúng ta sử dụng giá trị loginForm Mét ActionForm đối tượng Name sử dụng Struts để đại diện cho mét form data tương tự nh mét JavaBean Mục đích đưa liệu hai thành phần View Controller Tên đầy đủ form bean sử dụng request Trong ví dụ này, sử dụng giá trị Type org.phanmemviet.download.formbeans.LoginForm, đối tượng ActionForm chứa đựng liệu tương ứng với giá trị Method đưa vào form Xác định method HTTP request sử dụng submit form (GET|POST) Giá trị mặc định POST Bảng 3.1: Các thuộc tính thẻ Trong file Struts-config.xml đoạn code thể mối liên hệ miêu tả nh sau: 3.3 Xây dựng thành phần Controller Trong ứng dụng Struts có hai thành phần tạo nên Controller, hai class: org.apache.struts.action.ActionServlet org.apache struts.action.Action Trong hầu hết ứng dụng Struts, có cài đặt class org.apache.struts.action.ActionServlet lại có nhiều cài đặt class org.apache.struts.action.Action Thành phần org.apache.struts.action.ActionServlet có nhiệm vụ bắt request từ phía client xác định org.apache.struts.action.Action xử lý request nhận 62 * Xây dùng class PMVActionServlet Class extend từ class org.apache.struts.action.ActionServlet, nhiệm vụ class nhiệm vụ ActionServlet nh nêu có chức khởi tạo phần dataSource khai báo file Struts-config.xml: Các tham số khởi tạo cho biết: chóng ta cần tạo sè connection với giá trị tối thiểu lớn 50 thời điểm Khi sè connection sử dụng hết, yêu cầu connection phải xếp vào hàng đợi, số yêu cầu xếp vào hàng đợi có giá trị lớn 1000 Khi có request chuyển đến, method service() class khởi tạo biến static dataSource (thuộc kiểu javax.sql.DataSource) – nh có giá trị null – sau chuyển tham sè request response cho method service() super xử lý public void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{ logger.info("Starting service(HttpServletRequest, HttpServletResponse) function "); if (dataSource == null){ try{ dataSource = getDataSource(request); logger.info("Init dataSource success "); 63 } catch (Exception e){ String msg="Error occurs at method service(HttpServletRequest, HttpServletResponse) Error description:"; logger.error(msg,e); }throw new ServletException(msg+e.getMessage()); } super.service(request,response); logger.info("Service is OK "); } Các method: - getDataSource(HttpServletRequest request) - getDataSource (HttpServletRequest request, String key) xây dùng class để nhận lấy DataSource cần thiết class PMVActionServlet không extend từ class org.apache.struts.action.Action NÕu nh ta xây dựng class extend từ class org.apache.struts.action.Action không cần phải cài đặt lại hai method protected DataSource getDataSource(HttpServletRequest request){ return (getDataSource(request, Globals.DATA_SOURCE_KEY)); } protected DataSource getDataSource (HttpServletRequest request, String key){ ServletContext context=getServletContext(); ModuleConfig moduleConfig = RequestUtils.getModuleConfig(request,context); DataSource objDataSource = ((DataSource) context.getAttribute(key + moduleConfig.getPrefix())); logger.info("First getting the DatSource "); if (objDataSource == null) logger.info("No object from context:" + key); else logger.info("The DatSource is OK "); 64 return objDataSource; } * Xây dùng class org.phanmemviet.commons.ConnectionPools Class ConnectionPools có chức lấy Connection với sở liệu từ phần dataSource khởi tạo thông qua class PMVActionServlet Method getConnection xây dựng phục vụ cho việc kết nối với sở liệu public static Connection getConnection(){ try { Connection conn = null; javax.sql.DataSource dataSource = PMVActionServlet.getDataSource(); conn= dataSource.getConnection(); logger.info("Get Connection success "); return conn; }catch(Exception e) { String msg = "Error: Failed when getting connection from datasource: "; logger.info(msg+e.toString()); return null; } } Các chức class thực thi việc đóng lại Connection hay Statement ResutlSet trình kết nối đến sở liệu public static void closeConnection(Connection con){ try { if(con!=null) { con.close(); } } catch(SQLException e){ //logger.error("error close connection:" + e.getMessage()); } } 65 public static void closeStatement(Statement stmt){ try { if(stmt!=null) { stmt.close(); } } catch(SQLException e) { } } public static void closeStatement(PreparedStatement pre){ try { if(pre!=null) { pre.close(); } } catch(SQLException e) { } } public static void closeResultSet(ResultSet re){ try { if(re!=null) { re.close(); } } catch(SQLException e) { } } * Xây dùng package org.phanmemviet.download.handlers Gãi org.phanmemviet.download.handlers xây dựng bao gồm class extend từ class org.apache.struts.action.Action Đây phần xử lý 66 cho request đến từ phía client Ví dô: class HomeAction: public final class HomeAction extends Action { static Logger logger = Logger.getLogger(HomeAction.class.getClass()); public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { /** * Processing * Get list of plat form * Get list of all categories and subcategories * Get top 15 of new realeases for all platforms * Get top 15 of most popular of downloads * Put them into request attributes */ logger.info("Start processing Home action "); ActionForward forwardObj = null; PlatformDAO platformDAO = new PlatformDAO(); CategoryDAO categoryDAO = new CategoryDAO(); SoftwareDAO softwareDAO = new SoftwareDAO(); Software software = null; java.util.Vector platforms = new java.util.Vector(); java.util.Vector top15Downloads = new java.util.Vector(); java.util.Vector top15Realeases = new java.util.Vector(); try { //1 Get list of platforms logger.info("Get collection of platforms"); platforms = platformDAO.loadPlatforms(); //2 Get collection of categories logger.info("Get collection of categories"); Commons.getAllCategories(platforms, categoryDAO); //3 Get top of software(the newest,most popular,software) 67 logger.info("Get the top of software"); software = softwareDAO.loadTopSoftware(); //4 Get top 15 of new realease logger.info("Get top 15 of new realeases"); top15Realeases = softwareDAO.loadTopsOfRealeases(15); //5 Get top 15 of most popular downloads logger.info("Get top 15 of most popular downloads"); top15Downloads = softwareDAO.loadTopsOfDownloads(15); //6 Put them into request attribites request.setAttribute(Constants.SOFTWARE_TOP, software); request.setAttribute(Constants.PLATFORMS_KEY, platforms); request.setAttribute(Constants.DOWNLOADS_TOP15,top15Downloads); request.setAttribute(Constants.REALEASES_TOP15,top15Realeases); request.setAttribute("searchLevels", Commons.buildSearchLevels(null, null, null)); forwardObj = mapping.findForward("success"); } catch(Exception e) { forwardObj = mapping.findForward("failure"); String msgError = "Error occurs at method execute(ActionMapping, ActionForm, HttpServletRequest, HttpServletResponse) Description: "; logger.error(msgError, e); } finally { top15Realeases = null; top15Downloads = null; platforms = null; softwareDAO = null; categoryDAO = null; platformDAO = null; } return forwardObj; } } 68 Hình 3.3: Package org.phanmemviet.download.handlers Các method perform() – phiên Struts 1.0, class extend từ class org.apache.struts.action.Action thay method execute() phiên Struts 1.1 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) 3.4 Xây dựng thành phần Model: Hình 3.4: Các class tương ứng phần Bean DAO 69 Ta xây dựng thành phần Bean nhằm mục đích biểu diễn đối tượng liệu Đây thành phần điều khiển thông tin cần đưa cho người sử dụng Song song với việc xây dựng thành phần Bean ta xây dựng đối tượng DAO (Data Access Object) Các đối tượng thực phần tương tác với sở liệu, chúng sử dụng Bean để lưu trữ liệu khoảng thời gian xử lý Các chức DAO là: inseting, deleting, updating loading * Xây dùng package formbeans: Package chứa đựng class extend từ class ActionForm Mét ActionForm đối tượng sử dụng Struts để biểu diễn form liệu tương tự nh mét JavaBean Mục đích chuyển liệu thành phần View Controller Hình 3.5: Gãi formbeans 3.5 KÕt đạt được: Nhằm mục đích thuận tiện cho người sử dụng, phần giao diện Website cung cấp thông tin cho người sử dụng sản phẩm phần mềm nhất, sản phẩm phần mềm người dùng bình chọn tốt 70 (thông qua chức vote) sản phẩm phần mềm download nhiều Phần menu chia thành menu con, bao gồm: Home, Windows, Linux, Unix Qua giúp người sử dụng thuận tiện việc lựa chọn sản phẩm phần mềm sử dụng hệ điều hành phổ biến Ngoài ra, Provider dễ dàng quảng bá phần mềm cách lựa chọn chức quảng bá giao diện Website Sau giao diện Website xây dựng: Hình 3.6: Giao diện Website 71 Kết luận Việc xây dựng hoàn chỉnh Website cho phép công ty hay tổ chức phần mềm quảng bá phần mềm có khả đáp ứng đầy đủ yêu cầu đặt công việc đòi hỏi phải nhiều thời gian công sức Trong phạm vi thời gian thực đề tài tốt nghiệp, cố gắng nghiên cứu công nghệ, thiết kế xây dựng chức cần thiết hệ thống Hiện Website xây dựng phép nhà phát triển quảng bá phần mềm cho phép cộng đồng download sử dụng, tham khảo cách miễn phí Trong thời gian tới, phát triển Website theo hướng thương mại hóa, công việc cho phép công ty phần mềm quảng bá sản phẩm mình, đồng thời người sử dụng đăng nhập vào Website tiếp nhận thông tin thực mua bán sản phầm phần mềm theo hướng thương mại điện tử Để thực theo phương hướng này, công việc nh: nghiên cứu giao dịch giao thức bảo mật điều cần thiết Tài liệu tham khảo 72 Mastering Jakarta Struts Programming Jakarta Struts Jakarta-struts-1.1 Jakarta-log4j-1.2.8 Lập trình ứng dụng Web với JSP/ Servlet 73 [...]... Cấu trúc thư mục của một ứng dụng Web Tất cả các ứng dụng Web được đóng gói trong một cấu trúc thư mục chung, và đó cũng là phần chứa đựng các thành phần của một ứng dụng Web Bước đầu tiên trong công việc tạo lập một ứng dụng Web đó là tạo ra được cấu trúc thư mục này Bảng sau đây mô tả một ví dụ về một ứng dụng Web có tên là wileyapp Thư mục Chứa đựng Đây là thư mục gốc của ứng dụng /wileyapp Web Tất... thông tin liên quan đến ứng dụng Đây là nơi đặt các mô tả của việc triển khai ứng dụng Web Thư mục này là nơi đặt các servlet và các utility classes Thư mục này chứa đụng các file nén 14 của Java (Java Archive) mà ứng dụng Web cần sử dụng Bảng 1.2: Cấu trúc thư mục một ứng dụng Web * Mô tả sự triển khai của một ứng dụng Web Mô tả việc triển khai là một phần quan trọng của ứng dụng Web Sự mô tả này là... chứa tất cả thuộc tính được yêu cầu để sử dụng instance của LookupAction, bao gồm cả các thành phần đặc trưng cho các trang Views có thể biểu diễn kết quả của LookupAction 1.1.8 Triển khai ứng dụng Struts Bây giê chúng ta đã có những thành phần cần thiết của một ứng dụng Struts Phần tiếp theo chóng ta cần phải cho ứng dụng Web biết đến các thành phần đó Để làm việc này chúng ta cần phải có... JSP này Những thẻ này được định nghĩa bởi Struts Framework, chúng thể hiện sự kết hợp giữa thành phần View với thành phần Controller của ứng dụng - Thành phần Controller: Thành phần Controller của Struts Framework được xem là xương sống của tất cả các ứng dụng Web sử dụng Struts Nó được cài đặt bởi sử dụng một Servlet có tên là: apache.struts.action.ActionServlet Servlet này có nhiệm vụ nhận tất cả... được sử dụng bởi ActionServlet để xác định thành phần View sẽ hiển thị kết quả ActionServlet tương tự nh một nhà máy tạo nên các đối tượng Action để thực thi tầng giao dịch của ứng dụng Thành phần Controller của Struts Framework là thành phần quan trọng nhất của Struts MVC Các thành phần Controller và View sẽ được giới thiệu trong phần tiếp theo của chương này 1.1.5 Web application Một ứng dụng Web... 23 1 Xác định và kiến tạo các thành phần Views, trong sự liên hệ với mục đích của chúng sẽ thể hiện được giao tiếp với người dùng của ứng dụng Thêm tất cả các ActionForms sử dụng bởi các thành phần Views được kiến tạo đó trong file struts-config.xml 2 Tạo các thành phần Controller cho ứng dụng 3 Xác định mối quan hệ tồn tại giữa các thành phần Views và các thành phần Controllers (trong file strust-config.xml)... HTML, các classes Tất cả các ứng dụng Struts đều được đóng gói bởi sử dụng định dạng Java Web Sau đây là danh sách các thành phần chung nhất có thể được đóng gói trong một ứng dụng Web - Servlets - Java Server Pages (JSPs) - Những thư viện custom tag JSP - Các class hữu Ých và các class của ứng dụng - Các tài liệu tĩnh bao gồm HTLM, ảnh, JavaScript,… 13 - Các thông tin mô tả ứng dụng Web * Cấu trúc thư... request này c Tạo thành phần Controller Trong một ứng dụng Struts, hai thành phần tạo nên Controller đó là các class: org.apache.struts.action.ActionServlet và org.apache struts.action.Action Trong hầu hết các ứng dụng Struts, chỉ có một sự cài đặt của class org.apache.struts.action.ActionServlet nhưng lại có thể có nhiều sự cài đặt của class org.apache.struts.action.Action Thành phần org.apache.struts.action.ActionServlet... Struts a Tạo một ứng dụng trên nền Struts: Bởi vì Struts được mô hình dựa trên mô hình thiết kế MVC, cho nên ta phải tuân theo quy trình mẫu cho việc phát triển của bất cứ ứng dụng Web nào trên nền của Struts Quy trình này khởi đầu bởi việc xác định các thành phần Views của ứng dụng, sau đó là kiến tạo các thành phần đối tượng Controller phục vụ cho các Views này và cuối cùng là các thành phần Model sẽ... ActionServlet sử dụng khóa này để xác định nơi cần trả kết quả để hiển thị 5 Request được hoàn thành khi ActionServlet trả lời bằng cách gửi request tới thành phần View, được kết nối với khóa trả về, và thành phần View sẽ hiển thị kết quả của hành động đó Các thành phần: - Thành phần Model: Struts Framework không cung cấp bất cứ thành phần Model đặc trưng nào - Thành phần View: Mỗi thành phần View trong