contents
프로젝트 BookMarket 구성도
5.도서목록/상세정보(C/R)
6.도서삭제(D)
7.게시판 삭제(D)
8.도서수정(U)
9.게시판 수정(U)
10.조회수(R/U)
----------------------------------------------------------------
프로젝트 BookMarket 구성도
5.도서목록/상세정보(C/R)
*순서: 1)books.jsp -> 2) Book_ReadOne_Controller.java -> 3) BookRepository.java
↓ 4)<-
5)book.jsp
BookMarket_CRUD/src/main/webapp/book/books.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.sql.*"%> <%@ page import="java.util.*" %> <%@ page import="dto.Book"%> <html> <head> <link href = "./resources/css/bootstrap.min.css" rel="stylesheet"> <title>도서 목록</title> </head> <body> <% //전달된 파라미터 수신 ArrayList<Book> arr = (ArrayList<Book>) request.getAttribute("list"); //캐스팅 필수!(부모객체로 변환됨) Controller(read_All)->request에서 담은 주소 가져오기 %> <div class="container py-4"> <jsp:include page="/menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서목록</h1> <p class="col-md-8 fs-4">BookList</p> </div> </div> <div class="row align-items-md-stretch text-center"> <% for(int i=0; i<arr.size();i++){ Book bk = arr.get(i); %> <div class="col-md-4"> <div class="h-100 p-2"> <img src="./resources/images/<%=bk.getFilename()%>" style="width: 250; height:350" /> <h5><b><%=bk.getName()%></b></h5> <p><%=bk.getAuthor()%> <br> <%=bk.getPublisher()%> | <%=bk.getReleaseDate()%> <p> <%=bk.getDescription().substring(0,60)%>.... <p><%=bk.getUnitPrice()%>원 <p><a href="read_One?id=<%=bk.getBookId()%>" class="btn btn-secondary" role="button"> 상세 정보 »</a> </div> </div> <% } %> </div> <jsp:include page="/footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/Controller/Book_ReadOne_Controller.java
package Controller.Book;
import java.io.IOException; import java.time.LocalDate; import java.util.ArrayList; import com.oreilly.servlet.MultipartRequest; import com.oreilly.servlet.multipart.DefaultFileRenamePolicy; import dao.BookRepository; import dao.MemberRepository; import dto.Book; import dto.Member; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpSession; @WebServlet("/read_One") public class Book_ReadOne_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //전처리 String id = req.getParameter("id"); //모델이동 BookRepository br = BookRepository.getInstance(); Book bk = br.getOneBook(id); //Book DTO 하나만 가져옴 //뷰이동 req.setAttribute("book", bk); //bk 주소 book 변수에 담기(request) RequestDispatcher ds = req.getRequestDispatcher("book/book.jsp"); //book.jsp 이동 ds.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } } |
BookMarket_CRUD/src/main/java/dao/BookRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import dto.Book; public class BookRepository{ //싱글톤 private static BookRepository br = new BookRepository(); public static BookRepository getInstance(){ return br; } private BookRepository() { } Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; //create public void addBook(Book bk) { //데이터베이스에 저장 //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성및 실행 String sql="insert into book values(?,?,?,?,?,?,?,?,?,?,?)"; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1,bk.getBookId()); pstmt.setString(2,bk.getName()); pstmt.setInt(3,bk.getUnitPrice()); pstmt.setString(4,bk.getAuthor()); pstmt.setString(5,bk.getDescription()); pstmt.setString(6,bk.getPublisher()); pstmt.setString(7,bk.getCategory()); pstmt.setLong(8,bk.getUnitsInStock()); pstmt.setString(9,bk.getReleaseDate()); pstmt.setString(10,bk.getCondition()); pstmt.setString(11,bk.getFilename()); pstmt.executeUpdate(); } catch(Exception e) {} } //ResultSet 반환 및 변환(read일 경우) //read_All public ArrayList<Book> getAllBooks() { ArrayList<Book> listOfBooks = new ArrayList<Book>(); //데이터 베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql="select * from book"; try { pstmt = conn.prepareStatement(sql); //ResultSet rs = pstmt.executeQuery(); while(rs.next()) { Book bk = new Book(); //bk 객체 *3개 bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setPublisher(rs.getString("b_publisher")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setDescription(rs.getString("b_description")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); listOfBooks.add(bk); // ArrayList에 저장 } } catch(Exception e) {} return listOfBooks; } public Book getOneBook(String id) { Book bk = new Book(); //데이터 베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성및 실행 String sql = "select * from book where b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); //ResultSet --> DTO로 변환 if(rs.next()) { bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setDescription(rs.getString("b_description")); bk.setPublisher(rs.getString("b_publisher")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); } }catch(Exception e) {} return bk; } //update //delete } |
*public Book getOneBook(String id) {
sql
USE BookMarketDB; drop table book; CREATE TABLE IF NOT EXISTS book( b_id VARCHAR(10) NOT NULL, b_name VARCHAR(20), b_unitPrice INTEGER, b_author VARCHAR(20), b_description TEXT, b_publisher VARCHAR(20), b_category VARCHAR(20), b_unitsInStock LONG, b_releaseDate VARCHAR(20), b_condition VARCHAR(20), b_fileName VARCHAR(20), PRIMARY KEY (b_id) )default CHARSET=utf8; desc book; INSERT INTO book VALUES('ISBN1234', 'C# 프로그래밍', 27000, '우재남','C#을 처음 접하는 독자를 대상으로 일대일 수업처럼 자세히 설명한 책이다. 꼭 알아야 할 핵심 개념은 기본 예제로 최대한 쉽게 설명했으며, 중요한 내용은 응용 예제, 퀴즈, 셀프 스터디, 예제 모음으로 한번 더 복습할 수 있다.', '한빛아카데미', 'IT모바일', 1000, '2022/10/06', 'new', 'ISBN1234.jpg'); INSERT INTO book VALUES('ISBN1235', '자바마스터', 30000, '송미영', '자바를 처음 배우는 학생을 위해 자바의 기본 개념과 실습 예제를 그림을 이용하여 쉽게 설명합니다. 자바의 이론적 개념→기본 예제→프로젝트 순으로 단계별 학습이 가능하며, 각 챕터의 프로젝트를 실습하면서 온라인 서점을 완성할 수 있도록 구성하였습니다.', '한빛아카데미', 'IT모바일',1000, '2023/01/01', 'new', 'ISBN1235.jpg'); INSERT INTO book VALUES('ISBN1236', '파이썬 프로그래밍', 30000, '최성철', '파이썬으로 프로그래밍을 시작하는 입문자가 쉽게 이해할 수 있도록 기본 개념을 상세하게 설명하며, 다양한 예제를 제시합니다. 또한 프로그래밍의 기초 원리를 이해하면서 파이썬으로 데이터를 처리하는 기법도 배웁니다.', '한빛아카데미', 'IT모바일', 1000, '2023/01/01', 'new', 'ISBN1236.jpg'); select * from book; |
BookMarket_CRUD/src/main/webapp/book/book.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="dto.Book"%> <%@ page import="dao.BookRepository"%> <%@ page errorPage = "exceptionNoBookId.jsp"%> <html> <head> <link href = "./resources/css/bootstrap.min.css" rel="stylesheet"> <title>도서 정보</title> <script type="text/javascript"> function addToCart() { if (confirm("상품을 장바구니에 추가하시겠습니까?")) { document.addForm.submit(); } else { document.addForm.reset(); } } </script> </head> <body> <div class="container py-4"> <jsp:include page="/menu.jsp"></jsp:include> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서정보</h1> <p class="col-md-8 fs-4">BookInfo</p> </div> </div> <% Book book = (Book) request.getAttribute("book"); %> <div class="row align-items-md-stretch"> <div class="col-md-5"> <img src="./resources/images/<%=book.getFilename()%>" style="width: 70%"> </div> <div class="col-md-6"> <h3><b><%=book.getName()%></b></h3> <p><%=book.getDescription()%> <p><b>도서코드 : </b><span class="badge text-bg-danger"> <%=book.getBookId()%></span> <p><b>저자</b> : <%=book.getAuthor()%> <p><b>출판사</b> : <%=book.getPublisher()%> <p><b>출판일</b> : <%=book.getReleaseDate()%> <p><b>분류</b> : <%=book.getCategory()%> <p><b>재고수</b> : <%=book.getUnitsInStock()%> <h4><%=book.getUnitPrice()%>원</h4> <p><form name="addForm" action="./addCart.jsp?id=<%=book.getBookId()%>" method="post"><a href="#" class="btn btn-info" onclick="addToCart()"> 도서주문 »</a> <a href="./cart.jsp" class="btn btn-warning"> 장바구니 »</a> <a href="./books.jsp" class="btn btn-secondary"> 도서목록 »</a> </form> </div> </div> <jsp:include page="/footer.jsp"></jsp:include> </div> </body> </html> |
* <jsp:include page="/menu.jsp"></jsp:include>/ <jsp:include page="/footer.jsp"></jsp:include>
<% Book book = (Book) request.getAttribute("book"); %> : (Book)캐스팅
실행 결과
![]() |
6.도서삭제(D)
menu.jsp -> editBook.jsp -> Book_Edit_Controller.java -> BookRepository.java
BookMarket_CRUD/src/main/webapp/menu.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page import="dto.Member" %> <%@ page session="false" %> <% HttpSession session = request.getSession(false); Member mb=null; if(session!=null){ mb = (Member)session.getAttribute("member"); } %> <header class="pb-3 mb-4 border-bottom"> <div class="container "> <div class="d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start"> <a href="./welcome.jsp" class="d-flex align-items-center mb-3 mb-md-0 me-md-auto text-dark text-decoration-none"> <svg width="32" height="32" fill="currentColor" class="bi bi-house-fill" viewBox="0 0 16 16"> <path d="M8.707 1.5a1 1 0 0 0-1.414 0L.646 8.146a.5.5 0 0 0 .708.708L8 2.207l6.646 6.647a.5.5 0 0 0 .708-.708L13 5.793V2.5a.5.5 0 0 0-.5-.5h-1a.5.5 0 0 0-.5.5v1.293L8.707 1.5Z"/> <path d="m8 3.293 6 6V13.5a1.5 1.5 0 0 1-1.5 1.5h-9A1.5 1.5 0 0 1 2 13.5V9.293l6-6Z"/> </svg> <span class="fs-4">Home</span> </a> <ul class="nav nav-pills"> <% if(mb==null){ %> <li class="nav-item"><a class="nav-link" href="login">로그인 </a></li> <li class="nav-item"><a class="nav-link" href="addmember">회원 가입</a></li> <%}else {%> <li style="padding-top: 7px">[<%=mb.getName()%>님]</li> <li class="nav-item"><a class="nav-link" href="<c:url value="logout"/>">로그아웃 </a></li> <li class="nav-item"><a class="nav-link" href="<c:url value="/member/updateMember.jsp"/>">회원 수정</a></li> <%} %> <li class="nav-item"><a href="read_All" class="nav-link" >도서 목록</a></li> <li class ="nav-item"><a href = "addBook" class = "nav-link" >도서 등록</a></li> <li class ="nav-item"><a href = "editBook?edit=update" class = "nav-link" >도서 수정</a></li> <li class ="nav-item"><a href = "editBook?edit=delete" class = "nav-link" >도서 삭제</a></li> <li class ="nav-item"><a href = "BoardListAction?pageNum=1" class = "nav-link" >게시판</a></li> </ul> </div> </div> </header> |
BookMarket_CRUD/src/main/webapp/book/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 = "editBook?edit=deleteprocess&id="+id; else return; } </script> </head> <%@ page import="java.util.*" %> <%@ page import="dto.Book" %> <% ArrayList<Book> arr = (ArrayList<Book>) request.getAttribute("books"); String edit = request.getParameter("edit"); %> <body> <div class="container py-4"> <jsp:include page="/menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서 편집</h1> <p class="col-md-8 fs-4">BookEditing</p> </div> </div> <div class="row align-items-md-stretch text-center"> <% for(int i=0; i<arr.size();i++){ Book bk = arr.get(i); %> <div class="col-md-4"> <div class="h-100 p-2 round-3"> <img src="./resources/images/<%=bk.getFilename()%>" style="width: 250; height:350" /> <p><h5><b><%=bk.getName()%></b></h5> <p><%=bk.getAuthor()%> <br> <%=bk.getPublisher()%> | <%=bk.getReleaseDate()%> <p> <%=bk.getDescription().substring(0,60)%>.... <p><%=bk.getUnitPrice()%>원 <p><% if (edit.equals("update")) { %> <a href="./updateBook.jsp?id=<%=bk.getBookId()%>" class="btn btn-success" role="button"> 수정 »</a> <% } else if (edit.equals("delete")) { %> <a href="#" onclick="deleteConfirm('<%=bk.getBookId()%>')" class="btn btn-danger" role="button">삭제 »</a> <% } %> </div> </div> <% } %> </div> <jsp:include page="/footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/Controller/Book_Edit_Controller.java
package Controller.Book;
import java.io.IOException; import java.util.ArrayList; import dao.BookRepository; import dto.Book; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/editBook") public class Book_Edit_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //edit = "update" "delete" "deleteprocess" String edit = req.getParameter("edit"); String id=null; RequestDispatcher ds=null; BookRepository br = BookRepository.getInstance(); ArrayList<Book> ar=null; if(edit.equals("deleteprocess")) { id=req.getParameter("id"); //ISBN1234 br.deleteBook(id); ar = br.getAllBooks(); req.setAttribute("list", ar); ds = req.getRequestDispatcher("book/books.jsp"); }else { ar = br.getAllBooks(); req.setAttribute("edit", edit); //생략해도 리퀘스트는 유지됨 req.setAttribute("books", ar); ds = req.getRequestDispatcher("book/editBook.jsp"); } ds.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } } |
BookMarket_CRUD/src/main/java/dao/BookRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import dto.Book; public class BookRepository{ //싱글톤 private static BookRepository br = new BookRepository(); public static BookRepository getInstance(){ return br; } private BookRepository() { } Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; //create public void addBook(Book bk) { //데이터베이스에 저장 //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성및 실행 String sql="insert into book values(?,?,?,?,?,?,?,?,?,?,?)"; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1,bk.getBookId()); pstmt.setString(2,bk.getName()); pstmt.setInt(3,bk.getUnitPrice()); pstmt.setString(4,bk.getAuthor()); pstmt.setString(5,bk.getDescription()); pstmt.setString(6,bk.getPublisher()); pstmt.setString(7,bk.getCategory()); pstmt.setLong(8,bk.getUnitsInStock()); pstmt.setString(9,bk.getReleaseDate()); pstmt.setString(10,bk.getCondition()); pstmt.setString(11,bk.getFilename()); pstmt.executeUpdate(); } catch(Exception e) {} } //ResultSet 반환 및 변환(read일 경우) //read_All public ArrayList<Book> getAllBooks() { ArrayList<Book> listOfBooks = new ArrayList<Book>(); //데이터 베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql="select * from book"; try { pstmt = conn.prepareStatement(sql); //ResultSet rs = pstmt.executeQuery(); while(rs.next()) { Book bk = new Book(); //bk 객체 *3개 bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setPublisher(rs.getString("b_publisher")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setDescription(rs.getString("b_description")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); listOfBooks.add(bk); // ArrayList에 저장 } } catch(Exception e) {} return listOfBooks; } public Book getOneBook(String id) { Book bk = new Book(); //데이터 베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성및 실행 String sql = "select * from book where b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); //ResultSet --> DTO로 변환 if(rs.next()) { bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setDescription(rs.getString("b_description")); bk.setPublisher(rs.getString("b_publisher")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); } }catch(Exception e) {} return bk; } //update //delete public void deleteBook(String id) { try { conn = DBConnection.connection(); String sql="delete from book where b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.executeUpdate(); }catch(Exception e) {} } } |
실행 결과
![]() |
![]() |
7.게시판 삭제(D)
view.jsp -> Board_Delete_Controller.java -> BoardRepository.java -> list.jsp
BookMarket_CRUD/src/main/webapp/board/view.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page session="false" %> <%@ page import="dto.Board"%> <%@ page import="dto.Member" %> <% //BoardViewAction?num=1&pageNum=1 Board notice = (Board) request.getAttribute("board"); int num = ((Integer) request.getAttribute("num")).intValue(); int nowpage = ((Integer) request.getAttribute("page")).intValue(); HttpSession session = request.getSession(false); Member mb=null; if(session != null){ mb = (Member)session.getAttribute("member"); } %> <html> <head> <link rel="stylesheet" href="./resources/css/bootstrap.min.css" /> <title>Board</title> </head> <body> <div class="container py-4"> <jsp:include page="../menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">게시판</h1> <p class="col-md-8 fs-4">Board</p> </div> </div> <div class="row align-items-md-stretch text-center"> <form name="newUpdate" action="BoardUpdateAction.do?num=<%=notice.getNum()%>&pageNum=<%=nowpage%>" method="post"> <div class="mb-3 row"> <label class="col-sm-2 control-label" >성명</label> <div class="col-sm-3"> <input name="name" class="form-control" value=" <%=notice.getName()%>"> </div> </div> <div class="mb-3 row"> <label class="col-sm-2 control-label" >제목</label> <div class="col-sm-5"> <input name="subject" class="form-control" value=" <%=notice.getSubject()%>" > </div> </div> <div class="mb-3 row"> <label class="col-sm-2 control-label" >내용</label> <div class="col-sm-8" style="word-break: break-all;"> <textarea name="content" class="form-control" cols="50" rows="5"> <%=notice.getContent()%></textarea> </div> </div> <div class="mb-3 row"> <div class="col-sm-offset-2 col-sm-10 "> <% // mb:멤버객체 notice:보드객체 String mid = mb.getId(); String bid = notice.getId(); if(mid.equals(bid)){ %> <p> <a href="BoardDeleteAction?num=<%=notice.getNum()%>&pageNum=<%=nowpage%>" class="btn btn-danger"> 삭제</a> <input type="submit" class="btn btn-success" value="수정 "> <%} %> <a href="BoardListAction?pageNum=<%=nowpage%>" class="btn btn-primary"> 목록</a> </div> </div> </form> </div> <jsp:include page="../footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/Controller/Board_Delete_Controller.java
package Controller.Board;
import java.io.IOException; import dao.BoardRepository; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/BoardDeleteAction") public class Board_Delete_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int num = Integer.parseInt(req.getParameter("num")); int pageNum = Integer.parseInt(req.getParameter("pageNum")); BoardRepository br = BoardRepository.getInstance(); br.deleteBoard(num); resp.sendRedirect("BoardListAction?pageNum="+pageNum); System.out.println("컨트롤러 확인"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } } |
BookMarket_CRUD/src/main/java/dao/BoardRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import dto.Board; public class BoardRepository { //싱글톤 private static BoardRepository br = new BoardRepository(); public static BoardRepository getInstance() { return br; } private BoardRepository() {} //공용변수선언 Connection conn=null; PreparedStatement pstmt= null; ResultSet rs = null; //Create public void addBoard(Board bd) { //데이터베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "insert into Board values(?,?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, null); pstmt.setString(2, bd.getId()); pstmt.setString(3, bd.getName()); pstmt.setString(4, bd.getSubject()); pstmt.setString(5, bd.getContent()); pstmt.setString(6, bd.getRegist_day()); pstmt.setInt(7, bd.getHit()); pstmt.setString(8, bd.getIp()); pstmt.executeUpdate(); //ResultSet }catch(Exception e){} } //Read public int getListCount() { int result = 0; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "select count(*) from board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet 변환 if(rs.next()) { result = rs.getInt("count(*)"); //컬럼명 //result = rs.getInt(1); 첫번째 컬럼 } System.out.println("총게시글의 갯수 : " + result); }catch(Exception e) {} return result; } public Board getOneList(int num) { Board board=null; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); } } catch (SQLException e) {e.printStackTrace();} return board; } public ArrayList<Board> getAllList(int page, int limit){ //페이징 처리된 함수 : 일부 발췌 int total_record = getListCount(); int start = (page - 1) * limit; int index = start + 1; ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = pstmt.executeQuery(); // ResultSet --> DTO --> ArrayList<DTO> while (rs.absolute(index)) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); if (index < (start + limit) && index <= total_record) index++; else break; } } catch (SQLException e) {e.printStackTrace();} return ab; } public ArrayList<Board> getAllList2(){ //페이징 안된 함수 ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); } } catch (SQLException e) {e.printStackTrace();} return ab; } //Update //Delete public void deleteBoard(int num) { try { conn = DBConnection.connection(); String sql ="delete from board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); pstmt.executeUpdate(); }catch(Exception e) {} } } |
BookMarket_CRUD/src/main/webapp/board/list.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page import="java.util.*"%> <%@ page import="dto.Board"%> <%@ page session="false" %> <% //게시글 5개가 담겨있음 ArrayList<Board> boardList = (ArrayList<Board>) request.getAttribute("list"); int total_record = (Integer) request.getAttribute("Total_Record"); int pageNum =(Integer) request.getAttribute("pageNum"); int total_page=(Integer) request.getAttribute("Total_Page"); HttpSession session = request.getSession(false); //String sessionId = (String) session.getAttribute("sessionId"); String sessionId =null; if(session!=null){ sessionId = session.getId(); System.out.println("세션아이디값"+sessionId); }else{ System.out.println("세션아이디값이 없습니다."); } %> <html> <head> <link rel="stylesheet" href="./resources/css/bootstrap.min.css" /> <title>Board</title> <script type="text/javascript"> function checkForm() { let session_value="<%=sessionId%>"; console.log(session_value); if (session_value=="null") { alert("로그인 해주세요."); return false; } location.href = "BoardWriteForm?id=<%=sessionId%>" } </script> </head> <body> <div class="container py-4"> <jsp:include page="../menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">게시판</h1> <p class="col-md-8 fs-4">Board</p> </div> </div> <div class="row align-items-md-stretch text-center"> <form action="<c:url value="./BoardListAction.do"/>" method="post"> <div class="text-end"> <span class="badge text-bg-success">전체 <%=total_record%>건 </span> </div> <div style="padding-top: 20px"> <table class="table table-hover text-center"> <tr> <th>번호</th> <th>제목</th> <th>작성일</th> <th>조회</th> <th>글쓴이</th> </tr> <% for (int j = 0; j < boardList.size() ; j++){ Board notice = (Board) boardList.get(j); %> <tr> <td><%=notice.getNum()%></td> <td><a href="./BoardViewAction?num=<%=notice.getNum()%>&pageNum=<%=pageNum%>"><%=notice.getSubject()%></a></td> <td><%=notice.getRegist_day()%></td> <td><%=notice.getHit()%></td> <td><%=notice.getName()%></td> </tr> <% } %> </table> </div> <div align="center"> <% for(int i=1; i<=total_page;i++){ %> <a href="BoardListAction?pageNum=<%=i%>"> <%if(pageNum==i){ %> <font color='FF0000'><b> [<%=i %>]</b></font> <% } else { %> <font color='000000'> [<%=i %>]</font> <%} %> </a> <%} %> </div> <div class="py-3" align="right"> <a href="#" onclick="checkForm(); return false;" class="btn btn-primary">«글쓰기</a> </div> <div align="left"> <select name="items" class="txt"> <option value="subject">제목에서</option> <option value="content">본문에서</option> <option value="name">글쓴이에서</option> </select> <input name="text" type="text" /> <input type="submit" id="btnAdd" class="btn btn-primary " value="검색 " /> </div> </form> </div> <jsp:include page="../footer.jsp" /> </div> </body> </html> |
실행 결과
![]() |
![]() |
![]() |
8.도서수정(U)
*CR
view Controller <a> ↙ 뷰이동 ↗ /전처리 DTO Repository [form] 모델이동 → add ← ↙ 뷰이동 |
*U
view ISBN1234 [Controller: CTUD [ <a> 수정 → /전처리 ISBN1234 ↙ 모델이동 → [form DTO/form forward: Read Book(DTO) getOne() ← 뷰이동 ] ← update updateSet() [/전처리 DTO ] ↗ 모델이동 → 뷰이동 ] ↙ Redirect: CUD ] |
editBook.jsp -> Book_Update_Controller.java -> updateBook.jsp -> BookRepository.java
BookMarket_CRUD/src/main/webapp/book/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 = "editBook?edit=deleteprocess&id="+id; else return; } </script> </head> <%@ page import="java.util.*" %> <%@ page import="dto.Book" %> <% ArrayList<Book> arr = (ArrayList<Book>) request.getAttribute("books"); String edit = request.getParameter("edit"); %> <body> <div class="container py-4"> <jsp:include page="/menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서 편집</h1> <p class="col-md-8 fs-4">BookEditing</p> </div> </div> <div class="row align-items-md-stretch text-center"> <% for(int i=0; i<arr.size();i++){ Book bk = arr.get(i); %> <div class="col-md-4"> <div class="h-100 p-2 round-3"> <img src="./resources/images/<%=bk.getFilename()%>" style="width: 250; height:350" /> <p><h5><b><%=bk.getName()%></b></h5> <p><%=bk.getAuthor()%> <br> <%=bk.getPublisher()%> | <%=bk.getReleaseDate()%> <p> <%=bk.getDescription().substring(0,60)%>.... <p><%=bk.getUnitPrice()%>원 <p><% if (edit.equals("update")) { %> <a href="updateBook?id=<%=bk.getBookId()%>" class="btn btn-success" role="button"> 수정 »</a> <% } else if (edit.equals("delete")) { %> <a href="#" onclick="deleteConfirm('<%=bk.getBookId()%>')" class="btn btn-danger" role="button">삭제 »</a> <% } %> </div> </div> <% } %> </div> <jsp:include page="/footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/Controller/Book_Update_Controller.java
package Controller.Book;
import java.io.IOException; import com.oreilly.servlet.MultipartRequest; import com.oreilly.servlet.multipart.DefaultFileRenamePolicy; import dao.BookRepository; import dto.Book; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/updateBook") public class Book_Update_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); BookRepository br = BookRepository.getInstance(); Book bk = br.getOneBook(id); req.setAttribute("book", bk); RequestDispatcher ds = req.getRequestDispatcher("book/updateBook.jsp"); ds.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String realFolder = req.getServletContext().getRealPath("/resources/images"); int maxSize = 5 * 1024 * 1024; //최대 업로드될 파일의 크기5Mb String encType = "utf-8"; //인코딩 타입 MultipartRequest multi = new MultipartRequest(req, 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 description = multi.getParameter("description"); String category = multi.getParameter("category"); String unitsInStock = multi.getParameter("unitsInStock"); String condition = multi.getParameter("condition"); String fileName = multi.getFilesystemName("bookImage"); //unitPrice가 문자열이므로 숫자인 price변수를 사용 int price; if (unitPrice.isEmpty()) price = 0; else price = Integer.valueOf(unitPrice); //unitsInStock 문자열 변수이므로 stock이라는 정수변수를 대체사용 long stock; if (unitsInStock.isEmpty()) stock = 0; else stock = Long.valueOf(unitsInStock); // 전처리 - 하나의 객체로 묶음 Book bk = new Book(); bk.setBookId(bookId); bk.setName(name); bk.setUnitPrice(price); bk.setAuthor(author); bk.setPublisher(publisher); bk.setReleaseDate(releaseDate); bk.setDescription(description); bk.setCategory(category); bk.setUnitsInStock(stock); bk.setCondition(condition); bk.setFilename(fileName); BookRepository br = BookRepository.getInstance(); br.updateBook(bk); resp.sendRedirect("read_All"); } } |
BookMarket_CRUD/src/main/webapp/book/updateBook.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="dto.Book"%> <html> <head> <link rel ="stylesheet" href ="./resources/css/bootstrap.min.css" /> <% Book bk = (Book) request.getAttribute("book"); %> <title>도서 수정</title> </head> <body> <div class="container py-4"> <jsp:include page="/menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">도서 수정</h1> <p class="col-md-8 fs-4">Book Updating</p> </div> </div> <div class="row align-items-md-stretch"> <div class="col-md-5"> <img src="./resources/images/<%=bk.getFilename()%>" alt="image" style="width: 100%" /> </div> <div class="col-md-7"> <form name="newBook" action="updateBook" method="post" enctype ="multipart/form-data"> <div class="mb-3 row"> <label class="col-sm-2">도서코드</label> <div class="col-sm-5"> <input type="text" name="bookId" id="bookId" class="form-control" value='<%=bk.getBookId()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">도서명</label> <div class="col-sm-5"> <input type="text" name="name" id="name" class="form-control" value='<%=bk.getName()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">가격</label> <div class="col-sm-5"> <input type="text" name="unitPrice" id="unitPrice"class="form-control" value='<%=bk.getUnitPrice()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">저자</label> <div class="col-sm-5"> <input type="text" name="author" class="form-control" value='<%=bk.getAuthor()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">출판사</label> <div class="col-sm-5"> <input type="text" name="publisher" class="form-control" value='<%=bk.getPublisher()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">출판일</label> <div class="col-sm-5"> <input type="text" name="releaseDate" class="form-control" value='<%=bk.getReleaseDate()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">상세정보</label> <div class="col-sm-8"> <textarea name="description" id="description" cols="50" rows="2" class="form-control" placeholder="100자 이상 적어주세요"><%=bk.getDescription()%></textarea> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">분류</label> <div class="col-sm-5"> <input type="text" name="category" class="form-control" value='<%=bk.getCategory()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">재고수</label> <div class="col-sm-5"> <input type="text" name="unitsInStock" id="unitsInStock"class="form-control" value='<%=bk.getUnitsInStock()%>'> </div> </div> <div class="mb-3 row"> <label class="col-sm-2">상태</label> <div class="col-sm-8"> <input type="radio" name="condition" value="new " <%if(bk.getCondition().equals("new")){%>checked<%}%>>신규도서 <input type="radio" name="condition" value="old" <%if(bk.getCondition().equals("old")){%>checked<%}%>> 중고도서 <input type="radio" name="condition" value="eBook" <%if(bk.getCondition().equals("eBook")){%>checked<%}%>> E-Book </div> </div> <div class="mb-3 row"> <label class="col-sm-2">이미지</label> <div class="col-sm-8"> <input type="file" name="bookImage" class="form-control"> </div> </div> <div class="mb-3 row"> <div class="col-sm-offset-2 col-sm-10 "> <input type="submit" class="btn btn-primary" value="등록 " > </div> </div> </form> </div> <jsp:include page="/footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/dao/BookRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import dto.Book; public class BookRepository{ //싱글톤 private static BookRepository br = new BookRepository(); public static BookRepository getInstance(){ return br; } private BookRepository() { } Connection conn=null; PreparedStatement pstmt=null; ResultSet rs=null; //create public void addBook(Book bk) { //데이터베이스에 저장 //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성및 실행 String sql="insert into book values(?,?,?,?,?,?,?,?,?,?,?)"; try { pstmt = conn.prepareStatement(sql); pstmt.setString(1,bk.getBookId()); pstmt.setString(2,bk.getName()); pstmt.setInt(3,bk.getUnitPrice()); pstmt.setString(4,bk.getAuthor()); pstmt.setString(5,bk.getDescription()); pstmt.setString(6,bk.getPublisher()); pstmt.setString(7,bk.getCategory()); pstmt.setLong(8,bk.getUnitsInStock()); pstmt.setString(9,bk.getReleaseDate()); pstmt.setString(10,bk.getCondition()); pstmt.setString(11,bk.getFilename()); pstmt.executeUpdate(); } catch(Exception e) {} } //ResultSet 반환 및 변환(read일 경우) //read_All public ArrayList<Book> getAllBooks() { ArrayList<Book> listOfBooks = new ArrayList<Book>(); //데이터 베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql="select * from book"; try { pstmt = conn.prepareStatement(sql); //ResultSet rs = pstmt.executeQuery(); while(rs.next()) { Book bk = new Book(); //bk 객체 *3개 bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setPublisher(rs.getString("b_publisher")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setDescription(rs.getString("b_description")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); listOfBooks.add(bk); // ArrayList에 저장 } } catch(Exception e) {} return listOfBooks; } public Book getOneBook(String id) { Book bk = new Book(); //데이터 베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성및 실행 String sql = "select * from book where b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); rs = pstmt.executeQuery(); //ResultSet --> DTO로 변환 if(rs.next()) { bk.setBookId(rs.getString("b_id")); bk.setName(rs.getString("b_name")); bk.setUnitPrice(rs.getInt("b_unitPrice")); bk.setAuthor(rs.getString("b_author")); bk.setDescription(rs.getString("b_description")); bk.setPublisher(rs.getString("b_publisher")); bk.setCategory(rs.getString("b_category")); bk.setUnitsInStock(rs.getLong("b_unitsInStock")); bk.setReleaseDate(rs.getString("b_releaseDate")); bk.setCondition(rs.getString("b_condition")); bk.setFilename(rs.getString("b_fileName")); } }catch(Exception e) {} return bk; } //update public void updateBook(Book bk) { try { //데이터베이스 연결 String sql=null; conn = DBConnection.connection(); //쿼리 작성 및 실행 if(bk.getFilename()!=null) { sql = "UPDATE book SET b_name=?, b_unitPrice=?, b_author=?, b_description=?, b_publisher=?, b_category=?, b_unitsInStock=?, b_releaseDate=?, b_condition=?, b_fileName=? WHERE b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, bk.getName()); pstmt.setInt(2, bk.getUnitPrice()); pstmt.setString(3, bk.getAuthor()); pstmt.setString(4, bk.getDescription()); pstmt.setString(5, bk.getPublisher()); pstmt.setString(6, bk.getCategory()); pstmt.setLong(7, bk.getUnitsInStock()); pstmt.setString(8, bk.getReleaseDate()); pstmt.setString(9, bk.getCondition()); pstmt.setString(10, bk.getFilename()); pstmt.setString(11, bk.getBookId()); pstmt.executeUpdate(); } else { sql = "UPDATE book SET b_name=?, b_unitPrice=?, b_author=?, b_description=?, b_publisher=?, b_category=?, b_unitsInStock=?, b_releaseDate=?, b_condition=? WHERE b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, bk.getName()); pstmt.setInt(2, bk.getUnitPrice()); pstmt.setString(3, bk.getAuthor()); pstmt.setString(4, bk.getDescription()); pstmt.setString(5, bk.getPublisher()); pstmt.setString(6, bk.getCategory()); pstmt.setLong(7, bk.getUnitsInStock()); pstmt.setString(8, bk.getReleaseDate()); pstmt.setString(9, bk.getCondition()); pstmt.setString(10, bk.getBookId()); pstmt.executeUpdate(); } }catch(Exception e) {} } //delete public void deleteBook(String id) { try { conn = DBConnection.connection(); String sql="delete from book where b_id=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.executeUpdate(); }catch(Exception e) {} } } |
*Controller: resp.sendRedirect("read_All"); -> books.jsp
실행 결과
![]() |
![]() |
![]() |
9.게시판 수정(U)
view.jsp -> Board_Update_Controller.java -> Board.java -> BoardRepository.java
BookMarket_CRUD/src/main/webapp/board/view.jsp
<%@ page contentType="text/html; charset=utf-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <%@ page session="false" %> <%@ page import="dto.Board"%> <%@ page import="dto.Member" %> <% //BoardViewAction?num=1&pageNum=1 Board notice = (Board) request.getAttribute("board"); int num = ((Integer) request.getAttribute("num")).intValue(); int nowpage = ((Integer) request.getAttribute("page")).intValue(); HttpSession session = request.getSession(false); Member mb=null; if(session != null){ mb = (Member)session.getAttribute("member"); } %> <html> <head> <link rel="stylesheet" href="./resources/css/bootstrap.min.css" /> <title>Board</title> </head> <body> <div class="container py-4"> <jsp:include page="../menu.jsp" /> <div class="p-5 mb-4 bg-body-tertiary rounded-3"> <div class="container-fluid py-5"> <h1 class="display-5 fw-bold">게시판</h1> <p class="col-md-8 fs-4">Board</p> </div> </div> <div class="row align-items-md-stretch text-center"> <form name="newUpdate" action="BoardUpdateAction?num=<%=notice.getNum()%>&pageNum=<%=nowpage%>" method="post"> <div class="mb-3 row"> <label class="col-sm-2 control-label" >성명</label> <div class="col-sm-3"> <input name="name" class="form-control" value=" <%=notice.getName()%>"> </div> </div> <div class="mb-3 row"> <label class="col-sm-2 control-label" >제목</label> <div class="col-sm-5"> <input name="subject" class="form-control" value=" <%=notice.getSubject()%>" > </div> </div> <div class="mb-3 row"> <label class="col-sm-2 control-label" >내용</label> <div class="col-sm-8" style="word-break: break-all;"> <textarea name="content" class="form-control" cols="50" rows="5"> <%=notice.getContent()%></textarea> </div> </div> <div class="mb-3 row"> <div class="col-sm-offset-2 col-sm-10 "> <% // mb:멤버객체 notice:보드객체 String bid = notice.getId(); if(mb!=null){ String mid = mb.getId(); if(mid.equals(bid)){ %> <p> <a href="BoardDeleteAction?num=<%=notice.getNum()%>&pageNum=<%=nowpage%>" class="btn btn-danger"> 삭제</a> <input type="submit" class="btn btn-success" value="수정 "> <%}}%> <a href="BoardListAction?pageNum=<%=nowpage%>" class="btn btn-primary"> 목록</a> </div> </div> </form> </div> <jsp:include page="../footer.jsp" /> </div> </body> </html> |
BookMarket_CRUD/src/main/java/Controller/Board_Update_Controller.java
package Controller.Board;
import java.io.IOException; import java.time.LocalDate; import dao.BoardRepository; import dto.Board; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/BoardUpdateAction") public class Board_Update_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int num = Integer.parseInt(req.getParameter("num")); int pageNum = Integer.parseInt(req.getParameter("pageNum")); String name = req.getParameter("name"); String subject = req.getParameter("subject"); String content = req.getParameter("content"); String Rday = LocalDate.now().toString(); Board bd = new Board(); bd.setNum(num); bd.setName(name); bd.setSubject(subject); bd.setContent(content); bd.setRegist_day(Rday); BoardRepository br = BoardRepository.getInstance(); br.updateBoard(bd); resp.sendRedirect("BoardListAction?pageNum="+pageNum); } } |
BookMarket_CRUD/src/main/java/dto/Board.java
package dto;
public class Board { private int num; private String id; private String name; private String subject; private String content; private String regist_day; private int hit; private String ip; public Board() { super(); } public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getRegist_day() { return regist_day; } public void setRegist_day(String regist_day) { this.regist_day = regist_day; } public int getHit() { return hit; } public void setHit(int hit) { this.hit = hit; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } @Override public String toString() { return "Board [num=" + num + ", id=" + id + ", name=" + name + ", subject=" + subject + ", content=" + content + ", regist_day=" + regist_day + ", hit=" + hit + ", ip=" + ip + "]"; } } |
BookMarket_CRUD/src/main/java/dao/BoardRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import dto.Board; public class BoardRepository { //싱글톤 private static BoardRepository br = new BoardRepository(); public static BoardRepository getInstance() { return br; } private BoardRepository() {} //공용변수선언 Connection conn=null; PreparedStatement pstmt= null; ResultSet rs = null; //Create public void addBoard(Board bd) { //데이터베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "insert into Board values(?,?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, null); pstmt.setString(2, bd.getId()); pstmt.setString(3, bd.getName()); pstmt.setString(4, bd.getSubject()); pstmt.setString(5, bd.getContent()); pstmt.setString(6, bd.getRegist_day()); pstmt.setInt(7, bd.getHit()); pstmt.setString(8, bd.getIp()); pstmt.executeUpdate(); //ResultSet }catch(Exception e){} } //Read public int getListCount() { int result = 0; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "select count(*) from board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet 변환 if(rs.next()) { result = rs.getInt("count(*)"); //컬럼명 //result = rs.getInt(1); 첫번째 컬럼 } System.out.println("총게시글의 갯수 : " + result); }catch(Exception e) {} return result; } public Board getOneList(int num) { Board board=null; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); } } catch (SQLException e) {e.printStackTrace();} return board; } public ArrayList<Board> getAllList(int page, int limit){ //페이징 처리된 함수 : 일부 발췌 int total_record = getListCount(); int start = (page - 1) * limit; int index = start + 1; ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = pstmt.executeQuery(); // ResultSet --> DTO --> ArrayList<DTO> while (rs.absolute(index)) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); if (index < (start + limit) && index <= total_record) index++; else break; } } catch (SQLException e) {e.printStackTrace();} return ab; } public ArrayList<Board> getAllList2(){ //페이징 안된 함수 ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); } } catch (SQLException e) {e.printStackTrace();} return ab; } //Update public void updateBoard(Board bd) { try { conn = DBConnection.connection(); String sql = "update board set subject=?, content=? where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, bd.getSubject()); pstmt.setString(2, bd.getContent()); pstmt.setInt(3, bd.getNum()); pstmt.executeUpdate(); }catch(Exception e) {} } //Delete public void deleteBoard(int num) { try { conn = DBConnection.connection(); String sql ="delete from board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); pstmt.executeUpdate(); }catch(Exception e) {} } } |
* public void updateBoard(Board bd) {
실행 결과
![]() |
![]() |
10.조회수(R/U)
BookMarket_CRUD/src/main/java/Controller/Board_View_Controller.java
package Controller.Board;
import java.io.IOException; import dao.BoardRepository; import dto.Board; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletException; import jakarta.servlet.annotation.WebServlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; @WebServlet("/BoardViewAction") public class Board_View_Controller extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { int num = Integer.parseInt(req.getParameter("num")) ; int pageNum = Integer.parseInt(req.getParameter("pageNum")); BoardRepository br = BoardRepository.getInstance(); br.updateHit(num); Board bd=br.getOneList(num); req.setAttribute("board", bd); req.setAttribute("num", num); req.setAttribute("page", pageNum); RequestDispatcher ds = req.getRequestDispatcher("board/view.jsp"); ds.forward(req, resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } } |
*br.updateHit(num);
BookMarket_CRUD/src/main/java/dao/BoardRepository.java
package dao;
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import dto.Board; public class BoardRepository { //싱글톤 private static BoardRepository br = new BoardRepository(); public static BoardRepository getInstance() { return br; } private BoardRepository() {} //공용변수선언 Connection conn=null; PreparedStatement pstmt= null; ResultSet rs = null; //Create public void addBoard(Board bd) { //데이터베이스 연결 try { conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "insert into Board values(?,?,?,?,?,?,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, null); pstmt.setString(2, bd.getId()); pstmt.setString(3, bd.getName()); pstmt.setString(4, bd.getSubject()); pstmt.setString(5, bd.getContent()); pstmt.setString(6, bd.getRegist_day()); pstmt.setInt(7, bd.getHit()); pstmt.setString(8, bd.getIp()); pstmt.executeUpdate(); //ResultSet }catch(Exception e){} } //Read public int getListCount() { int result = 0; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리 작성 및 실행 String sql = "select count(*) from board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet 변환 if(rs.next()) { result = rs.getInt("count(*)"); //컬럼명 //result = rs.getInt(1); 첫번째 컬럼 } System.out.println("총게시글의 갯수 : " + result); }catch(Exception e) {} return result; } public Board getOneList(int num) { Board board=null; try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); } } catch (SQLException e) {e.printStackTrace();} return board; } public ArrayList<Board> getAllList(int page, int limit){ //페이징 처리된 함수 : 일부 발췌 int total_record = getListCount(); int start = (page - 1) * limit; int index = start + 1; ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE); rs = pstmt.executeQuery(); // ResultSet --> DTO --> ArrayList<DTO> while (rs.absolute(index)) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); if (index < (start + limit) && index <= total_record) index++; else break; } } catch (SQLException e) {e.printStackTrace();} return ab; } public ArrayList<Board> getAllList2(){ //페이징 안된 함수 ArrayList<Board> ab = new ArrayList<Board>(); try { //데이터베이스 연결 conn = DBConnection.connection(); //쿼리작성 및 실행 String sql = "select * from Board"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); //ResultSet --> DTO --> ArrayList<DTO> while (rs.next()) { Board board = new Board(); board.setNum(rs.getInt("num")); board.setId(rs.getString("id")); board.setName(rs.getString("name")); board.setSubject(rs.getString("subject")); board.setContent(rs.getString("content")); board.setRegist_day(rs.getString("regist_day")); board.setHit(rs.getInt("hit")); board.setIp(rs.getString("ip")); ab.add(board); } } catch (SQLException e) {e.printStackTrace();} return ab; } //Update public void updateBoard(Board bd) { try { conn = DBConnection.connection(); String sql = "update board set subject=?, content=? where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, bd.getSubject()); pstmt.setString(2, bd.getContent()); pstmt.setInt(3, bd.getNum()); pstmt.executeUpdate(); }catch(Exception e) {} } public void updateHit(int num) { try { conn = DBConnection.connection(); //먼저 조회수를 가져와야된다. String sql = "select hit from board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); rs = pstmt.executeQuery(); int hit=0; if(rs.next()) { hit = rs.getInt("hit"); hit++; //조회수 증가 } sql="update board set hit=? where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, hit); pstmt.setInt(2, num); pstmt.executeUpdate(); }catch(Exception e) {} } //Delete public void deleteBoard(int num) { try { conn = DBConnection.connection(); String sql ="delete from board where num=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, num); pstmt.executeUpdate(); }catch(Exception e) {} } } |
* public void updateHit(int num) {
실행 결과
![]() |
'벡엔드 웹프로그래밍 > JSP' 카테고리의 다른 글
JSP 웹프로그래밍 70일차 (25/2/25) (0) | 2025.02.25 |
---|---|
JSP 웹프로그래밍 69일차 (25/2/24) (0) | 2025.02.24 |
JSP 웹프로그래밍 68일차 (25/2/21) (0) | 2025.02.21 |
JSP 웹프로그래밍 67일차 (25/2/20) (2) | 2025.02.20 |
JSP 웹프로그래밍 66일차 (25/2/19) (0) | 2025.02.19 |