JSP

[JSP]p543 2

worri-pi 2021. 8. 5. 15:31

 

 

 

 

ProductDAO.java

 

 

package com.woori.dao;

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

import com.woori.dto.ProductVO;

import util.DBManager;

public class ProductDAO {

	private ProductDAO() { //**private 
	}

	private static ProductDAO instance = new ProductDAO(); 
	
	public static ProductDAO getInstance() { 
		return instance;
	}
	
	//c Read u d
	public List<ProductVO> selectAllProducts(){
		
		String sql = "select * from product order by code desc";
		List<ProductVO> list = new ArrayList<ProductVO>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				ProductVO pVo = new ProductVO();
				pVo.setCode(rs.getInt("code"));
				pVo.setName(rs.getString("name"));
				pVo.setPrice(rs.getInt("price"));
				pVo.setPrctureurl(rs.getString("prctureurl"));
				pVo.setDescription(rs.getString("description"));
				
				list.add(pVo);
			}//the end while
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn, pstmt,rs);
		}
		return list;
	}
	
	
	//create r u d
	public void insertProduct(ProductVO pVo) { 
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "insert into product values(product_seq.nextval,?,?,?,?)";
		
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1,pVo.getName());
			pstmt.setInt(2, pVo.getPrice());
			pstmt.setString(3, pVo.getPrctureurl());
			pstmt.setString(4, pVo.getDescription());
			pstmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn,pstmt);
		}
		
	}
	
	
	//c Read u d
	public ProductVO selectProductByCode(String code) {
		String sql = "select * from product where code=?";
		
		ProductVO pVo = null;
		
		try {
			Connection conn = null;
			PreparedStatement pstmt = null;
			ResultSet rs = null;
			
			try {
				conn = DBManager.getConnection();
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, code);
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					pVo = new ProductVO();
					pVo.setCode(rs.getInt("code"));
					pVo.setName(rs.getString("name"));
					pVo.setDescription(rs.getString("description"));
					pVo.setPrctureurl(rs.getString("prctureurl"));
					pVo.setPrice(rs.getInt("price"));
				}
			}catch(Exception e) {
				e.printStackTrace();
			}finally {
				DBManager.close(conn, pstmt, rs);
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		return pVo;
	}
	
	//c r update d
	public void updateProduct(ProductVO pVo) {
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "update product set name=? , price=?";
		
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, pVo.getName());
			pstmt.setInt(2, pVo.getPrice());
			pstmt.setString(3, pVo.getPrctureurl());
			pstmt.setString(4, pVo.getDescription());
			pstmt.setInt(5, pVo.getCode());
			
			pstmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn, pstmt);
		}
		
	}
}

 

 

ProductUpdateServlet.java

DB에서 상품 정보를 수정하는 작업을 위해서 productupdateservlet 클래스의 doPost 메소드에 다음과 같은 코드를 추가한다.

 

 

ProductDeleteServlet.java

상품삭제 버튼을 클릭하면 바로 삭제되는 것이 아니고, 이전에 등록했던 상품 정보를 확인 한 후에 삭제됨

이전에 입력되었던 상품 정보가 출력돼야 하기 때문에, 현재 선택된 상품 정보를 DB에서 찾아오기 위해서 상품 코드값을 매개 변수로 넘겨줬다.

삭제하기 위한 서블릿 만들기

 

package com.woori.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.woori.dao.ProductDAO;
import com.woori.dto.ProductVO;

@WebServlet("/productDelete.do")
public class ProductDeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String code = request.getParameter("code");
		
		ProductDAO pDao = ProductDAO.getInstance();
		ProductVO pVo = pDao.selectProductByCode(code);
		
		request.setAttribute("product", pVo);
		RequestDispatcher dispatcher = request.getRequestDispatcher("product/productDelete.jsp");
		dispatcher.forward(request, response);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

}

 

 

productDelete.jsp

상품 삭제 클릭 -> 이전 등록 상품 정보 확인 -> 삭제

 

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="css/shopping.css">
</head>
<body>
<div id="wrap" align="center">
<h1>delete the product - manager page</h1>
<form action="productDelete.do" method="post">
	<table>
		<tr>
			<td>
				<c:choose>
					<c:when test="${empty product.prctureUrl}">
						<img src="images/noimage.gif">
					</c:when>
				
					<c:otherwise>
						<img src="upload/${product.prctureUrl}">
					</c:otherwise>
				</c:choose>
			</td>
			<td>
				<table>
					<tr>
						<th style="width:80px">product name</th>
						<td>${product.name}</td>
					</tr>
					<tr>
						<th style="width:80px">product price</th>
						<td>${product.price}</td>
					</tr>
					<tr>
						<th style="width:80px">product description</th>
						<td>${product.description}</td>
					</tr>
				</table>
			</td>
		</tr>
	</table>
	<br>
	<input type="hidden" name="code" value="${product.code}">
	<input type="submit" value="delete">
	<input type="button" value="list" onclick="location.href='productList.do'">
</form>
</div>
</body>
</html>

 

 

 

ProductDeleteServlet.java

jsp에서 삭제할 정보 확인 후 삭제 버튼을 클릭하여 실제 DB에서 상품 정보를 삭제하는 과정을 진행한다. 

 

 

package com.woori.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.woori.dao.ProductDAO;
import com.woori.dto.ProductVO;

@WebServlet("/productDelete.do")
public class ProductDeleteServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String code = request.getParameter("code");
		
		ProductDAO pDao = ProductDAO.getInstance();
		pDao.deleteProduct(code);
		
		response.sendRedirect("productList.do");
	}

}

 

 

ProductDAO.java

상품 삭제 메소드 deleteProduct 만들기

 

package com.woori.dao;

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

import com.woori.dto.ProductVO;

import util.DBManager;

public class ProductDAO {

	private ProductDAO() { //**private 
	}

	private static ProductDAO instance = new ProductDAO(); //자기 자신이 자기 자신을 만든다.
	
	public static ProductDAO getInstance() { //private 한 instance를 외부에서 사용하기 위해 필요하다.
		return instance;
	}
	
	//c Read u d
	public List<ProductVO> selectAllProducts(){
		//최근에 등록한 상품 먼저 출력하기
		
		String sql = "select * from product order by code desc";
		List<ProductVO> list = new ArrayList<ProductVO>();
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			//쿼리문 실행 전 Connection 객체를 얻기 위해 DBManager 클래스의 정적 메소드인 getConnection 호출
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			while(rs.next()) {
				ProductVO pVo = new ProductVO();
				//ResultSet 객체로 code 컬럼 값을 얻어와서, 컬럼 값을 ProductVO 객체의 code 필드에 저장하기 위해 setCode() 메소드 호출
				pVo.setCode(rs.getInt("code"));
				pVo.setName(rs.getString("name"));
				pVo.setPrice(rs.getInt("price"));
				pVo.setPrctureurl(rs.getString("prctureurl"));
				pVo.setDescription(rs.getString("description"));
				
				//ㅁrrayList 객체에 ProductVO 객체를 추가하기
				list.add(pVo);
			}//the end while
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			//사용이 끝난 객체를 해제하기 위해 DBManager 클래스의 정적 메소드인 close() 호출
			DBManager.close(conn, pstmt,rs);
		}
		//selectAllProducts() 를 호출하면 product 테이블의 모든 정보를 ArrayList 객체를 통해 얻을 수 있다.
		return list;
	}
	
	
	//create r u d
	public void insertProduct(ProductVO pVo) { 
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "insert into product values(product_seq.nextval,?,?,?,?)";
		
		try {
			conn = DBManager.getConnection(); //connection 객체 얻기
			pstmt = conn.prepareStatement(sql); //쿼리문 실행을 위해 statement 객체 필요. connection 객체로부터 statement 객체 얻어오기.
			
			pstmt.setString(1,pVo.getName());
			pstmt.setInt(2, pVo.getPrice());
			pstmt.setString(3, pVo.getPrctureurl());
			pstmt.setString(4, pVo.getDescription());
			pstmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn,pstmt);
		}
		
	}
	
	
	//c Read u d
	public ProductVO selectProductByCode(String code) {
		String sql = "select * from product where code=?";
		
		ProductVO pVo = null;
		
		try {
			Connection conn = null;
			PreparedStatement pstmt = null;
			ResultSet rs = null;
			
			try {
				conn = DBManager.getConnection();
				pstmt = conn.prepareStatement(sql);
				pstmt.setString(1, code);
				rs = pstmt.executeQuery();
				
				if(rs.next()) {
					pVo = new ProductVO();
					pVo.setCode(rs.getInt("code"));
					pVo.setName(rs.getString("name"));
					pVo.setDescription(rs.getString("description"));
					pVo.setPrctureurl(rs.getString("prctureurl"));
					pVo.setPrice(rs.getInt("price"));
				}
			}catch(Exception e) {
				e.printStackTrace();
			}finally {
				DBManager.close(conn, pstmt, rs);
			}
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		return pVo;
	}
	
	
	//c r update d
	public void updateProduct(ProductVO pVo) {
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "update product set name=? , price=?, prctureurl=?, description=? where code=?";
		
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, pVo.getName());
			pstmt.setInt(2, pVo.getPrice());
			pstmt.setString(3, pVo.getPrctureurl());
			pstmt.setString(4, pVo.getDescription());
			pstmt.setInt(5, pVo.getCode());
			
			pstmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn, pstmt);
		}
		
	}
	
	public void deleteProduct(String code) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		String sql = "delete from product where code=?";
		
		try {
			conn = DBManager.getConnection();
			pstmt = conn.prepareStatement(sql);
			
			pstmt.setString(1, code);
			pstmt.executeQuery();
			
			
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			DBManager.close(conn, pstmt); 
		}
	}
}

 

 

728x90