새 도서 등록 (db연결)
processAddBook.jsp 수정
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="java.sql.*"%>
<%@ include file="dbconn.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String realFolder = "C:\\java\\upload"; // 웹 어플리케이션상의 절대 경로
String encType = "utf-8"; // 인코딩 타입
int maxSize = 5 * 1024 * 1024; // 최대 업로드될 파일의 크기5MB
//입력으로(request, 파일업로드 경로, 파일최대사이즈, 인코딩타입, 파일정책)
MultipartRequest multi = new MultipartRequest(request, realFolder, maxSize, encType,
new DefaultFileRenamePolicy());
//MultipartRequest 객체로 모두 바꾼다.
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; //가격이 없을 경우 price= 0이다
else price = Integer.valueOf(unitPrice);//문자열을 숫자로 변환해준다
long stock; //재고수를 숫자로 변환
if (unitsInStock.isEmpty()) stock = 0;
else stock = Long.valueOf(unitsInStock); //문자열을 숫자로 바꿔준다.
Enumeration files = multi.getFileNames(); //폼 요소 중 file 속성을 가진 파라미터 이름을 Enumeration 객체로 반환합니다.
String fname = (String) files.nextElement(); //첫번째 파라미터이름
String fileName = multi.getFilesystemName(fname);//실제 서버상에 업로드 된 파일 이름을 String 객체로 반환
long pages;
//도서총페이지수 없으면 0 있으면 정수변환(Long타입)
if (totalPages.isEmpty()) pages = 0;
else pages = Long.valueOf(totalPages);
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");
%>
도서 수정 페이지 추가
processAddBook.jsp 수정
books.jsp 복사해서
editBook.jsp 만듬
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<title>도서 편집</title>
</head>
<body>
<%
/* 편집 페이지의 edit 파라미터가 update라면 수정 */
String edit = request.getParameter("edit");
%>
<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="/upload/<%=rs.getString("fileName")%>" style="width: 100%" />
</div>
<div class="col-md-7">
<p>
<h5>
<b>[<%=rs.getString("category")%>] <%=rs.getString("name")%></b>
</h5>
<p style="padding-top: 20px"><%=rs.getString("description").substring(0, 100)%>...
<p><%=rs.getString("author")%>
|
<%=rs.getString("publisher")%>
|
<%=rs.getString("unitPrice")%>원
</div>
<div class="col-md-2" style="padding-top: 70px">
<p><%
if(edit.equals("update")){
%>
<a href="./updateBook.jsp?id=<%=rs.getString("id")%>"
class="btn btn-secondary" role="button">수정 »</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>
***** menu.jsp 에서 도서 수정의 링크는 아래와 같다.
그래서 edit의 파라미터가 update라면 수정
관리자만 수정할 수 있게
web.xml 관리자 권한 url 추가
<!--관리자 권한인 url 적용 -->
<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>
editBook.jsp
수정페이지
updateBook.jsp 파일 생성
<%@ page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>도서 수정</title>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<script src="./resources/js/validation.js"></script>
</head>
<body>
<%@ include file="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 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="/upload/<%=rs.getString("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("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("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("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("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("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("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("totalPages")%>'>
</div>
</div>
<div class="form-group row">
<label class="col-sm-2">상세정보</label>
<div class="col-sm-10">
<textarea name="description" cols="100" rows="4"
class="form-control" placeholder="100자 이상 적어주세요"><%=rs.getString("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("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("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>
processAddBook. jsp 복사해서 processUpdateBook.jsp 파일 생성
<%@page import="java.util.Enumeration"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page import="java.sql.*"%>
<%@ include file="dbconn.jsp"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String realFolder = "C:\\java\\upload"; // 웹 어플리케이션상의 절대 경로
String encType = "utf-8"; // 인코딩 타입
int maxSize = 5 * 1024 * 1024; // 최대 업로드될 파일의 크기5MB
//입력으로(request, 파일업로드 경로, 파일최대사이즈, 인코딩타입, 파일정책)
MultipartRequest multi = new MultipartRequest(request, realFolder, maxSize, encType, new DefaultFileRenamePolicy());
//MultipartRequest 객체로 모두 바꾼다.
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; //가격이 없을 경우 price= 0이다
else
price = Integer.valueOf(unitPrice);//문자열을 숫자로 변환해준다
long stock; //재고수를 숫자로 변환
if (unitsInStock.isEmpty())
stock = 0;
else
stock = Long.valueOf(unitsInStock); //문자열을 숫자로 바꿔준다.
Enumeration files = multi.getFileNames(); //폼 요소 중 file 속성을 가진 파라미터 이름을 Enumeration 객체로 반환합니다.
String fname = (String) files.nextElement(); //첫번째 파라미터이름
String fileName = multi.getFilesystemName(fname);//실제 서버상에 업로드 된 파일 이름을 String 객체로 반환
long pages;
//도서총페이지수 없으면 0 있으면 정수변환(Long타입)
if (totalPages.isEmpty())
pages = 0;
else
pages = Long.valueOf(totalPages);
PreparedStatement pstmt = null;
ResultSet rs = null; //책이 있는지 없는지 체크
//실제 DB에 ID에 맞는 책이 있는지 없는지 체크
String sql = "SELECT * FROM Book WHERE id = ?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, bookId);
rs = pstmt.executeQuery();
//업데이트 할 제품이 있는지 확인 후 있으면 업데이트한다.
if (rs.next()) {
//파일이름이 있으면 이미지 업데이트하고, 없으면 이미지는 업데이트 하지 않는다.
if (fileName != null) {
sql = "UPDATE Book SET name = ?, unitPrice = ?, author = ?, publisher = ?, description = ?, category = ?, unitsInStock = ?, totalPages = ?, releaseDate = ?, b_condition = ?, fileName = ? WHERE 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 name = ?, unitPrice = ?, author = ?, publisher = ?, description = ?, category = ?, unitsInStock = ?, totalPages = ?, releaseDate = ?, b_condition = ? WHERE 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");
%>
editBook.jsp 삭제함수 추가 및 if문 수정
<div class="col-md-2" style="padding-top: 70px">
<p>
<%
if (edit.equals("update")) {
%>
<a href="./updateBook.jsp?id=<%=rs.getString("id")%>"
class="btn btn-secondary" role="button">수정 »</a>
<%
} else if (edit.equals("delete")) {
%>
<a href="#" onclick="deleteConfirm('<%=rs.getString("id")%>')"
class="btn btn-danger" role="button">삭제 »</a>
<%
}
%>
</div>
<!--삭제함수-->
<script type="text/javascript">
function deleteConfirm(id) {
if (confirm("해당 도서를 삭제합니다!!") == true)
location.href = "./deleteBook.jsp?id=" + id;
else
return;
}
</script>
deleteBook.jsp 파일 생성
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="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 WHERE id=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, bookId);
rs = pstmt.executeQuery();
if (rs.next()) {
sql = "DELETE FROM Book WHERE 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");
%>
'BACKEND > Jsp' 카테고리의 다른 글
게시판 만들기 2 - 회원가입 , 로그아웃 (0) | 2023.10.10 |
---|---|
게시판 만들기-1( db연결확인 ~ 로그인 ) (0) | 2023.10.10 |
북마켓 프로젝트 9 (0) | 2023.09.26 |
북마켓 프로젝트 8 (0) | 2023.09.26 |
북마켓 프로젝트 7 (0) | 2023.09.25 |