Với Servlet, bạn được phép thu thập dữ liệu đầu vào của người dùng thông qua website.. ● Quá trình hoạt động của một ứng dụng JSP kết hợp với Servlet như sau:➔ Người dùng gửi một yêu cầu
Trang 1HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA CÔNG NGHỆ THÔNG TIN 1
Trang 2LỜI CẢM ƠN
Lời đầu tiên, chúng em xin gửi lời cảm ơn đến Học viện Công nghệ Bưu chínhViễn Thông đã tạo điều kiện cho chúng em được học môn Lập trình Hướng đối tượng
Đặc biệt, chúng em xin gửi lời cảm ơn chân thành và sâu sắc nhất tới thầy Nguyễn
Mạnh Sơn , giảng viên bộ môn đã hướng dẫn và truyền đạt những kiến thức hết sức bổ
ích và quý báu trong suốt thời gian học tập vừa qua
Với vốn hiểu biết sâu rộng và kinh nghiệm nhiều năm giảng dạy cũng như làm việctrong môi trường công nghệ thông tin, thầy khiến chúng em thật sự ấn tượng, khâm phục
và “ngỡ ngàng” trước những hiểu biết của thầy Những kiến thức, kinh nghiệm thầy chia
sẻ khiến chúng em thật sự ngưỡng mộ và một phần hãnh diện khi được học dưới sựhướng dẫn của thầy
Lập trình Hướng đối tượng là một môn học nền tảng với một lượng kiến thức tươngđối nhiều và cần đầu tư thời gian học khá lớn nên khó có thể hiểu rõ, hiểu sâu nhanhchóng khi thời lượng học trên lớp có hạn Chính vì vậy mặc dù thầy đã truyền đạt rấtnhiệt tình và tận tâm nhưng do năng lực có hạn, khả năng tư duy và khả năng tiếp thucòn chưa nhanh nên trong báo cáo bài tập lớn này chúng em khó có thể tránh khỏi đượcnhững sai sót Do đó, chúng em kính mong thầy xem xét và bổ sung giúp đỡ chúng emhoàn thiện bài báo cáo này một cách đầy đủ và đúng đắn hơn
Một lần nữa, chúng em xin chân thành cảm ơn thầy!
Hà Nội, Tháng 11 năm 2023
Thay mặt nhóm 12 Nhóm trưởng Đức
Trang 3Vũ Hữu Đức
Contents
LỜI CẢM ƠN
I, Lý do chọn đề tài:
II, Lập trình JSP/Servlet theo mô hình MVC
1 Lập trình JSP/Servlet
2 Mô hình MVC(Model-View-Controller)
2.1 Model
2.2 View
2.3 Controller
III, Mô tả dự án và các chức năng cơ bản của website
1 Mô tả dự án:
2 Mô tả cơ bản về chức năng của website:
IV, Hoạt động nhóm và phân chia nhiệm vụ từng thành viên
V, Thiết kế cơ sở dữ liệu
VI, Cấu trúc thư mục backend
1 Model
2 Dao
3 Controller:
VII, Cấu trúc thư mục frontend
VIII, Hướng dẫn cài đặt, triển khai và đánh giá kết quả
1 Hướng dẫn cài đặt
2 Kết quả
3 Đánh giá và hướng phát triển trong tương lai
XI Tài liệu tham khảo
Trang 4I, Lý do chọn đề tài:
- Hiện nay, công nghệ thông tin ngày càng phát triển mạnh mẽ, Internet được phổ biến rộng rãi, nhu cầu đặt phòng khách sạn trực tuyến ngày càng tăng nên việc đặt phòng quamạng không còn mới lạ với mọi người nữa Mặc dù xây dựng một trang web đặt phòng trực tuyến ở nước ta là còn mới mẻ nhưng rất khả thi khi đất nước đã và đang từng bước đổi mới và phát triển, đây cũng là một cơ hội rất lớn cho thương mại điện tử ở Việt Namphát triển
- Đề tài “Website quản lý đặt phòng khách sạn” rất thực tế và phù hợp với tình hình hiệnnay Việc thiết lập một website đặt phòng trực tuyến nhanh chóng với nhiều dịch vụ tiệních và hoàn toàn miễn phí có thể quảng bá được hình ảnh của khách sạn, tạo cơ hội thuận lợi cho mọi người, tiết kiệm được khoảng thời gian và hoàn toàn thuận lợi cho tất
● JSP: JSP là viết tắt của JavaServer Pages là một công nghệ để phát triển
các trang web động JSP giúp các nhà phát triển chèn java code vào các trang HTML bằng cách sử dụng các thẻ JSP đặc biệt JSP là một kiểu Java servlet được thiết kế để tạo ra giao diện người dùng cho một ứng dụng Java web Các nhà phát triển web viết các JSP như các tệp văn bản kết hợp mã HTML hoặc XHTML, các phần tử XML, các action và lệnh JSP
● Servlet: Servlet là công nghệ được dùng để thiết lập ra các ứng dụng web
Servlet được xem là một API cung cấp các interface, lớp và cả các tài liệu
Trang 5Servlet cũng là một thành phần website được lập trình viên triển khai trên máy chủ, phục vụ cho mục đích tạo các trang web động Với Servlet, bạn được phép thu thập dữ liệu đầu vào của người dùng thông qua website Cụ thể, chúng sẽ hiển thị bản ghi từ một nguồn cơ sở dữ liệu hay từ nguồn khác Java Servlet là chương trình chạy trên một Web hoặc ứng dụng máy chủ (Application Server) Nó hoạt động như một lớp trung gian giữa một yêu cầu đến từ một trình duyệt Web hoặc HTTP khách (Client) khác và cơ
sở dữ liệu hoặc các ứng dung trên máy chủ HTTP (HTTP Server)
● Quá trình hoạt động của một ứng dụng JSP kết hợp với Servlet như sau:
tương ứng với một Servlet
thông qua các phương thức như doGet() hoặc doPost()
nguồn khác nhau như cơ sở dữ liệu
chứa kết quả hoặc dữ liệu mà nó thu được bằng cách sử dụng phươngthức setAttribute() của đối tượng HttpServletRequest
cách sử dụng phương thức getRequestDispatcher() và phương thức forward() để gửi dữ liệu đến JSP tương ứng
(attributes) và sử dụng mã JSP (bao gồm cả Java và HTML) để hiển thị kết quả lên trình duyệt của người dùng
2 Mô hình MVC(Model-View-Controller)
Trang 62.1 Model
- Có nhiệm vụ thao tác với Database
- Nó chứa tất cả các hàm, các phương thức truy vấn trực tiếp với dữ liệu
- Controller sẽ thông qua các hàm, phương thức đó để lấy dữ liệu rồi gửi qua View
2.2 View
- Là giao diện người dùng (User Interface)
- Chứa các thành phần tương tác với người dùng như menu, button, image, text,
- Nơi nhận dữ liệu từ Controller và hiển thị
2.3 Controller
- Là thành phần trung gian giữa Model và View
- Đảm nhận vai trò tiếp nhận yêu cầu từ người dùng, thông qua Model để lấy
Trang 7dữ liệu sau đó thông qua View để hiển thị cho người dùng
Luồng xử lý của mô hình MVC:
- Đầu tiên, người dùng gửi request từ client đến server
- Sau đó, Controller nhận request từ người dùng rồi tiến hành giao tiếp với Model
để lấy dữ liệu từ database
- Cuối cùng, Controller gửi dữ liệu mà nó lấy được về View và hiển thị ra cho người dùng
Trong website này, chúng em sử dụng JSP và Servlet để xây dựng mô hình trên
JSP: Lấy thông tin, yêu cầu từ người dùng
Servlet: Nhận thông tin từ người dùng thông qua JSP rồi xử lý dữ liệu từ database, cuối cùng gửi ngược lại JSP để hiển thị thông tin cho người dùng
III, Mô tả dự án và các chức năng cơ bản của website
● Server: Apache Tomcat
2 Mô tả cơ bản về chức năng của website:
● Xem thông tin giới thiệu về khách sạn
● Xem danh sách phòng phân theo loại phòng
● Xem chi tiết thông tin phòng
● Xem bài viết mới
● Đặt phòng
Trang 8IV, Hoạt động nhóm và phân chia nhiệm vụ từng thành viên
Nhóm chúng em đã họp bàn chủ đề bài tập lớn và chốt được chủ đề Sau đó lên ý tưởng, chia nhau nhiệm vụ và bắt tay vào làm Nhóm em đã sử dụng github để lưu code và để
dễ dàng trong làm việc nhóm Các thành viên thực hiện công việc trên nhánh đã tạo, có thể thêm, sửa đổi hoặc xóa các code trong dự án Sau khi hoàn thành phần việc thì mỗi người sẽ đẩy code của mình lên github Khi đó nhóm trưởng sẽ xem xét và hợp nhất các thay đổi lại Các thành viên sẽ cập nhật lại code mới nhất để đảm bảo tính đồng bộ Dưới đây là phần phân chia nhiệm vụ mà mỗi thành viên phải làm:
1.Vũ Hữu Đức – B21DCCN111(Nhóm trưởng):
-Code backend
-Hoàn thiện phần frontend
-Viết báo cáo
2 Nguyễn Thị Thùy Linh– B21DCCN487
-Code frontend
- Viết báo cáo
3 Lê Đức Nam -B20DCCN567
-Thiết kế cơ sở dữ liệu
- Viết báo cáo
Trang 9V, Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu của website gồm 5 thực thể (bảng) với các thuộc tính:
được đưa vào đây khi thực hiện các thao tác trong đặt phòng
○ customerId: id của khách hàng, được tăng 1 cách tự động và là khóa chính
○ customerName: tên của khách hàng
○ email: Email của khách hàng
○ tel: số điện thoại liên lạc của khách hàng
○ roomId: id của phòng, được tăng 1 cách tự động và là khóa chính
○ roomName: tên phòng (VD:102,103,…)
○ roomType: loại phòng (VD:Standard,Deluxe,…)
○ price: giá phòng trong 1 đêm/ngày
○ sale: Phần trăm giảm giá
○ rate: chất lượng phòng (3 sao, 4 sao,…)
Trang 10○ square: diện tích phòng.
○ guest: số lượng khách tối đa có thể vào ở
○ description: mô tả ngắn gọn về phòng
○ detail: mô tả chi tiết phòng
vào từ trước
○ roomImageId: id của hình ảnh, được tăng 1 cách tự động và là khóa chính
○ roomId: id của phòng, là khóa ngoài trỏ đến bảng rooms
○ imgURL: đường dẫn đến hình ảnh
được đưa vào đây khi thực hiện các thao tác đặt phòng
○ bookId: id cho đặt phòng, được tăng 1 cách tự động và là khóa chính
○ customerId: id của khách hàng, là khóa ngoài trỏ đến bảng customers
○ roomId: id của phòng, là khóa ngoài trỏ đến bảng rooms
○ checkIndate: ngày vào ở
○ billId: id của hóa đơn, được tăng 1 cách tự động và là khóa chính
○ bookId: id cho đặt phòng, là khóa ngoài trỏ đến bảng booking
○ totalPrice: tổng giá tiền phải trả, được tính bằng: rate)/100
○ Bảng customers có quan hệ 1 – nhiều với bảng booking
○ Bảng rooms có quan hệ 1 – nhiều với bảng booking
○ Bảng rooms có quan hệ 1 – nhiều với bảng roomimages
○ Bảng booking có quan hệ 1 – nhiều với bảng bill
Trang 11VI, Cấu trúc thư mục backend
1 Model
Package chứa toàn bộ thực thể của website:
Trang 12- Room:
+ id: id của phòng+ type: loại phòng+ img: danh sách các ảnh của phòng+ price: giá của phòng
+ guest: số khách tối đa của phòng+ square: tổng diện tích của phòng+ des: đánh giá tổng quan về phòng
Trang 13+ detail: miêu tả chi tiết về từng loại phòng+ rate: chất lượng phòng
- Customer:
+ id: id của khách hàng+ name: tên khách hàng+ email: email của khách hàng+ tel: số điện thoại khách hàng
- Booking:
+ id: id của lần đặt phòng+ room: Phòng đã đặt+ customer: khách hàng đặt phòng+ checkInDate: ngày bắt đầu sử dụng phòng+ checkOutDate: ngày kết thúc sử dụng phòng+ totalDate: tổng số ngày sử dụng phòng
- Bill:
Trang 14+ id: id của hóa đơn+ booking: thông tin về lần đặt phòng+ totalPrice: tổng chi phí hóa đơn.
Trong sơ đồ thực thể này, quan hệ giữa Room với Booking, Customer với Booking và Booking với Bill đều là quan hệ Aggregation
2 Dao
Đây là package để truy vấn với cơ sở dữ liệu, tất cả các lớp BillDAO,
BookingDAO, CustomerDAO, RoomDAO đều kế thừa từ lớp DAO, điều này giảm thiểu số kết nối đến cơ sở dữ liệu, chỉ cần 1 lần kết nối thông qua class DAO
Trang 15- RoomDAO:
Trong RoomDAO: Có hai phương thức chính đó là:
+ getAllRooom(): lấy toàn bộ phòng từ cơ sở dữ liệu+ getRoom(): lấy 1 phòng cụ thể thông qua loại phòng
- CustomerDAO:
Trang 16Thông qua CustomerDAO ta có thể thêm khách hàng đã đặt phòng vào cơ
sở dữ liệu bằng phương thức insertCus()
- BillDAO:
Sử dụng phương thức insertBill() để thêm hóa đơn vào cơ sở dữ liệu
Trang 18Lấy thông tin của phòng cụ thể rồi gửi về phía boonow.jsp.
- BookServlet:
BookedServlet có nhiệm vụ lấy thông tin từ form đặt phòng rồi kiểm tra xem phòng mà khách hàng vừa đặt còn trống hay là không
Trang 19+ Nếu trống thì tiến hành xác nhận đặt phòng(confirm.jsp)+ Nếu không trống thì trả về thông báo phòng đã được đặt trong khoảng thời gian nào đó(test.jsp).
- ConfirmServlet:
Xác nhận đặt phòng, thêm vào cơ sở dữ liệu về thông tin của lần đặt phòng, hóa đơn của lần đặt phòng đó
VII, Cấu trúc thư mục frontend
Trong thư mục WebPage chứa các file HTML, CSS, JSP, mục đích để hiển thị giao diệntương tác với người dùng
Trang 20● META-INF:Thư mục META-INF chứa các tệp tin cấu hình như context.xml
chứa các cấu hình liên quan đến môi trường thực thi của ứng dụng
● WEB-INF: là một thư mục quan trọng trong ứng dụng web Java và nằm trong thư
mục gốc của ứng dụng web Trong WEB-INF có chưa web.xml là tệp tin cấu hìnhchính của ứng dụng web Java Nó chứa các khai báo servlet, filter, listener và các cấu hình khác liên quan đến ứng dụng web
● CSS: chứa các tập tin của Bootstrap được thêm vào dự án phục vụ quá trình làm
giao diện nhanh chóng và thuận tiện hơn
● Fonts: Chứa các font chữ cũng như icon được nhúng vào dự án để thuận tiện cho
việc sử dụng
● images: Chứa các ảnh (.jpg và png) phục vụ cho quá trình xây dựng trang web
● js: có chứa các file JSP như rooms.jsp, booknow.jsp Việc sử dụng file jsp có tác
dụng để xây dựng giao diện người dùng cho ứng dụng web Bằng cách sử dụng các thẻ JSP, ta có thể nhúng mã Java vào trong các phần tử HTML để tạo ra giao diện tương tác và hiển thị dữ liệu động
các thông tin khác liên quan
mẫu (sử dụng request.getParameter()) và thực hiện các xử lý logic cần thiết,
có thể xác nhận đặt phòng, lưu thông tin vào cơ sở dữ liệu, và hiển thị thông báo thành công cho người dùng
quả của quá trình đặt phòng hoặc xử lý thông tin, có thể sử dụng các phần
Trang 21tử HTML để tạo giao diện người dùng dễ đọc và hấp dẫn, cùng với mã JSP
để hiển thị dữ liệu từ Servlet hoặc xử lý logic
● Remote Files: giúp tải xuống và sử dụng phiên bản mới nhất của Bootstrap và
jQuery trong dự án nhằm giảm kích thước và tăng tốc độ tải trang
VIII, Hướng dẫn cài đặt, triển khai và đánh giá kết quả
1 Hướng dẫn cài đặt
● Clone code từ github:
● Download database:
● Cài đặt môi trường lập trình:
NetbeanApache TomCat 10.1.5MySQL
● Khởi chạy chương trình: Run với server tomcat phiên bản 10.1.5
● Truy cập trang chủ: xem danh sách phòng, thông tin phòng, đặt phòng
2 Kết quả
Trang 22● Xem thông tin gi i thi u khách s n ớ ệ ạ
● Xem danh sách phòng phân theo lo i phòng ạ
Trang 23● Xem chi ti t thông tin phòng ế
Trang 25● Xem các bài vi t m i ế ớ
● Đ t phòng ặ
Trang 26➢ Xác nhận thông tin
Trang 27➢ Khi đặt phòng thành công
3 Đánh giá và hướng phát triển trong tương lai
3.1 Ưu điềm
● Chương trình có sử dụng truy vấn cơ sở dữ liệu
● Chương trình được viết bằng JSP/Servlet với giao diện diện đơn giản, dễ nhìn, dễ sử dụng
Trang 28● Chương trình được xây dựng có 1 số tính năng cơ bản như: xem thông tin khách sạn, xem danh sách phòng, thông tin của phòng, và đặt phòng
3.2 Nhược điểm
● Chương trình còn đơn giản
● Còn một số thiếu sót trong việc xử lý bắt lỗi ngoại lệ trong một số chức năng
3.3 Hướng phát triển trong tương lai
● Cải tiến giao diện