CÔNG NGHỆ THÔNG TIN >> BÀI VIẾT CHỌN LỌC

[Java Web] Truy xuất dữ liệu trong SQL Server sử dụng JDBC và JSP Servlet

Đăng lúc: 01:13 PM - 02/02/2024 bởi Charles Chung - 1827

Trong bài này tôi sẽ hướng dẫn các bạn cách đọc dữ liệu trong SQL Server sử dụng JDBC và trình bày lên trang JSP

Chuẩn bị

  • Cơ sở dữ liệu mẫu 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
CREATE  DATABASE FlowerStore
GO
USE FlowerStore
GO
CREATE TABLE Flowers(
	flowerid VARCHAR(10) PRIMARY KEY,
	flowerName NVARCHAR(200) NOT NULL,
	unit NVARCHAR(20) NOT NULL,
	price FLOAT NULL,
	priceold FLOAT NOT NULL,
	brief NVARCHAR(1000),
	description NTEXT,
	picture NVARCHAR(200),
	createdate DATE,
	active BIT
)
INSERT INTO Flowers (flowerid,flowerName,unit,price,priceOld,brief,description,picture,createdate,active) 
VALUES 
('B01',N'Hi Vọng Xanh',N'Bó',650000,0,N'Sự kết hợp đơn giản của tông màu xanh lá như một bức tranh một khu vườn nhỏ đầy sức sống . Mang lại cảm giác thoải mái, thư giãn khi ngắm nhìn đóa hoa này. Tượng trưng cho sự phát triển, tràn đầy hy vọng tương lai tươi sáng, sinh sôi nảy nở trong sự nghiệp. Thích hợp tặng những dịp khai trương, ngày thành lập.',N'Bó hoa gồm: - 10 Hồng trắng nhí - 5 Hoa Cúc Lưới Xanh - 5 Green wicky - 5 Cúc calimero xanh - 3 Cát tường trắng - 3 Cúc mai xanh',
	'10676_hi-vong-xanh.png',GETDATE(),1
),
('B02',N'NHẸ NHÀNG',N'Bó',650000,0,N'Đóa hoa kết hợp sắc trắng và màu tím hoàn mỹ có sức thu hút mạnh mẽ , tượng trưng sự gắn bó và bên nhau lâu dài, gặp nhiều niềm vui, nhiều sức khỏe và luôn luôn hạnh phúc trong cuộc sống . Thích hợp tặng sinh nhật, dịp lễ đặc biệt.',N'Bó hoa gồm: - 11 Hồng tím cà - 5 Cẩm chướng đơn tím - 10 Đồng tiền hồng nhí - 2 Cúc lưới tím - 5 Cúc mai hồn',
	'10677_nhe-nhang.png',GETDATE(),1
),
('B03',N'SẮC HOA',N'Bó',750000,0,N'Sự kết hợp siêu đáng yêu của tone tím và cam nhẹ nhàng của hoa hồng, bó hoa như cây kẹo ngọt làm rung động trái tim người nhận. Đây sẽ là món quà đặc biệt cùng với biểu tượng của sự ngọt ngào, lãng mạn với tình yêu chân thành. Thích hợp tặng những dịp sinh nhật, ngày lễ tình nhân.',N'Bó hoa gồm: - 7 Hồng trứng gà - 4 Hồng sen mới - 5 Hồng tím nhí - 5 Hồng da - 2 Hồng da cồ - 5 Cúc calimero tím',
	'10675_sac-hoa.png',GETDATE(),1
),
('H01',N'LA VIE EN ROSE',N'Hộp',900000,0,N'Hộp hoa được thiết kế nhã nhặn với những màu sắc tươi thắm của những đoá hoa hồng. Thông điệp của lòng yêu mến, biết ơn và lời cảm ơn chân thành nhất. Hộp hoa thích hợp tặng dịp lễ ngày nhà giáo Việt Nam 20/11, dành tặng các quý thầy cô',N' Gồm 3 Hồng red naomi  8 Hồng da 12 Hồng vàng ánh trăng',
	'10686_la-vie-en-rose.png',GETDATE(),1
),
('H02',N'FEELING',N'Hộp',1050000,0,N'Bạn đã bao giờ đặt một bó hoa gửi đến người yêu thương, thân thuộc chẳng vì một lí do nào cả? Chỉ đơn giản là hành động của cảm xúc? Nhưng chắc chắn rằng, đằng sau cái “chẳng vì một lí do gì” là những ấm áp yêu thương rất đỗi nhẹ nhàng',N' Gồm -16 Hồng đỏ ớt - 14 Hồng trứng gà - 7 Cẩm chướng đơn viền cam',
	'10682_feeling.png',GETDATE(),1
),
('H03',N'MÂY TÍM',N'Hộp',1200000,0,N'Hộp hoa mang vẻ đẹp rực rỡ sắc màu tím trang trọng, quý phái. Thể hiện tình cảm chân thành của học trò dành đến thầy cô với lòng biết ơn, tri ân sâu sắc. Thích hợp dành tặng dịp lễ ngày nhà giáo Việt Nam 20/11, dành tặng đến quý thầy cô.',N'Hộp hoa gồm có: - 15 Hồng tím cà - 12 Cúc ping pong hồng - 8 Lan bò cạp - 10 Lan Moka tím - 7 Cúc calimero tím',
	'10684_may-tim.png',GETDATE(),1
),
('G01',N'YÊU ĐỜI',N'Giỏ',790000,0,N'Giỏ hoa mang màu sắc ấm áp và rực rỡ gồm hồng đỏ ớt, hồng trứng, hướng dương thể hiện một tình cảm nồng nhiệt nhưng đầy tự hào của người tặng đối với người nhận. Giỏ hoa phù hợp với những người cá tính mạnh mẽ và quyết đoán.',N'Giỏ hoa gồm có: - 7 Hồng đỏ ớt - 10 Mõm sói vàng - 7 Hồng trứng gà - 5 Cúc ping pong xanh - 10 Cẩm chướng đơn vàng - 5 Hướng dương',
	'10687_yeu-doi.png',GETDATE(),1
),
('G02',N'VÌ EM',N'Giỏ',750000,0,N'Mỗi loại hoa Hồng mang một ý nghĩa thì "Vì em" chính là một món quà đến từ những bông Hồng tuyệt đẹp nhất mang theo thông điệp của những ý nghĩa bất ngờ. Đó là một cách tuyệt vời để khiến bữa sinh nhật được tỏa sáng, thêm gia vị cho những dịp kỉ niệm hay đơn giản chỉ muốn tạo nên những ngày đáng nhớ trong cuộc đời người tặng.',N'Giỏ hoa bao gồm các loại hoa: - 6 Mõm sói vàng - 13 Hồng đỏ ớt - 10 Hồng trứng gà - 6 Cúc calimero trắng xịt cam - 1 Cành Hoa baby',
	'10688_vi-em.png',GETDATE(),1
),
('G03',N'THE BEST OF LUCK',N'Giỏ',1350000,0,N'Giỏ hoa thiết kế đan xen giữa hoa đồng tiền, hoa hồng sắc cam,... nổi bật trên nền xanh của lá cây hòa quyện với tông màu cam rực rỡ, cành hoa phía trên đỉnh giỏ hoa như cánh chim tung bay khắp trời xanh. Tượng trưng cho sự sung túc, giàu sang , dồi dào về tiền bạc. Thích hợp những dịp lễ khai trương, kỷ niệm thành lập.',N'Giỏ hoa gồm có: - 11 Hồng trứng gà - 9 Hồng vàng ánh trăng - 5 Hoa thiên điểu - 10 Mõm sói vàng - 8 Hướng dương - 8 Lan vũ nữ',
	'10415_the-best-of-luck.png',GETDATE(),1
),
('BH01',N'LOVE AND ROSE',N'Bình',550000,0,N'Bình hoa nhỏ để bàn nổi bật với sự kết hợp hài hòa của cánh hồng đỏ red naomi và trắng tinh khiết làm cho căn phong thêm mới mẻ, đầy màu sắc. Bình hoa biểu tượng cho một tình yêu hạnh phúc, ấm no, sung túc và tràn đầy tiếng cười vui.',N'Bình hoa bao gồm các loại hoa: - 10 Mõm sói vàng - 9 Hồng da - 6 Hồng đỏ sa - 1 Hồng red naomi - 5 Cúc calimero tím - 1 Hoa baby',
	'10690_love-and-rose.png',GETDATE(),1
),
('BH02',N'ITS YOU',N'Bình',580000,0,N'Một ngày dạo trên phố, chợt thấy từng khóm hoa trong nắng đung đưa như mời gọi. Lấy ý tưởng từ những bông hoa nắng đó, bó hoa được thiết kế với tông màu cam đào sáng, tươi vui và nhẹ nhàng. Thích hợp tặng sinh nhật, chúc mừng, kỉ niệm.',N'Bình hoa gồm có:- 13 Hồng trứng gà - 12 Hồng trắng nhí - 10 Cúc calimero trắng',
	'10691_its-you.png',GETDATE(),1
),
('BH03',N'NGÀY HỒNG TƯƠI',N'Bình',1280000,0,N'Bình hoa được kết hợp khéo léo giữa hoa hồng, hoa ly và hoa đồng tiền với tone màu hồng phấn tươi mới, thể hiện một vẻ đẹp đáng yêu, rực rỡ . Sự kết hợp này gửi gắm sự nhẹ nhàng, sâu lắng, đôi khi là sự vui tươi. Bình hoa thích hợp tặng sinh nhật, kỉ niệm ngày quan trọng nào đó trong năm.',N'Bình hoa gồm có: - 15 Hồng da cồ - 8 Hồng tím nhí - 18 Mõm sói song hỷ - 10 Đồng tiền hồng nhí - 5 Lily hồng',
	'10418_ngay-hong-tuoi.png',GETDATE(),1
),
('CB01',N'VỀ NƠI XA',N'Kệ',1580000,0,N'Bước chân ra đi bỏ lại sau lưng những giọt nước mắt tiễn biệt mãi mãi. Người đi về nơi xa bỏ lại nơi đây là nỗi đau mất người thân luôn là nỗi đau khó quên đối với mỗi người chúng ta. Thấu hiểu niềm đau đó kệ hoa này sẽ là lời chia buôn sâu sắc đến gia quyến người đã khuất.',N'Kệ hoa chia buồn Về Nơi Xa gồm các loại hoa tươi: - 8 Lily trắng - 30 Hồng trắng nhí - 10 Môn trắng - 10 Cúc trắng - 2 Hoa baby',
	'5125_ve-noi-xa.jpg',GETDATE(),1
),
('CB02',N'HAI THẾ GIỚI 2',N'Kệ',1480000,0,N'Trong cuộc sống khi chúng ta mất đi vĩnh viễn một người thân hay người bạn thì luôn để lại nỗi đau xót khôn cùng cho người ở lại. Kệ chia buồn " Hai thế giới" với tone màu vàng - màu của phật pháp được thiết kế để chia buồn với gia chủ theo tôn giáo phật. Chúng tôi sẽ thay mặt bạn đưa tiễn họ và chia sẻ cùng gia đình.',N'Kệ hoa chia buồn Hai Thế Giới gồm các loại hoa: - 20 Mõm sói trắng - 25 Hồng trắng nhí - 18 Đồng tiền vàng - 20 Cẩm chướng đơn vàng - 20 Cúc calimero vàng - 10 Cúc trắng',
	'8397_hai-the-gioi-2.png',GETDATE(),1
),
('CB03',N'DEEP CONDOLENCES',N'Kệ',880000,0,N'Chuyện nhân gian vui buồn đều có. Kiếp nhân sinh như gió thoáng qua. Sinh ra trong một kiếp con người. Sớm ở tối về là lẽ thường thôi…Với vòng hoa chia buồn này chúng tôi sẽ thay mặt bạn đưa tiễn họ và chia sẻ sự mất mát cùng gia đình họ.',N'Kệ hoa tang "Deepest condolences" gồm có: - 15 Cúc trắng - 15 Cúc mai hồng',
	'8396_deep-condolences.png',GETDATE(),1
),
('CM01',N'TẤT THẮNG',N'Lãng',1280000,0,N'Trong phong thủy màu vàng rất thích hợp cho hỷ sự, lễ hội. Nó còn tượng trưng cho năng lượng Hỏa và sức mạnh... Kệ hoa chúc mừng được các florist đầu tư một cách nghiêm túc vì chúng tôi luôn hiểu rằng đó là uy tín của khách hàng, của cả một doanh nghiệp. Chúng tôi luôn nhận được sự yêu quý từ khách hàng, đặc biệt là các doanh nghiệp tin yêu và đặt thiết kế hoa chúc mừng phục vụ các dịp khai trương, khánh thành, tổ chức sự kiện và trong các dịp lễ quan trọng khác.',N'Kệ hoa gồm có:- 20 Đồng tiền vàng - 18 Hồng vàng ánh trăng - 15 Lily vàng thơm - 5 Lan vũ nữ',
	'10427_tat-thang.png',GETDATE(),1
),
('CM02',N'HƯNG THỊNH 5','Kệ',1280000,0,N'Kệ hoa chúc mừng Hưng Thịnh gồm có hoa hồng, đồng tiền và hoa hồng môn. Được xem là màu may mắn nhất, màu đỏ rất thích hợp cho hỷ sự, lễ hội. Nó còn tượng trưng cho năng lượng Hỏa và sức mạnh... Kệ hoa chúc mừng được chúng tôi đầu tư một cách nghiêm túc vì chúng tôi luôn hiểu rằng đó là uy tín của khách hàng, của cả một doanh nghiệp. Vì vậy, chúng tôi luôn nhận được sự tin tưởng từ khách hàng, đặc biệt là các doanh nghiệp tin yêu và đặt thiết kế hoa chúc mừng phục vụ các dịp khai trương, khánh thành, tổ chức sự kiện và trong các dịp lễ quan trọng khác.',N'Kệ chúc mừng Hưng Thịnh 5 gồm các loại hoa tươi: - 40 Hồng đỏ sa - 18 Hồng đỏ ớt - 10 Môn đỏ - 20 Đồng tiền đỏ',
	'2999_hung-thinh-5.jpg',GETDATE(),1
),
('CM03',N'PHỒN VINH',N'Kệ',1980000,0,N'Kệ hoa chúc mừng "Phồn vinh" như chính ý nghĩa của nó giàu có, thịnh vượng,là lời chúc cho sự phát triển tốt đẹp. Tone màu hồng của hoa ly và hoa đồng tiền chắc chắn sẽ là món quà tặng đặc biệt dành cho khai trương, kỷ niệm thành lập công ty, chúc mừng đối tác.',N'Kệ chúc mừng Phồn Vinh gồm các loại hoa tươi: - 15 Lily hồng - 17 Môn xanh - 30 Đồng tiền hồng nhí - 20 Mõm sói song hỷ',
	'5525_phon-vinh.jpg',GETDATE(),1
)
  • Ảnh mẫu (tải source code về sẽ có)

Tạo ứng dựng Java Web Truy xuất cơ sở dữ liệu SQL Server

Bước 1: Mở Eclipse tạo Dynamic Web Project với tên "JSPServletSession05", lưu ý lúc tạo tích chọn để sinh file web.xml

Bước 2: Convert project sang Maven: Kích chuột phải vào project chọn Configure -> Convert to Maven -> Finish

Bước 3: Bổ sung dependencies jstl mssql-jdbc trong file pom.xml

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<dependencies>
		<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- https://mvnrepository.com/artifact/com.microsoft.sqlserver/mssql-jdbc -->
		<dependency>
			<groupId>com.microsoft.sqlserver</groupId>
			<artifactId>mssql-jdbc</artifactId>
			<version>12.5.0.jre11-preview</version>
		</dependency>
</dependencies>

Bước 4: Tạo các trang jsp, Servlet, và các lớp xử lý dữ liệu có cấu trúc như hình sau

  • Tạo trang index.jsp: trang này mặc định sẽ include hiển thị trang flowertables.jsp theo dạng bảng, nếu người dùng chọn menu hoa tươi sẽ inlude và hiển thị trang flowercells.jsp theo dạng ô
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Cửa hàng hoa tươi BKAP</title>
<link rel="stylesheet"
	href="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/css/bootstrap.min.css" />
<style>
#content {
	padding: 15px;
}
</style>
</head>
<body>
	<div class="container">
		<nav class="nav">
			<a class="nav-link active" href="FlowerServlet">Trang chủ</a> <a
				class="nav-link" href="FlowerServlet?action=flowers">Hoa tươi</a> <a
				class="nav-link" href="#">Đăng nhập</a>
		</nav>
		<hr>
		<div id="content">
			<c:if test="${!(empty param.page)}">
				<jsp:include page="${param.page}.jsp"></jsp:include>
			</c:if>
		</div>
	</div>
	<!-- Optional JavaScript -->
	<!-- jQuery first, then Popper.js, then Bootstrap JS -->
	<script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
	<script
		src="https://cdn.jsdelivr.net/npm/popper.js@1.12.9/dist/umd/popper.min.js"></script>
	<script
		src="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/js/bootstrap.min.js"></script>
</body>
</html>
  • Trang flowertables.jsp hiển thị dữ liệu flowers theo dạng bảng
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>

<h4>Danh sách loài hoa trình bày theo dạng bảng</h4>
<p><a href="FlowerServlet?action=add" class="btn btn-primary">Thêm mới</a></p>
<table class="table table-bordered">
	<tr>
		<th>Mã số</th>
		<th>Tên hoa</th>
		<th>Giá</th>
		<th>Ảnh</th>
		<th>Ngày tạo</th>
		<th>Tình trạng</th>
		<th></th>
	</tr>
	<c:forEach items="${flowers}" var="f">
		<tr>
			<td>${f.flowerId}</td>
			<td>${f.flowerName}</td>
			<td>${f.price}</td>
			<td><img src="images/${f.picture}" width="100"/></td>
			<td><f:formatDate value="${f.createDate}" pattern="dd/MM/yyyy"/> </td>
			<td><c:choose>
				<c:when test="${f.active==true}">
					Còn hàng
				</c:when>
				<c:otherwise>
					Hết hàng
				</c:otherwise>
			</c:choose>
			</td>
			<th>
				<a href="FlowerServlet?action=edit&flowerid=${f.flowerId}" class="btn btn-info">Sửa</a>
				<a href="FlowerServlet?action=delete&flowerid=${f.flowerId}" class="btn btn-danger">Xóa</a>
				<a href="FlowerServlet?action=detail&flowerid=${f.flowerId}" class="btn btn-success">Chi tiết</a>
			</th>
		</tr>
	</c:forEach>
</table>
  • Trang flowercells.jsp hiển thị dữ liệu flowers theo dạng ô
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<h4>Danh sách loài hoa trình bày theo dạng ô</h4>
<div class="row">	<c:forEach items="${flowers}" var="f">
		<div class="col-3">
			<div class="card" style="width: 240px">
				<img class="card-img-top" src="images/${f.picture}"/>
				<div class="card-body">
					<h5 class="card-title">${f.flowerName}</h5>
					<p class="card-text">Giá: ${f.price}</p>
					<a href="#" class="btn btn-primary">Mua</a> <a href="FlowerServlet?action=detail&flowerid=${f.flowerId}" class="btn btn-success">Chi tiết</a>
				</div>
			</div>
		</div>
	</c:forEach>
</div>
  • Trang flowerdeails.jsp hiển thị chi tiết flower
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="f" uri="http://java.sun.com/jsp/jstl/fmt"%>
<h4>CHI TIẾT HOA</h4>
<div class="row" style="border: 1px gray solid;border-radius:5px;">
	<div class="col-3">
		<img src="images/${flower.picture}" width="95%" />
	</div>
	<div class="col-9">
		<p>${flower.flowerName}</p>
		<p>
			<span style="text-decoration: line-through; color: red">Giá
				cũ: ${flower.priceOld}</span> Giá mới:
			<f:formatNumber value="${flower.price}" />
			đ
		</p>
		<p>${flower.brief}</p>
	</div>
	<div class="col-12">
		<h4>Mô tả</h4>
		<p>${flower.description}</p>
	</div>
</div>
  • Lớp com.bkap.entities/Flower.java: biểu diễn dữ liệu của flower
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
package com.bkap.entities;

import java.sql.Date;

public class Flower {
	private String flowerId;
	private String flowerName;
	private String unit;
	private float price;
	private float priceOld;
	private String brief;
	private String description;
	private String picture;
	private Date createDate;
	private boolean active;
	public Flower() {
		
	}
	public Flower(String flowerId, String flowerName, String unit, float price, float priceOld, String brief,
			String description, String picture, Date createDate, boolean active) {
		super();
		this.flowerId = flowerId;
		this.flowerName = flowerName;
		this.unit = unit;
		this.price = price;
		this.priceOld = priceOld;
		this.brief = brief;
		this.description = description;
		this.picture = picture;
		this.createDate = createDate;
		this.active = active;
	}

	public String getFlowerId() {
		return flowerId;
	}
	public void setFlowerId(String flowerId) {
		this.flowerId = flowerId;
	}
	public String getFlowerName() {
		return flowerName;
	}
	public void setFlowerName(String flowerName) {
		this.flowerName = flowerName;
	}
	public String getUnit() {
		return unit;
	}
	public void setUnit(String unit) {
		this.unit = unit;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}
	public float getPriceOld() {
		return priceOld;
	}
	public void setPriceOld(float priceOld) {
		this.priceOld = priceOld;
	}
	public String getBrief() {
		return brief;
	}
	public void setBrief(String brief) {
		this.brief = brief;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getPicture() {
		return picture;
	}
	public void setPicture(String picture) {
		this.picture = picture;
	}
	public Date getCreateDate() {
		return createDate;
	}
	public void setCreateDate(Date createDate) {
		this.createDate = createDate;
	}
	public boolean isActive() {
		return active;
	}
	public void setActive(boolean active) {
		this.active = active;
	}
	
}
  • Lớp com.bkap.dao/DatabaseUtil.java: đảm nhiệm việc kết nối với database SQL Server
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package com.bkap.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class DatabaseUtil {
	private static String username="sa";
	private static String password="123465";
	private static String url="jdbc:sqlserver://localhost:1433;databaseName=FlowerStore;Encrypt=True;TrustServerCertificate=True";
	public static Connection getConnect() {
		Connection con=null;
		try {
			Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
			con=DriverManager.getConnection(url,username, password);
		} catch (ClassNotFoundException | SQLException e) {
			e.printStackTrace();
		}
		return con;
	}
}
  • Giao diện com.bkap.dao/FlowerDao.java: khai báo các nghiệp vụ làm việc với bảng Flower
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
package com.bkap.dao;

import java.util.List;

import com.bkap.entities.Flower;

public interface FlowerDao {
	public List<Flower> getAll();
	public Flower getById(String flowerid);
}
  • Lớp com.bkap.dao/FlowerImpl.java: thực thi giao diện FlowerDao và code các nghiệp vụ
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.bkap.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.bkap.entities.Flower;

public class FlowerImpl implements FlowerDao {
	private Connection con = null;

	public FlowerImpl() {
		this.con = DatabaseUtil.getConnect();
	}

	@Override
	public List<Flower> getAll()  {
		List<Flower> data=new ArrayList<>();
		try {
			Statement st = con.createStatement();
			ResultSet rs = st.executeQuery("select * from Flowers");
			while (rs.next()) {
				Flower f=new Flower(rs.getString("flowerid"), rs.getString("flowername"), rs.getString("unit"), rs.getFloat("price"), rs.getFloat("priceold"), rs.getString("brief"), rs.getString("description"), rs.getString("picture"), rs.getDate("createdate"), rs.getBoolean("active"));
				data.add(f);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return data;
	}

	@Override
	public Flower getById(String flowerid) {
		Flower flower=null;
		try {
			PreparedStatement pst = con.prepareStatement("select * from Flowers where flowerid=?");
			pst.setString(1, flowerid);
			ResultSet rs = pst.executeQuery();
			if (rs.next()) {
				flower=new Flower(rs.getString("flowerid"), rs.getString("flowername"), rs.getString("unit"), rs.getFloat("price"), rs.getFloat("priceold"), rs.getString("brief"), rs.getString("description"), rs.getString("picture"), rs.getDate("createdate"), rs.getBoolean("active"));
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return flower;
	}

}
  • Lớp com.bkap.servlets/FlowerServlet.java: Servlet xử lý logic nhận dữ liệu từ tầng DAO và điều hướng chuyển dữ liệu tới các trang jsp để hiện thị
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
package com.bkap.servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bkap.dao.FlowerDao;
import com.bkap.dao.FlowerImpl;

/**
 * Servlet implementation class FlowerServlet
 */
@WebServlet("/FlowerServlet")
public class FlowerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public FlowerServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		FlowerDao flowerDao=new FlowerImpl();
		String action=request.getParameter("action");
		if(action==null) {
			request.setAttribute("flowers", flowerDao.getAll());
			request.getRequestDispatcher("index.jsp?page=flowertables").forward(request, response);
		}else if(action.equals("flowers"))
		{
			request.setAttribute("flowers", flowerDao.getAll());
			request.getRequestDispatcher("index.jsp?page=flowercells").forward(request, response);
		}else if(action.equals("detail")) {
			String flowerid=request.getParameter("flowerid");
			request.setAttribute("flower", flowerDao.getById(flowerid));
			request.getRequestDispatcher("index.jsp?page=flowerdetails").forward(request, response);
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}
  • Mở file web.xml cấu hình trang được gọi khi ứng dụng chạy
1
2
3
4
5
6
7
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  <display-name>JSPServletSession05</display-name>
  <welcome-file-list>
    <welcome-file>FlowerServlet</welcome-file>
  </welcome-file-list>
</web-app>

Bước 5: Run ứng dụng và xem kết quả

  • Khi ứng dụng chạy FlowerServlet sẽ được gọi -> đọc dữ liệu và chuyển tới trang index.jsp đồng thời include trang flowertables.jsp kết quả như hình dưới

  • Khi kích vào menu hoa tươi FlowerServlet sẽ được gọi -> đọc dữ liệu và chuyển tới trang index.jsp đồng thời include trang flowercells.jsp kết quả như hình dưới

  • Khi kích vào nút chi tiết FlowerServlet sẽ được gọi -> đọc dữ liệu và chuyển tới trang index.jsp đồng thời include trang flowerdetails.jsp kết quả như hình dưới

Link tải source code

Video demo

thay lời cảm ơn!

QUẢNG CÁO - TIẾP THỊ