K 개발자

JSP BookMarket 만들기 - 마지막 본문

Web/JSP

JSP BookMarket 만들기 - 마지막

ddingz 2021. 8. 6. 18:13

이전 글
JSP BookMarket 만들기 - 1
JSP BookMarket 만들기 - 2
JSP BookMarket 만들기 - 3
JSP BookMarket 만들기 - 4
JSP BookMarket 만들기 - 5
JSP BookMarket 만들기 - 6
JSP BookMarket 만들기 - 7
JSP BookMarket 만들기 - 8
JSP BookMarket 만들기 - 9
JSP BookMarket 만들기 - 10
JSP BookMarket 만들기 - 11
JSP BookMarket 만들기 - 12
JSP BookMarket 만들기 - 13

실행 환경
자바 개발 환경 : jdk-15.0.2
웹 서버 환경 : Apache Tomcat v9.0
통합 개발 환경 : Eclipse IDE for Enterprise Java Developers
데이터베이스 환경 : MySQL 8.0

데이터베이스 연동하기

도서 웹 쇼핑몰의 데이터베이스가 연동되도록 작성한다.

  • 명령 프롬프트로 MySQL에 접속하여 데이터베이스 이름 BookMarketDB를 생성한다.
  • Data Source Explorer 뷰를 이용하여 커넥션 이름은 BookMarket_Conn, 데이터베이스 이름은 BookMarketDB로 데이터베이스 커넥션을 설정한다.

WebContent 폴더에 sql 폴더를 만든 후 이 폴더에 book.sql 파일을 생성하고 도서 관리 테이블 Book을 생성한다.

-- book.sql
CREATE TABLE IF NOT EXISTS Book (
	b_id VARCHAR(10) NOT NULL,
	b_name VARCHAR(20),
	b_unitPrice INTEGER,
	b_author VARCHAR(50),
	b_publisher VARCHAR(20),
	b_description TEXT,
	b_category VARCHAR(20),
	b_unitsInStock LONG,
	b_totalPages LONG,
	b_releaseDate VARCHAR(20),
	b_condition VARCHAR(20),
	b_fileName VARCHAR(20),
	PRIMARY KEY (b_id)
) DEFAULT CHARSET = utf8;

WebContent/sql 폴더에 insert.sql 파일을 생성하고 도서 목록을 삽입한다.

-- insert.sql
INSERT INTO Book VALUES ('ISBN1234', 'HTML5+CSS3', 15000, '황재호', '한빛미디어', '워드나 PPT 문서를 만들 수 있나요? 그러면 문제 없습니다. 지금 바로 웹페이지 제작에 도전해보세요. 지금 당장 컴퓨터가 없어도 괜찮습니다. 코드와 실행 화면이 바로 보여서 눈으로만 읽어도 어떻게 작동하는지 쉽게 파악할 수 있는 것은 기본이고, 중간중간 퀴즈를 추가하여 재미있게 게임하듯 복습할 수 있습니다.', 'Hello Coding', 1000, 288, '2018/03/02', 'new', 'ISBN1234.jpg');
INSERT INTO Book VALUES ('ISBN1235', '쉽게 배우는 자바 프로그래밍', 27000, '우종정', '한빛아카데미', '객체 지향의 핵심과 자바의 현대적 기능을 충실히 다루면서도초보자가 쉽게 학습할 수 있게 구성했습니다. 시각화 도구를 활용한 개념 설명과 군더더기 없는 핵심 코드를 통해 개념과 구현을 한 흐름으로 학습할 수 있습니다. 또한 ‘기초 체력을 다지는 예제 → 셀프 테스트 → 생각을 논리적으로 정리하며 한 단계씩 풀어 가는 도전 과제 → 스토리가 가미된 흥미로운 프로그래밍 문제’ 등을 통해 프로그래밍 실력을 차근차근 끌어올릴 수 있습니다.', 'IT모바일', 1000, 692, '2017/08/02', 'new', 'ISBN1235.jpg');
INSERT INTO Book VALUES ('ISBN1236', '스프링 4입문', 27000, '하세가와 유이치, 오오노 와타루, 토키 코헤이(권은철, 전민수)', '한빛미디어', '스프링은 단순히 사용 방법만 익히는 것보다 아키텍처를 어떻게 이해하고 설계하는지가 더 중요합니다. 예제를 복사해 붙여넣는 식으로는 실제 개발에서 스프링을 제대로 활용할 수 없습니다. 이 책에서는 웹 애플리케이션의 기초를 다지고 스프링 코어를 살펴보며 클라우드 네이티브 입문까지 다룹니다. 이제 막 실무에 뛰어든 웹 애플리케이션 초급자나 개발 경험은 있지만 스프링은 사용해본 적 없는 분을 대상으로 가능한 한 쉽게 설명합니다.', 'IT모바일', 1000, 520, '2017/11/01', 'new', 'ISBN1236.jpg');

WebContent/WEB-INF/lib 폴더에 커넥트 드라이버 mysql-connector-java-8.0.25.jar 파일을 등록한다.
WebContent 폴더의 메뉴 페이지 menu.jsp 파일에 [도서목록], [도서등록], [도서수정], [도서삭제] 메뉴를 추가 작성한다.

<%-- menu.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<nav class="navbar navbar-expand navbar-dark bg-dark">
	<div class="container">
		<div class="navbar-header">
			<a class="navbar-brand" href="./welcome.jsp">Home</a>
		</div>
		<div>
			<ul class="navbar-nav mr-aouto">
				<li class="nav-item"><a class="nav-link" href="./books.jsp">도서목록</a></li>
				<li class="nav-item"><a class="nav-link" href="./addBook.jsp">도서등록</a></li>
				<li class="nav-item"><a class="nav-link"
					href="./editBook.jsp?edit=update">도서수정</a></li>
				<li class="nav-item"><a class="nav-link"
					href="./editBook.jsp?edit=delete">도서삭제</a></li>
			</ul>
		</div>
	</div>
</nav>

Book 테이블에 저장된 도서 목록을 출력하도록 WebContent 폴더의 books.jsp 파일을 수정한다.

<%-- books.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<title>도서 목록</title>
</head>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">도서 목록</h1>
		</div>
	</div>
	<div class="container">
		<%@ include file="dbconn.jsp"%>
		<%
			PreparedStatement pstmt = null;
			ResultSet rs = null;
			String sql = "SELECT * FROM Book";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
		%>
		<div class="row">
			<div class="col-md-3" align="center">	
				<img src="c:/upload/<%=rs.getString("b_fileName")%>"
					style="width: 50%">
			</div>
			<div class="col-md-7">
				<p><h5><b>[<%=rs.getString("b_category")%>] <%=rs.getString("b_name")%></b></h5>
				<p style="padding-top: 20px"><%=rs.getString("b_description").substring(0, 100)%>...
				<p><%=rs.getString("b_author")%> | <%=rs.getString("b_publisher")%> | <%=rs.getString("b_unitPrice")%>원
			</div>
			<div class="col-md-2" style="padding-top: 70px">
				<a href="./book.jsp?id=<%=rs.getString("b_id")%>"
					class="btn btn-secondary" role="button">상세정보 &raquo;</a>
			</div>
		</div>
		<hr>
		<%
			}
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			if (conn != null)
				conn.close();
		%>
	</div>
	<jsp:include page="footer.jsp" />
</body>
</html>

Book 테이블에 저장된 도서 상세 정보를 출력하도록 WebContent 폴더의 book.jsp 파일을 수정한다.

<%-- book.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page errorPage="exceptionNoBookId.jsp"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<title>도서 상세 정보</title>
<script type="text/javascript">
	function addToCart() {
		if (confirm("도서를 장바구니에 추가하시겠습니까?")) {
			document.addForm.submit();
		} else {
			document.addForm.reset();
		}
	}
</script>
</head>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-4">도서 정보</h1>
		</div>
	</div>
	<%@ include file="dbconn.jsp"%>
	<%
		String bookId = request.getParameter("id");

		PreparedStatement pstmt = null;
		ResultSet rs = null;

		String sql = "SELECT * FROM Book WHERE b_id = ?";
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, bookId);
		rs = pstmt.executeQuery();
		if (rs.next()) {
	%>
	<div class="container">
		<div class="row">
			<div class="col-md-4">
				<img src="c:/upload/<%=rs.getString("b_fileName")%>"
					style="width: 100%" />
			</div>
			<div class="col-md-8">
				<h4><b>[<%=rs.getString("b_category")%>]<%=rs.getString("b_name")%></b></h4>
				<p><%=rs.getString("b_description")%>
				<p><b>도서코드 : </b><span class="badge badge-danger"> <%=rs.getString("b_id")%></span>
				<p><b>저자</b> : <%=rs.getString("b_author")%>
				<p><b>출판사</b> : <%=rs.getString("b_publisher")%>
				<p><b>출판일</b> : <%=rs.getString("b_releaseDate")%>
				<p><b>총 페이지수</b> : <%=rs.getString("b_totalPages")%>
				<p><b>재고수</b> : <%=rs.getString("b_unitsInStock")%>
				<h4><%=rs.getString("b_unitPrice")%>원</h4>
				<p><form name="addForm" action="./addCart.jsp?id=<%=rs.getString("b_id")%>" method="post">
					<a href="#" class="btn btn-info" onclick="addToCart()">도서주문 &raquo;</a>
					<a href="./cart.jsp" class="btn btn-warning">장바구니 &raquo;</a>
					<a href="./books.jsp" class="btn btn-secondary">도서목록 &raquo;</a>
				</form>
			</div>
		</div>
		<hr>
	</div>
	<%
		}
		if (rs != null)
			rs.close();
		if (pstmt != null)
			pstmt.close();
		if (conn != null)
			conn.close();
	%>
	<jsp:include page="footer.jsp" />
</body>
</html>

새로운 도서가 Book 테이블에 등록되도록 WebContent 폴더의 processAddBook.jsp 파일을 수정한다.

<%-- processAddBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ include file="dbconn.jsp"%>

<%
	request.setCharacterEncoding("UTF-8");

	String filename = "";
	String realFolder = "C:\\upload"; // 웹 어플리케이션상의 절대 경로
	String encType = "utf-8"; // 인코딩 타입
	int maxSize = 5 * 1024 * 1024; // 최대 업로드될 파일의 크기5MB
	
	MultipartRequest multi = new MultipartRequest(request, realFolder, maxSize, encType, 
			new DefaultFileRenamePolicy());

	String bookId = multi.getParameter("bookId");
	String name = multi.getParameter("name");
	String unitPrice = multi.getParameter("unitPrice");
	String author = multi.getParameter("author");
	String publisher = multi.getParameter("publisher");
	String releaseDate = multi.getParameter("releaseDate");
	String totalPages = multi.getParameter("totalPages");
	String description = multi.getParameter("description");	
	String category = multi.getParameter("category");
	String unitsInStock = multi.getParameter("unitsInStock");
	String condition = multi.getParameter("condition");
	
	Integer price;

	if (unitPrice.isEmpty())
		price = 0;
	else
		price = Integer.valueOf(unitPrice);

	long stock;

	if (unitsInStock.isEmpty())
		stock = 0;
	else
		stock = Long.valueOf(unitsInStock);
	
	long pages;

	if (totalPages.isEmpty())
		pages = 0;
	else
		pages = Long.valueOf(totalPages);
	
	Enumeration files = multi.getFileNames();
	String fname = (String) files.nextElement();
	String fileName = multi.getFilesystemName(fname);
	
	PreparedStatement pstmt = null;

	String sql = "INSERT INTO Book VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
	pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, bookId);
	pstmt.setString(2, name);
	pstmt.setInt(3, price);
	pstmt.setString(4, author);
	pstmt.setString(5, publisher);
	pstmt.setString(6, description);
	pstmt.setString(7, category);
	pstmt.setLong(8, stock);
	pstmt.setLong(9, pages);
	pstmt.setString(10, releaseDate);
	pstmt.setString(11, condition);
	pstmt.setString(12, fileName);
	pstmt.executeUpdate();

	if (pstmt != null)
		pstmt.close();
	if (conn != null)
		conn.close();

	response.sendRedirect("books.jsp");
%>

데이터베이스에 저장된 도서를 수정하도록 작성한다.

  • 도서 편집 페이지 editBook.jsp의 접근이 제한되도록 WebContent/WEB-INF 폴더의 web.xml 파일을 추가 작성한다.
  • WebContent 폴더에 editBook.jsp 파일을 생성하고, [도서수정] 메뉴를 클릭하면 해당 페이지에 <수정> 버튼이 출력되도록 작성한다.
  • WebContent 폴더에 updateBook.jsp 파일을 생성한 후, 선택된 도서 정보를 출력하고 processUpdateBook.jsp 파일을 생성하여 수정된 정보를 처리하도록 작성한다.
<?xml version="1.0" encoding="UTF-8"?>
<!-- web.xml -->

<web-app>
	<security-role>
		<description></description>
		<role-name>admin</role-name>
	</security-role>
	<security-constraint>
		<display-name>BookMarket Security</display-name>
		<web-resource-collection>
			<web-resource-name>BookMarket</web-resource-name>
			<description></description>
			<url-pattern>/addBook.jsp</url-pattern>
			<url-pattern>/editBook.jsp</url-pattern>
		</web-resource-collection>
		<auth-constraint>
			<description>권한 관리자명</description>
			<role-name>admin</role-name>
		</auth-constraint>
	</security-constraint>
	<login-config>
		<auth-method>FORM</auth-method>
		<form-login-config>
			<form-login-page>/login.jsp</form-login-page>
			<form-error-page>/login_failed.jsp</form-error-page>
		</form-login-config>
	</login-config>
	<error-page>
		<error-code>404</error-code>
		<location>/exceptionNoPage.jsp</location>
	</error-page>
	<filter>
		<filter-name>LogFilter</filter-name>
		<filter-class>filter.LogFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>LogFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	<filter>
		<filter-name>LogFileFilter</filter-name>
		<filter-class>filter.LogFileFilter</filter-class>
		<init-param>
			<param-name>filename</param-name>
			<param-value>c:\\logs\\bookmarket.log</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>LogFileFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
<%-- editBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<title>도서 편집</title>
</head>
<%
	String edit = request.getParameter("edit");
%>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">도서 편집</h1>
		</div>
	</div>
	<div class="container">
		<%@ include file="dbconn.jsp"%>
		<%
			PreparedStatement pstmt = null;
			ResultSet rs = null;

			String sql = "SELECT * FROM Book";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
		%>
		<div class="row">
			<div class="col-md-3" align="center">
				<img src="c:/upload/<%=rs.getString("b_fileName")%>"
					style="width: 50%">
			</div>
			<div class="col-md-7">
				<p><h5><b>[<%=rs.getString("b_category")%>] <%=rs.getString("b_name")%></b></h5>
				<p style="padding-top: 20px"><%=rs.getString("b_description").substring(0, 100)%>...
				<p><%=rs.getString("b_author")%> | <%=rs.getString("b_publisher")%> | <%=rs.getString("b_unitPrice")%>원
			</div>
			<div class="col-md-2" style="padding-top: 70px">
				<p><%
					if (edit.equals("update")) {
				%>
				<a href="./updateBook.jsp?id=<%=rs.getString("b_id")%>"
					class="btn btn-success" role="button">수정 &raquo;</a>
				<%
					}
				%>
			</div>
		</div>
		<hr>
		<%
			}
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			if (conn != null)
				conn.close();
		%>
	</div>
	<jsp:include page="footer.jsp" />
</body>
</html>
<%-- updateBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<title>도서 수정</title>
</head>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">도서 수정</h1>
		</div>
	</div>
	<%@ include file="dbconn.jsp"%>
	<%
		String bookId = request.getParameter("id");

		PreparedStatement pstmt = null;
		ResultSet rs = null;

		String sql = "SELECT * FROM Book WHERE b_id = ?";
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, bookId);
		rs = pstmt.executeQuery();
		if (rs.next()) {
	%>
	<div class="container">
		<div class="row">
			<div class="col-md-5">
				<img src="c:/upload/<%=rs.getString("b_fileName")%>" alt="image"
					style="width: 100%" />
			</div>
			<div class="col-md-7">
				<form name="newBook" action="./processUpdateBook.jsp"
					class="form-horizontal" method="post" enctype="multipart/form-data">
					<div class="form-group row">
						<label class="col-sm-2">도서코드</label>
						<div class="col-sm-3">
							<input type="text" id="bookId" name="bookId" class="form-control"
								value='<%=rs.getString("b_id")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">도서명</label>
						<div class="col-sm-3">
							<input type="text" id="name" name="name" class="form-control"
								value='<%=rs.getString("b_name")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">가격</label>
						<div class="col-sm-3">
							<input type="text" id="unitPrice" name="unitPrice"
								class="form-control" value='<%=rs.getString("b_unitPrice")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">저자</label>
						<div class="col-sm-3">
							<input type="text" name="author" class="form-control"
								value='<%=rs.getString("b_author")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">출판사</label>
						<div class="col-sm-3">
							<input type="text" name="publisher" class="form-control"
								value='<%=rs.getString("b_publisher")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">출판일</label>
						<div class="col-sm-3">
							<input type="text" name="releaseDate" class="form-control"
								value='<%=rs.getString("b_releaseDate")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">총페이지 수</label>
						<div class="col-sm-3">
							<input type="text" name="totalPages" class="form-control"
								value='<%=rs.getString("b_totalPages")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">상세정보</label>
						<div class="col-sm-5">
							<textarea name="description" cols="50" rows="2"
								class="form-control" placeholder="100자 이상 적어주세요"><%=rs.getString("b_description")%></textarea>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">분류</label>
						<div class="col-sm-3">
							<input type="text" name="category" class="form-control"
								value='<%=rs.getString("b_category")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">재고수</label>
						<div class="col-sm-3">
							<input type="text" id="unitsInStock" name="unitsInStock"
								class="form-control" value='<%=rs.getString("b_unitsInStock")%>'>
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">상태</label>
						<div class="col-sm-5">
							<input type="radio" name="condition" value="New">신규 도서
							<input type="radio" name="condition" value="Old">중고 도서
							<input type="radio" name="condition" value="EBook">E-Book
						</div>
					</div>
					<div class="form-group row">
						<label class="col-sm-2">이미지</label>
						<div class="col-sm-5">
							<input type="file" name="bookImage" class="form-control">
						</div>
					</div>
					<div class="form-group row">
						<div class="col-sm-offset-2 col-sm-10 ">
							<input type="submit" class="btn btn-primary" value="등록">
						</div>
					</div>
				</form>
			</div>
		</div>
	</div>
	<%
		}
		if (rs != null)
			rs.close();
		if (pstmt != null)
			pstmt.close();
		if (conn != null)
			conn.close();
	%>
</body>
</html>
<%-- processUpdateBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="com.oreilly.servlet.*"%>
<%@ page import="com.oreilly.servlet.multipart.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.sql.*"%>
<%@ include file="dbconn.jsp"%>

<%
	String filename = "";
	String realFolder = "C:\\upload"; // 웹 어플리케이션상의 절대 경로
	String encType = "utf-8"; // 인코딩 타입
	int maxSize = 5 * 1024 * 1024; // 최대 업로드될 파일의 크기5MB
	
	MultipartRequest multi = new MultipartRequest(request, realFolder, maxSize, encType, 
			new DefaultFileRenamePolicy());

	String bookId = multi.getParameter("bookId");
	String name = multi.getParameter("name");
	String unitPrice = multi.getParameter("unitPrice");
	String author = multi.getParameter("author");
	String publisher = multi.getParameter("publisher");
	String releaseDate = multi.getParameter("releaseDate");
	String totalPages = multi.getParameter("totalPages");
	String description = multi.getParameter("description");	
	String category = multi.getParameter("category");
	String unitsInStock = multi.getParameter("unitsInStock");
	String condition = multi.getParameter("condition");
	
	Integer price;

	if (unitPrice.isEmpty())
		price = 0;
	else
		price = Integer.valueOf(unitPrice);

	long stock;

	if (unitsInStock.isEmpty())
		stock = 0;
	else
		stock = Long.valueOf(unitsInStock);
	
	long pages;

	if (totalPages.isEmpty())
		pages = 0;
	else
		pages = Long.valueOf(totalPages);
	
	Enumeration files = multi.getFileNames();
	String fname = (String) files.nextElement();
	String fileName = multi.getFilesystemName(fname);
	
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	
	String sql = "SELECT * FROM Book WHERE b_id = ?";
	pstmt = conn.prepareStatement(sql);
	pstmt.setString(1, bookId);
	rs = pstmt.executeQuery();
	
	if (rs.next()) {
		if (fileName != null) {
			sql = "UPDATE Book SET b_name = ?, b_unitPrice = ?, b_author = ?, b_publisher = ?, b_description = ?, b_category = ?, b_unitsInStock = ?, b_totalPages = ?, b_releaseDate = ?, b_condition = ?, b_fileName = ? WHERE b_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setInt(2, price);
			pstmt.setString(3, author);
			pstmt.setString(4, publisher);
			pstmt.setString(5, description);
			pstmt.setString(6, category);
			pstmt.setLong(7, stock);
			pstmt.setLong(8, pages);
			pstmt.setString(9, releaseDate);
			pstmt.setString(10, condition);
			pstmt.setString(11, fileName);
			pstmt.setString(12, bookId);
			pstmt.executeUpdate();
		} else {
			sql = "UPDATE Book SET b_name = ?, b_unitPrice = ?, b_author = ?, b_publisher = ?, b_description = ?, b_category = ?, b_unitsInStock = ?, b_totalPages = ?, b_releaseDate = ?, b_condition = ? WHERE b_id = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, name);
			pstmt.setInt(2, price);
			pstmt.setString(3, author);
			pstmt.setString(4, publisher);
			pstmt.setString(5, description);
			pstmt.setString(6, category);
			pstmt.setLong(7, stock);
			pstmt.setLong(8, pages);
			pstmt.setString(9, releaseDate);
			pstmt.setString(10, condition);
			pstmt.setString(11, bookId);
			pstmt.executeUpdate();
		}
	}
	if (rs != null)
		rs.close();
	if (pstmt != null)
		pstmt.close();
	if (conn != null)
		conn.close();
	
	response.sendRedirect("editBook.jsp?edit=update");
%>

데이터베이스에 저장된 도서를 삭제하도록 작성한다.

  • WebContent 폴더의 editBook.jsp 파일에 [도서삭제] 메뉴를 추가하고, 이 메뉴를 클릭하면 해당 페이지에 <삭제> 버튼이 출력되도록 작성한다.
  • WebContent 폴더에 deleteBook.jsp 파일을 생성하고, 선택된 도서가 테이블에서 삭제되도록 작성한다.
<%-- editBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css">
<title>도서 편집</title>
<script type="text/javascript">
	function deleteConfirm(id) {
		if (confirm("해당 도서를 삭제합니다!!") == true)
			location.href = "./deleteBook.jsp?id=" + id;
		else
			return;
	}
</script>
</head>
<%
	String edit = request.getParameter("edit");
%>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">도서 편집</h1>
		</div>
	</div>
	<div class="container">
		<%@ include file="dbconn.jsp"%>
		<%
			PreparedStatement pstmt = null;
			ResultSet rs = null;

			String sql = "SELECT * FROM Book";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while (rs.next()) {
		%>
		<div class="row">
			<div class="col-md-3" align="center">
				<img src="c:/upload/<%=rs.getString("b_fileName")%>"
					style="width: 50%">
			</div>
			<div class="col-md-7">
				<p><h5><b>[<%=rs.getString("b_category")%>] <%=rs.getString("b_name")%></b></h5>
				<p style="padding-top: 20px"><%=rs.getString("b_description").substring(0, 100)%>...
				<p><%=rs.getString("b_author")%> | <%=rs.getString("b_publisher")%> | <%=rs.getString("b_unitPrice")%>원
			</div>
			<div class="col-md-2" style="padding-top: 70px">
				<p><%
					if (edit.equals("update")) {
				%>
				<a href="./updateBook.jsp?id=<%=rs.getString("b_id")%>"
					class="btn btn-success" role="button">수정 &raquo;</a>
				<%
					} else if (edit.equals("delete")) {
				%>
				<a href="#" onclick="deleteConfirm('<%=rs.getString("b_id")%>')"
					class="btn btn-danger" role="button">삭제 &raquo;</a>
				<%
					}
				%>
			</div>
		</div>
		<hr>
		<%
			}
			if (rs != null)
				rs.close();
			if (pstmt != null)
				pstmt.close();
			if (conn != null)
				conn.close();
		%>
	</div>
	<jsp:include page="footer.jsp" />
</body>
</html>
<%-- deleteBook.jsp --%>
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%>
<%@ include file="dbconn.jsp"%>
<%
	String bookId = request.getParameter("id");

	PreparedStatement pstmt = null;
	ResultSet rs = null;

	String sql = "SELECT * FROM Book";
	pstmt = conn.prepareStatement(sql);
	rs = pstmt.executeQuery();

	if (rs.next()) {
		sql = "DELETE FROM Book WHERE b_id = ?";
		pstmt = conn.prepareStatement(sql);
		pstmt.setString(1, bookId);
		pstmt.executeUpdate();
	} else
		out.println("일치하는 도서가 없습니다");

	if (rs != null)
		rs.close();
	if (pstmt != null)
		pstmt.close();
	if (conn != null)
		conn.close();

	response.sendRedirect("editBook.jsp?edit=delete");
%>

웹 브라우저에 'http://localhost:8080/BookMarket/books.jsp'를 입력하여 실행 결과를 확인한다.

'Web > JSP' 카테고리의 다른 글

JSP BookMarket 만들기 - 13  (0) 2021.08.06
JSP BookMarket 만들기 - 12  (0) 2021.08.06
JSP BookMarket 만들기 - 11  (0) 2021.08.06
JSP BookMarket 만들기 - 10  (0) 2021.08.06
JSP BookMarket 만들기 - 9  (0) 2021.08.06
Comments