Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 42 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
42
Dung lượng
1,48 MB
Nội dung
Lời cảm ơn Trước hết chúng em xin tỏ lòng biết ơn sâu sắc đến Thạc sĩ Nguyễn Thái Cường, thầy tận tình hướng dẫn, giúp đỡ chúng em nhiều suốt trình thực tập Nếu khơng có lời hướng dẫn, dạy bảo thầy chúng em nghĩ thu hoạch em khó hồn thiện Chúng em chân thành cảm ơn quý thầy, cô Khoa Công nghệ thông tin Trường Đại học công nghiệp Hà Nội tận tình truyền đạt kiến thức bốn năm học tập Với vốn kiến thức tiếp thu q trình học khơng tảng cho q trình nghiên cứu khóa luận mà hành trang để chúng em bước vào đời cách vững tự tin Với vốn kiến thức hạn hẹp thời gian thực có hạn nên khơng tránh khỏi thiếu sót Rất mong nhận ý kiến đong gop q thầy hành trang quý giá giúp chúng em hoàn thiện kiến thức sau Xin chân thành cảm ơn! Mục lục Mục lục hình ảnh Chương : Tổng quan 1.1 Lý chọn đề tài Trong khảo sát với khoảng 8.000 dự án phần mềm, Standish Group cho biết có có 16.2% dự án hồn thành hạn nằm giới hạn ngân sách, đáp ứng đầy đủ tất tính cam kết ban đầu Và 83.8% dự án thất bại không đáp ứng yêu cầu ban đầu, có tới 52.7% dự án hồn thành vào hoạt động khơng hồn thành hạn bội chi, thêm không đáp ứng đầy đủ tính đặt tính thiết kế ban đầu Bên cạnh chi phí cho việc bảo trì mở rộng hệ thống lớn nhiều lần so với pha khác quy trình phát triển hệ thống 3 15 67 Xác định yêu cầu Đặt tả Thiết kế Lập trình Kiểm thử Bảo trì Hình Chi phí cho pha phát triển hệ thống Những rủi ro dẫn đến hủy đình trệ dự án phần mềm tăng nhanh tỉ lệ thuận với việc gia tăng kích thước dự án; 25% với dự án > 100.000 LOC (line of code), 50% với dự án > 500.000 LOC 65% với dự án > 1.000.000 LOC Việc phát triển hệ thống với 5.000 function point (tương đương 500.000 LOC) xem nhiệm vụ rủi ro Một nguyên nhân để dự án thất bại thành phần phụ thuộc lẫn nhau, chồng chéo, khơng có tính sử dụng lại Vì quy trình phát triển phần mềm đại, xây dựng phát triển hệ thống đặt việc tạo thành phần riêng rẽ độc lập, có phân biệt rõ ràng trách nhiệm, có tính sử dụng lại cao lên làm ưu tiên hàng đầu Bởi tạo thành phần vậy, tiết kiệm nhiều thời gian công sức trình bảo trì mở rộng hệ thống sau Tuy nhiên, điều không dễ dàng tính độc lập thành phần bị giảm cách thành phần liên kết với Mặt khác, ngày hầu hết hệ thống phát triển web ứng dụng web đem lại khả phát triển triển khai sản phẩm nhanh chóng, giảm thời gian đưa sản phẩm thị trường, có khả cập nhật tính liên tục hàng ngày Ứng dụng web có thời gian phát triển nhanh, với chi phí phát triển triển khai thấp, tin cậy, truy cập từ đâu, người sử dụng mà khơng thời gian tìm hiểu nhờ giao diện trực quan Chính lý nên chúng em chọn đề tài “Tìm hiểu Framework Spring MVC xây dựng website bán hàng online” Nội dung luận văn tập trung tìm hiểu giới thiệu Spring, framework với đặc tính vượt trội ưu việt việc tạo hệ thống đòi hỏi module hóa có khả sử dụng lại cao, triển khai theo mơ hình MVC 1.2 Đặt vấn đề hướng giải Mặc dù EJB sử dụng rộng rãi, nhiên có số hạn chế khả sử dụng lại code thấp tạo gánh nặng cho việc phát triển [1, tr1] Spring framework sử dụng với JavaEE làm cho trình phát triển ứng dụng enterprise dễ dàng [1, tr1] Do Spring framework đời lựa chọn thay cho mơ hình chuẩn EJB [4, tr1] đánh dấu bước ngoặt lịch sử phát triển Enterprise Java Spring framework Java sử dụng phổ biến tính đến thời điểm Và giới thương mại cơng nhận tảng kiến trúc có tầm quan trọng chiến lược kiến tạo phần mềm framework có cách tạo liên kết thành phần riêng hữu ích Trong hệ thống lớn việc xây dựng thành phần cách độc lập, riêng rẽ yêu cầu quan trọng phụ thuộc lớn vào việc lựa chọn công nghệ kỹ thuật để phát triển hệ thống Tính độc lập, riêng rẽ thành phần xem xét khía cạnh khác Một xét khía cạnh mã nguồn (code) Giảm kết dính code (writing loosely coupled code) có nghĩa phụ thuộc, liên kết class, đối tượng hệ thống “lỏng lẻo” (loosely coupled) tốt Để giải cho việc “writing loosely coupled code” có nhiều kĩ thuật tiếng là: Dependencies Injection, Isolate Dependencies, Reversing Dependencies Và Spring framework mạnh Dependencies Injection Ngoài Spring framework mạnh việc xây dựng ứng dụng enterprise Nó dễ dàng tích hợp với framework khác Struts, Hibernate làm cho việc phát triển ứng dụng enterprise hiệu làm giảm phụ thuộc có tách biệt rõ ràng thành phần [1, tr8] Hai xét khía cạnh thành phần, module hệ thống Nền tảng việc thiết kế hướng đối tượng việc đối tượng thao tác với qua việc gửi thông điệp (sending message) Do việc thiết kế phần mềm xoay quanh việc thiết kế cho thành phần, module giao tiếp thông qua giao diện mà không cần phải biết nhiều phụ thuộc lẫn nhau.Chúng ta thiết kế cho thành phần, module giao tiếp thông qua giao diện mà không cần phải biết nhiều phụ thuộc lẫn Để giải vấn đề chúng em áp dụng mơ hình MVC làm thành phần giao tiếp module hệ thống Áp dụng mô hình cho thấy chuyên nghiệp lập trình phân tích đối tượng, chia thành phần riêng biệt nên hoạt động độc lập tách biệt giúp phát triển ứng dụng nhanh hơn, đơn giản dễ nâng cấp, bảo trì 1.3 Phạm vi đề tài Bài tập lớn tập trung trình bày kết nghiên cứu nội dung sau: Spring framework, MVC Maven Mỗi phần chúng em giới thiệu sơ lược trình bày nội dung nhất, điểm mạnh hay lợi ích mà mang lại cho nhà phát triển phần mềm Cụ thể Spring framework tập trung tìm hiểu trình bày module: Spring core, Spring MVC Sau tìm hiểu chúng em vận dụng kết tìm hiểu vào việc xây dựng ứng dụng nhằm mục đích minh họa cho phần lý thuyết trình bày Chúng em xây dựng website bán hàng 1.4 Phương pháp nghiên cứu Tìm kiếm nghiên cứu tài liệu Spring Framework ,mơ hình MVC Maven tác giả ngồi nước, báo, thơng tin mạng,… sau chọn lọc xếp lại theo ý tưởng Dựa kết tìm hiểu để xây dựng ứng dụng web quản lý bán hàng có áp dụng tất nội dung nghiên cứu nhằm mục đích minh họa cho phần sở lý thuyết trình bày nội dung tập lớn Chương Cơ sở lý thuyết 2.1 Giới thiệu ngơn ngữ lập trình java 2.1.1 Lịch sử phát triển - Năm 1990, Sun MicroSystems thực dự án Green nhằm phát triển phần mềm thiết bị dân dụng James Gosling, chuyên gia lập trình tạo ngơn ngữ lập trình có tên Oak Ngơn ngữ có cú pháp gần giống C++ bỏ qua tính nguy hiểm C++ truy cập trực tiếp tài nguyên hệ thống, trỏ, định nghĩa chồng tác tử… - Khi ngôn ngữ Oak trưởng thành, WWW vào thời kỳ phát triển mạnh mẽ, Sun cho ngơn ngữ thích hợp cho Internet Năm 1995, Oak đổi tên thành Java sau đến 1996 Java xem chuẩn công nghiệp cho Internet 2.1.2 Khả ngôn ngữ java - Là ngôn ngữ bậc cao C, - C++, Perl, SmallTalk, dùng để tạo ứng dụng để giải vấn đề số, xử lý văn bản, tạo trò chơi, nhiều thứ khác Có mơi trường lập trình đồ họa Visual Java, Symantec Cafe, Jbuilder, Jcreator, Có khả truy cập liệu từ xa thơng qua cầu nối JDBC (Java DataBase Connectivity) Hỗ trợ lớp hữu ích, tiện lợi lập trình ứng dụng mạng (Socket) truy xuất Web Hỗ trợ lập trình phân tán (Remote Method Invocation ) cho phép ứng dụng xử lý phân tán máy tính khác Và ln bổ sung tính cao cấp khác phiên sau 2.1.3 Những đặc điểm ngôn ngữ java - Ngơn ngữ hồn tồn hướng đối tượng - Ngơn ngữ đa cho phép chương - trình thực thi hệ điều hành khác (MS Windows, UNIX, Linux) mà biên dịch lại chương trình Phương châm java "Viết lần , Chạy nhiều nền" (Write Once, Run Anywhere) Ngôn ngữ đa luồng, cho phép chương trình có nhiều luồng điều khiển thực thi song song nhau, hữu ích cho xử lý song song Ngôn ngữ phân tán, cho phép đối tượng ứng dụng phân bố thực thi máy tính khác - Ngơn ngữ động, cho phép mã lệnh chương trình tải từ máy tính máy người yêu cầu thực thi chương trình Ngơn ngữ an tồn, tất thao tác truy xuất vào thiết bị vào thực máy ảo nhờ hạn chế thao tác nguy hiểm cho máy tính thật Ngôn ngữ đơn giản, dễ học, kiến trúc chương trình đơn giản, sáng .1.4 Máy ảo Java (JMV - Java Virtual Machine) - Để đảm bảo tính đa nền, Java sử dụng chế Máy ảo Java ByteCode ngơn ngữ máy Máy ảo Java tương tự lệnh nhị phân máy tính thực Một chương trình sau viết ngơn ngữ Java (có phần mở rộng java) phải biên dịch thành tập tin thực thi máy ảo Java (có phần mở rộng class) Tập tin thực thi chứa thị dạng mã Bytecode mà máy ảo Java hiểu phải làm - Khi thực chương trình, máy ảo Java thông dịch thị dạng Bytecode thành thị dạng nhị phân máy tính thực thực thi thực chúng máy tính thực - Máy ảo thực tế chương trình thơng dịch Vì hệ điều hành khác có máy ảo khác Để thực thi ứng dụng Java hệ điều hành cụ thể, cần phải cài đặt máy ảo tương ứng cho hệ điều hành .1.5 Hai kiểu ứng dụng ngôn ngữ java - Khi bắt đầu thiết kế ứng dụng ngôn ngữ Java, bạn phải chọn kiểu cho Application hay Applet - Applet: Là chương trình ứng dụng nhúng vào trang web Mã chương trình tải máy người dùng từ Web server người dùng truy xuất đến trang web chứa Application: Là chương trình ứng dụng thực thi trực tiếp máy ảo Java - .1.6 Bộ phát triển ứng dụng Java (JDK- Java Development Kit) - JDK cơng cụ cho phép người lập trình phát triển triển khai ứng dụng ngôn ngữ java cung cấp miễn phí cơng ty JavaSoft (hoặc Sun) Có Jdk cho hệ điều hành khác Các ấn JDK không ngừng phát hành, bạn tải từ địa http://java.sun.com http://www.javasoft.com - Bộ công cụ gồm chương trình thực thi đáng ý sau: + javac: Chương trình biên dịch chương trình nguồn viết ngôn ngữ java tập tin thực thi máy ảo Java + + + + + java: Đây chương trình làm máy ảo Java, thơng dịch mã Bytecode chương trình kiểu application thành mã thực thi máy thực appletviewer: Bộ thông dịch, thực thi chương trình kiểu applet javadoc: Tạo tài liệu thích chương trình nguồn cách tự động jdb: Trình gở rối rmic: Tạo Stub cho ứng dụng kiểu RMI rmiregistry: Phục vụ danh bạ (Name Server) hệ thống RMI - Lịch sử phiên java: + • • • • • • • JDK 1.0 (23 tháng 01, 1996) JDK 1.1 (19 tháng 2, 1997) J2SE 1.2 (Playground) 08 tháng 12, 1998 J2SE 1.3 (Kestrel) 08 tháng 5, 2000 J2SE 1.4.0 (Merlin) 06 tháng 02, 2002 J2SE (1.5.0) (Tiger) 30 tháng 9, 2004 Java SE (còn gọi Mustang), cơng bố 11 tháng 12 năm 2006 • Java SE (còn gọi Dolphin), tháng năm 2006 công bố ngày 28 tháng năm 2011 • JDK 8, 18 tháng năm 2014 • Phiên dự kiến tiếp theo: Java dự kiến đời năm 2016 2.2 Giới thiệu Spring Framework 2.2.1 Lịch sử đời - Có thể nói Spring Framework đời nhờ thành công EJB EJB (Enterprise JavaBeans) kiến trúc phát triển dành cho ứng dụng doanh nghiệp đòi hỏi tính mạnh mẽ khả mở rộng cao EJB thành phần quan trọng tảng Java EE EJB tạo hai gã khổng lồ công nghệ IBM Sun vào năm cuối thập niên 90 Dưới phát triển hai tập đoàn này, EJB trở nên nặng nề Tiêu chuẩn EJB nhanh chóng thơng qua Sau tất cả, EJB ca ngợi giải pháp tốt để xây dựng ứng dụng phân tán dành cho doanh nghiệp - Nhưng trích chi tiết kỹ thuật EJB tăng nhanh tiếng EJB framework lớn với độ phức tạp cao Các nhà phát triền làm việc với EJB nhận khơng hoạt động đề EJB tuyệt vời bàn giấy, thực tế lại chuyện khác - EJB tiếp tục phát triển, dễ sử dụng nhiều so với buổi ban đầu Nhưng trích đó, nỗi thất vọng cộng đồng Java ngày tăng lên, đòi hỏi cần có giải pháp thay - Vào năm 2002, Spring Framework phát hành phiên Rod Johnson Việc xây dựng ứng dụng doanh nghiệp trở nên đơn giản dễ dàng Rod Johnson cho xuất sách phổ biến rộng rãi có nhan đề "J2EE Development without EJB" Điều cho Spring Framework nhiều động lực để thay EJB - Ngày nay, Spring trở thành framework mã nguồn mở phổ biến để xây dựng ứng dụng doanh nghiệp Cách tiếp cận thực tế ban đầu Rod Johnson tiếp tục phát triển hướng tới cơng cụ hồn chỉnh dành cho xây dựng ứng dụng doanh nghiệp Theo số nguồn, 50% ứng dụng web Java sử dụng Spring - Để ngăn chặn phức tạp phát triển ứng dụng, Spring Framework thường dựa quan điểm sau: + Đơn giản hóa cơng việc phát triển thơng qua việc sử dụng đối tượng Java đơn giản hay gọi POJO (Plain Old Java Object) + + + Nới lỏng ràng buộc thành phần thông qua việc sử dụng Dependency Injection viết interface Tiếp cận lập trình khai báo cách sử dụng quy tắc (convention) khía cạnh (aspect) chung Giảm thiểu mã nghi thức soạn sẵn (boilerplate) thông qua việc sử dụng khuôn mẫu (template) khía cạnh - Spring Framework, hay ngắn Spring, framework mã nguồn mở viết Java Nó xem giải pháp kiến trúc tốt Java EE + Theo thiết kế, khung hình giải phóng lập trình viên dùng Java, cho phép họ nhiều quyền tự + Đồng thời cung cấp giải pháp tiện lợi, đầy đủ dẫn chứng tài liệu, dễ dàng sử dụng, phù hợp với thực hành thông dụng cơng nghệ phần mềm 2.2.2 Các module - Spring đóng vai trò tầng business Hình Các module Hình 13 Sơ đồ luồng xử lý Spring MVC Đây chuỗi kiện tương ứng nhận yêu cầu HTTP gửi đến DispatcherServlet: Sau nhận HTTP request, DispatcherServlet gửi yêu cầu đến HandlerMapping (một đồ cấu hình URL) để xác định controller xử lý yêu cầu Controller nhận request gọi phương thức dịch vụ (service methods) phù hợp dựa việc sử dụng method GET/POST… Nếu yêu cầu đo cần truy xuất sở liệu Controller ủy nhiệm cho business logic hay nhiều model để lấy thông tin gửi liệu cho Controller Lúc Controller đong goi mơ hình liệu tên view tải lên thành đối tượng ModelAndView gửi trả cho DispathcherServlet DispatcherServlet gửi goi ModelAndView cho ViewResolver để tìm xem view (thơng thường trang JSP, HTML) load lên Sau hoàn tất, DispatcherServlet chuyển liệu từ model đến view cuối hiển thị trình duyệt • DispathcherServlet DispathcherServlet thành phần tiếp nhận tất request từ browser, điều khiển luồng xử lý trung chuyển thành phần (components) MVC Hơn nữa, tích hợp Spring IoC container, cho phép ta sử dụng tính Spring Hình 14 Luồng xử lý request Spring MVC DispatcherServlet thực Servlet (nó thừa kế từ lớp sở HttpServlet), khai báo tập tin web.xml ứng dụng web Các requests muốn DispatcherServlet xử lý phải ánh xạ cách sử dụng ánh xạ URL tập tin web.xml Dưới ví dụ khai báo định nghĩa DispatcherServlet Như ta thấy, tất requests bắt đầu /music DispatcherServlet ‘music-manager’ xử lý Khi DispatcherServlet khởi tạo, Spring gọi file có tên [tên-servlet]servlet.xml thư mục WEB-INF Với ví dụ trên, Spring gọi file musicmanager-servlet.xml 2.7.3 Các khai niệm liên quan 2.7.3.1 Inversion of Control Container (IoC container) : IProcess AProcess Service BProcess Hình 15 Inversion of Control Container (IoC container) • Hai package: org.springframework.beans org.springframework.context cung cấp IoC container cho Spring framework Giao tiếp BeanFactory cung cấp kỹ thuật cấu hình nâng cao, có khả quản lý đối tượng • Giao tiếp ApplicationContext kế thừa từ BeanFactory thêm vài chức khác tích hợp với đặc tính Spring AOP, truyền kiện, application context WebApplicationContext sử dụng ứng dụng web • Hiệu chỉnh components chương trình quản lý vòng đời (lifecycle) đối tượng Java 2.7.1.1 - Bean : Các đối tượng ứng dụng quản lý IoC container gọi bean Một bean đơn giản đối tượng khởi tạo, phân phát quản lý IoC container Sự phụ thuộc chúng phản ánh configuration metadata sử dụng container - Giao tiếp org.springframework.beans.factory.BeanFactory IoC container chịu trách nhiệm chứa, khởi tạo, quản lý móc nối phụ thuộc bean - Một cài đặt (kế thừa) BeanFactory XmlBeanFactory - nhận XML configuration metadata sử dụng để cấu hình cho ứng dụng - Configuration metadata có định dạng XML (hoặc properties), sử dụng để viết bean definitions cho bean mà bạn muốn IoC container quản lý - Ở mức cấu hình IoC container phải chứa bean mà container phải quản lý Khi sử dụng XML-based configuration metadata, bean cấu nhiều element bên element Các bean tương ứng với đối tượng tạo ứng dụng 2.7.1.2 Dependency Injection (DI) : - DI thuật ngữ tạo Martin Fowler gọi đảo ngược kiểm soát Điều làm tăng khả tái sử dụng lớp để kiểm tra chúng cách độc lập với lớp khác (Unit Testing) Trong thiết kế hướng đối tượng, đối tượng có quan hệ với Một lớp (A) có phụ thuộc vào lớp (B) lớp sử dụng lớp (B) biến Nếu tiêm phụ thuộc sử dụng sau lớp (B) cấp cho lớp (A) thông qua nhà xây dựng lớp (A) - điều sau gọi xây dựng tiêm setter - điều sau gọi setter injection Một thiết kế dựa lớp / thành phần độc lập làm tăng khả sử dụng lại - Ví dụ lớp A mong muốn đối tượng truy cập liệu DAO để nhận liệu từ sở liệu, bạn dễ dàng tạo đối tượng kiểm tra mocks kết nối sở liệu tiêm đối tượng vào A để kiểm tra A mà khơng có kết nối sở liệu thực tế Một thiết kế phần mềm dựa phụ thuộc tiêm với Java tiêu chuẩn Quy trình sơ đồ DI Hình 16 Dependency Injection (DI) 2.7.1 Setter Injection: Cho đoạn code sau : my@email.address Đoạn code tương ứng với đoạn code sau : Person person = new Person(); person.setEmail(“my@email.address”); - Khởi tạo đối tượng Person gán giá trị email cho Được nhận phương thức setter bean sau triệu gọi phương thức khởi tạo không tham số phương thức static factory không tham số để khởi tạo bean 2.7.2 - Constuctor injection: Được nhận cách triệu gọi phương thức khởi tạo với số tham số - Một biến thể khác thay cho constructor sử dụng phương thức static factory để trả thể đối tượng