Study/WebServer

[웹 쇼핑몰 실습] 상품 이미지 등록하기

Gyuri 2021. 8. 22. 23:29

상품 목록 페이지 수정

products.jsp

<%@ page contentType="text/html; charset=utf-8"%>
<%@ page import="java.util.ArrayList"%>
<%@ page import="dto.Product"%>
<%@ page import="dao.ProductRepository"%>

<jsp:useBean id="productDAO" class="dao.ProductRepository" scope="session" />
<html>
<head>
<meta charset="UTF-8">
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<title>상품 목록</title>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 목록</h1>
		</div>
	</div>
	<%
		ArrayList<Product> listOfProducts = productDAO.getAllProducts();
		ProductRepository dao = ProductRepository.getInstance();
	%>
	<div class="container">
		<div class="row" align="center">
			<%
				for (int i = 0; i < listOfProducts.size(); i++) {
					Product product = listOfProducts.get(i);
			%>
			<div class="col-md-4">
				<img src="./resources/images/<%=product.getFilename()%>" 
				style="width:100%">
				<h3><%=product.getPname()%></h3>
				<p><%=product.getDescription()%>
				<p><%=product.getUnitPrice()%>원
				<p><a href="./product.jsp?id=<%=product.getProductId()%>" 
				class="btn btn-secondary" role="button"> 상세 정보 &raquo;</a>
			</div>
			<%
				}
			%>
		</div>
		<hr>
	</div>
	<jsp:include page="footer.jsp" />
</body>
</html>

 

 

상품 상세 정보 페이지 수정

product.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@page import="dto.Product"%>
<%@page import="dao.ProductRepository"%>
<jsp:useBean id="productDAO" class="dao.ProductRepository"
	scope="session" />
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<meta charset="UTF-8">
<title>상품 상세 정보</title>
</head>
<body>
	<jsp:include page="menu.jsp" />
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">상품 상세 정보</h1>
		</div>
	</div>
	<%
	String id = request.getParameter("id");
	ProductRepository dao = ProductRepository.getInstance();
	Product product = productDAO.getProductById(id);
	%>
	<div class="container">
		<div class="row">
			<div class="col-md-5">
			<img src="./resources/images/<%=product.getFilename()%>" 
				style="width:100%"/>
			</div>
				<h3><%=product.getPname()%></h3>
				<p><%=product.getDescription()%>
				<p><b>상품 코드 : </b><span class="badge badge-danger">
					<%=product.getProductId()%></span>
				<p><b>제조사</b> : <%=product.getManufacturer()%>
				<p><b>분류</b> : <%=product.getCategory()%>
				<p><b>재고 수</b> : <%=product.getUnitsInStock()%>
				<h4><%=product.getUnitPrice()%>원</h4>
				<p><a href="#" class="btn btn-info">상품 주문 &raquo;</a>
					<a href="./products.jsp" class="btn btn-secondary"> 상품 목록 &raquo;</a>
			</div>
	</div>
	<jsp:include page="footer.jsp"/>
</body>
</html>

 

 

상품 이미지 업로드하기

  1. 상품 이미지 파일의 저장 위치 만들기 : c드라이브에 upload 폴더 생성 후 이 폴더에 상품 이미지 파일명을 상품 아이디로 하여 등록
  2. 오픈 라이브러리 cos.jar 등록 : MultipartRequest 클래스를 이용한 파일 업로드를 위해 cos.jar ㅍ파일 등록
  3. 상품 목록 페이지 수정(products.jsp)
    <img src="./resources/images/<%=product.getFilename()%>" 
    				style="width:100%">​
  4. 상품 상세 정보 페이지 수정(product.jsp)
    <img src="./resources/images/<%=product.getFilename()%>" 
    				style="width:100%"/>​
  5. 상품 정보 등록 페이지 수정(addProduct.jsp)
    <%@ page contentType="text/html; charset=utf-8"%>
    <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">
    		<form name="newProduct" action="./processAddProduct.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" name="productId" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">상품명</label>
    				<div class="col-sm-3">
    					<input type="text" name="name" class="form-control" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">가격</label>
    				<div class="col-sm-3">
    					<input type="text" name="unitPrice" class="form-control" >
    				</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"></textarea>
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">제조사</label>
    				<div class="col-sm-3">
    					<input type="text" name="manufacturer" class="form-control">
    				</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" >
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">재고 수</label>
    				<div class="col-sm-3">
    					<input type="text" name="unitsInStock" class="form-control" >
    				</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="Refurbished" > 재생 제품
    				</div>
    			</div>
    			<div class="form-group row">
    				<label class="col-sm-2">이미지</label>
    				<div class="col-sm-5">
    					<input type="file" name="productImage" 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>
    </body>
    </html>​
  6. 상품 등록 처리 페이지 수정(processAddProduct.jsp)
    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ page import="com.oreilly.servlet.*"%>
    <%@ page import="com.oreilly.servlet.multipart.*"%>
    <%@ page import="java.util.*"%>
    <%@page import="dto.Product"%>
    <%@page import="dao.ProductRepository"%>
    
    <%
    	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 productId = multi.getParameter("productId");
    	String name = multi.getParameter("name");
    	String unitPrice = multi.getParameter("unitPrice");
    	String description = multi.getParameter("description");
    	String manufacturer = multi.getParameter("manufacturer");
    	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);
    	
    	Enumeration files = multi.getFileNames();
    	String fname = (String) files.nextElement();
    	String fileName = multi.getFilesystemName(fname);
    	
    	ProductRepository dao = ProductRepository.getInstance();
    
    	Product newProduct = new Product();
    	newProduct.setProductId(productId);
    	newProduct.setPname(name);
    	newProduct.setUnitPrice(price);
    	newProduct.setDescription(description);
    	newProduct.setManufacturer(manufacturer);
    	newProduct.setCategory(category);
    	newProduct.setUnitsInStock(stock);
    	newProduct.setCondition(condition);
    	newProduct.setFilename(fileName);
    
    	dao.addProduct(newProduct);
    
    	response.sendRedirect("products.jsp");
    %>​