본문 바로가기
  • 마침표 보다 쉼표를 나타내자
국비교육 [完]/WebMarket

3. 상품 목록 만들기

by Y코더 2023. 3. 1.
728x90

https://whitekeyboard.tistory.com/496

자바 직렬화

 

[Java] "serialVersionUID"이란? 어떤 역할을 가지고 있기에 선언이 되어 있는가?

요약하여 결론부터 내리자면, 1.4까지는 java beans 에서 serialVersionUID를 명시하지 않아도 JVM에서 serialVersionUID 를 제네레이션 해서 관리하고 있지만 1.5 부턴 serialVersionUID를 명시하길 권고한다고 하

whitekeyboard.tistory.com

 

우선 DTO와 DAO를 알아야한다.

 

DTO : DB에서 가져온 데이터를 저장하는 객체

DAO : 데이터에 접근하는 객체 (데이터 베이스에 접근을 하여 조회하거나 조작하는 기능)

 

하나하나 차근차근 해보자

 

프로젝트의 형태는 이렇다.

페이지 폴더에 있는 JSP를 모두 밖으로 꺼내게 되었는데 이유는...

파일 경로가 홈이나 프로덕트 버튼을 누르면 하위 경로 가버려서 JSP 파일을 찾지 못하게 되었다.

다른 해결방법이 있을 것 같다.

 

일단 DTO 부터 만들어 보자

package DTO;

import java.io.Serializable;

public class Product implements Serializable{
	
	private String productId;			//상품 아이디
	private String pname;				//상품명
	private Integer unitPrice;			//상품 가격
	private String description;			//상품 설명
	private String manufacturer;		//제조사
	private String category;			//분류
	private long unitsInStock;			//재고 수
	private String condition;			//신상품 or 중고품 or 재생품
	
	private static final long serialVersionUID = -4274700572038677000L;
	
	public Product(String productId, String pname, Integer unitPrice) {
		super();
		this.productId = productId;
		this.pname = pname;
		this.unitPrice = unitPrice;
	}
	
	public Product() {
		super();
	}	
	
	public String getProductId() {
		return productId;
	}
	public void setProductId(String productId) {
		this.productId = productId;
	}
	public String getPname() {
		return pname;
	}
	public void setPname(String pname) {
		this.pname = pname;
	}
	public Integer getUnitPrice() {
		return unitPrice;
	}
	public void setUnitPrice(Integer unitPrice) {
		this.unitPrice = unitPrice;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getManufacturer() {
		return manufacturer;
	}
	public void setManufacturer(String manufacturer) {
		this.manufacturer = manufacturer;
	}
	public String getCategory() {
		return category;
	}
	public void setCategory(String category) {
		this.category = category;
	}
	public long getUnitsInStock() {
		return unitsInStock;
	}
	public void setUnitsInStock(long unitsInStock) {
		this.unitsInStock = unitsInStock;
	}
	public String getCondition() {
		return condition;
	}
	public void setCondition(String condition) {
		this.condition = condition;
	}
	
	
}

 

 

그다음은 DAO 를 만들어보자.

 

package DAO;

import java.util.ArrayList;
import DTO.Product; 

public class ProductRepository {
	private ArrayList<Product> listOfProducts = new ArrayList<Product>();
	private static ProductRepository instance = new ProductRepository();
	
	public static ProductRepository getInstance() {
		return instance;
	}
	
	public ProductRepository() {
		Product phone = new Product("P1234", "iPhone 6s", 800000);
		phone.setDescription("4.17-inch, 1334X750 Renina HD display, 8-megapixel iSight Camera");
		phone.setCategory("Smart Phone");
		phone.setManufacturer("Apple");
		phone.setUnitsInStock(1000);
		
		Product notebook = new Product("P1235", "LG PC 그램", 1500000);
		notebook.setDescription("13.3-inch, IPS LED display, 5rd Generation Intel Core processors");
		notebook.setCategory("NoteBook");
		notebook.setManufacturer("LG");
		notebook.setUnitsInStock(1000);
		
		Product tablet = new Product("P1236", "Galaxy Tab S", 900000);
		tablet.setDescription("212.8*125.6*6.6mm, Super AMOLED display, Octa-Core Processor");
		tablet.setCategory("Tablet");
		tablet.setManufacturer("Samsung");
		tablet.setUnitsInStock(1000);
		
		listOfProducts.add(phone);
		listOfProducts.add(notebook);
		listOfProducts.add(tablet);
		
	}
	
	public ArrayList<Product> getAllProducts(){
		return listOfProducts;
	}
	
	public Product getProductById(String productId) {
		Product productById = null;
		
		for(int i=0; i<listOfProducts.size(); i++) {
			Product product = listOfProducts.get(i);
			
			if(product!=null && product.getProductId()!= null && product.getProductId().equals(productId)) {
				productById = product;
				break;
			}
		}
		
		return productById;
	}
	
	public void addProduct(Product product) {
		listOfProducts.add(product);
	}
}

 

그리고 상품 목록 페이지를 만들어보자

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.ArrayList" %>
<%@ page import="DTO.Product" %>
<%@ page import="DAO.ProductRepository" %>

<jsp:useBean id="productDAO" class="DAO.ProductRepository" scope="session" />

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 목록</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
	<%@ include file="menu.jsp" %>
	
	<div class="jumbotron">
		<div class="container">
			<h1 class="display-3">
				상품 목록
			</h1>
		</div>	
	</div>
	
	<%
		ProductRepository dao = ProductRepository.getInstance();	
		ArrayList<Product> listOfProducts = productDAO.getAllProducts();
	%>
	
	<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">
				<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>
	
	<%@ include file="./footer/footer.jsp" %>
</body>
</html>

 

여기서 똑같은 페이지 한개를 더 만들어서

로그인을 하지 않은 사람은 상세 정보를 못보도록 제작해야한다.

 

시용자가 로그아웃을 누르기 전까지 로그인이 풀리면 안되므로

페이지 이동에 사용자가 로그인 했다는 정보를 계속 넘겨 줘야할 것 같다.

 

상세 정보를 눌렀을때 DAO에 있는 정보를 가져오자

 

<%@ 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>
<meta charset="UTF-8">
<title>상품 상세 정보</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
</head>
<body>
		<%@ include file="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-6">
					<h3><%=product.getPname() %></h3>
					<p><%=product.getDescription() %>
					<p><b>상품 코드: </b>
					<span class="bagde 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>
			<hr>
		</div>
		
		<%@ include file="./footer/footer.jsp" %>
</body>
</html>

 

그러면 상세 정보 버튼을 누르면 그 정보를 토대로 가져와서 다음 페이지를 생성하게 된다.

 

728x90

'국비교육 [完] > WebMarket' 카테고리의 다른 글

6. 세션으로 로그인  (0) 2023.03.09
5. 회원 가입  (0) 2023.03.02
4. 데이터 베이스 로그인 기능 구현  (0) 2023.03.01
2. 홈페이지 첫 화면을 만들어보자  (0) 2023.03.01
1. 웹마켓 프로젝트 생성  (0) 2023.03.01