romworld

JSP 06 - 쇼핑몰 사이트 만들기(2), ERWin 본문

WEB/JSP

JSP 06 - 쇼핑몰 사이트 만들기(2), ERWin

inderrom 2022. 12. 26. 19:59

기존에 만들어둔 <welcome.jsp>

<welcom.jsp>


  
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Welcome</title>
<link rel="stylesheet" href="/css/bootstrap.min.css">
</head>
<body>
<%@ include file="menu.jsp" %>
<% // 선언문
// 전역변수
String greeting = "Welcome to rom's Web Shopping Mall";
String tagline = "Welcome to Web Market.";
%>
<!-- 표현문 -->
<div class="jumbotron">
<div class="container">
<h1 class="display-3"><%= greeting %></h1>
</div>
</div>
<main role="main">
<div class="container">
<div class="text-center">
<h3><%=tagline %></h3>
<% // 스크립틀릿
// 1초마다 페이지를 갱신(새로고침)
response.setIntHeader("Refresh", 1);
Date day = new Date();
String am_pm;
int hour = day.getHours(); // 시(12)
int minute = day.getMinutes(); // 분(24)
int second = day.getSeconds(); // 초(31)
// 0 ~ 11 => 0 정수/정수 => 정수
if(hour / 12 == 0){
am_pm = "AM";
}else{ // 12~24 => 1 또는 2가 됨
am_pm = "PM";
// 13~23시를 1~11시로 표현
hour = hour - 12;
}
String CT = hour + ":" + minute + ":" + second + " " + am_pm;
// out : JSP 내장 객체 중 하나
out.print("현재 접속 시각 :" + CT + "<br>");
%>
</div>
</div>
</main>
<%@ include file="footer.jsp" %>
</body>
</html>

include태그를 사용하여 header와 footer를 구분한다.

Date를 이용하여 화면에 시간을 나타낸다.

 

 

vo(value object)

자바빈클래스(객체) -> 데이터를 담아서 전달

 


상품 목록 구현

 

<ProductVO.java>


  
package kr.or.ddit.vo;
// 자바빈 클래스
// ProductVO <- PRODUCT 테이블
public class ProductVO {
// 멤버변수 <- PRODUCT 테이블의 필드(컬럼=열=애트리뷰트=속성)
// String => VARCHAR2(4000) : 순수한글 1333
// productId => PRODUCT_ID ( 카멜 표기법 (낙타)표기법)
private String productId; //상품아이디(기본키=> Not null, No Duplicate)
private String pname;// 상품명
// unitPrice => NUMBER UNIT_PRICE
private double unitPrice;// 상품 가격
private String description; // 상품설명
private String manufacturer; // 제조사
private String category; // 분류( 휴대폰 / 태블릿/ 노트북)
private long unitsInStock; //재고 수
private String condition; // 신상품 or 중고품 or 재생품
private String filename; // 이미지 파일명
private int quantity; // 상품을 장바구나에 담은 개수
// 기본생성자
public ProductVO() {}
// 생성자 => 클래스를 인스턴스화 하여 객체를 생성 시 멤버변수의 값을 초기화
// 상품 아이디, 상품명, 가격을 매개변수(파라미터를 받는 변수)로 하는 생성자를 추가 작성함
public ProductVO(String productId, String pname, double unitPrice) {
// 필수인 객체 (not null)만 초기화 해준다.
this.productId = productId;
this.pname = pname;
this.unitPrice = unitPrice;
}
// getter/setter 메소드
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 double getUnitPrice() {
return unitPrice;
}
public void setUnitPrice(double 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;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
@Override
public String toString() {
return "ProductVO [productId=" + productId + ", pname=" + pname + ", unitPrice=" + unitPrice + ", description="
+ description + ", manufacturer=" + manufacturer + ", category=" + category + ", unitsInStock="
+ unitsInStock + ", condition=" + condition + ", filename=" + filename + ", quantity=" + quantity + "]";
}
}

 

dao 패키지

<ProductRepository.java>

 


  
package kr.or.ddit.dao;
import java.util.ArrayList;
import java.util.List;
import kr.or.ddit.vo.ProductVO;
public class ProductRepository {
// 상품 목록 저장할 리스트 작성(전역변수)
private List<ProductVO> listOfProducts = new ArrayList<ProductVO>();
// 싱클톤 객체 : 메모리에 딱 한 번 생성(공유해서 사용하기 좋은)
private static ProductRepository instance = new ProductRepository();
public static ProductRepository getInstance() {return instance;}
// 기본 생성자. 3개의 상품 정보를 설정
// 그런 후 ProductVO 객체 타입의 list인 listOfPfoducts 변수에 저장
public ProductRepository() {
//------------ 휴대폰 등록 시작-----------------
//P1234 iphone 6s 800000
ProductVO phone = new ProductVO("P1234","iPhone 6s", 800000);
// 상품 설명
phone.setDescription("4.7-inch, 1334x750 Renina HD display 8-megapixel iSight Camera");
// 분류
phone.setCategory("Smart Phone");
// 제조사
phone.setManufacturer("Apple");
//재고 수
phone.setUnitsInStock(1000);
// 신상품 or 중고품 or 재생품
phone.setCondition("New");
//이미지 파일명
phone.setFilename("P1234.jpg");
//------------ 휴대폰 등록 끝-----------------
//------------ 노트북 등록 시작-----------------
// P1235 LG PC 그램 150000
// 생성자(상품 아이디. 상품 명, 상품 가격 초기화)
ProductVO notebook = new ProductVO("P1235","LG PC 그램",150000);
//상품 설명
notebook.setDescription("13.3-inch, IPS LED display, 5rd Generation"
+ "Intel Core processors");
//분류
notebook.setCategory("Notebook");
//제조사
notebook.setManufacturer("LG");
//재고 수
notebook.setUnitsInStock(1000);
//신상품 or 중고품 or 재생품
notebook.setCondition("Refurbished");
//이미지 파일명
notebook.setFilename("P1235.jpg");
//------------ 노트북 등록 끝-----------------
//------------ 태블릿 등록 시작-----------------
// P1236 Galaxy Tab s 900000
ProductVO tablet = new ProductVO("P1236","Galaxy Tab S", 900000);
//상품 설명
tablet.setDescription("212.8*125.6*6.6m, Super AMOLED display, "
+ "Octa-Core processor");
//분류
tablet.setCategory("Tablet");
//제조사
phone.setManufacturer("Samsung");
//재고 수
tablet.setUnitsInStock(1000);
//신상품 or 중고품 or 재생품
tablet.setCondition("Old");
//이미지 파일명
tablet.setFilename("P1236.jpg");
//------------ 태블릿 등록 끝-----------------
// ProductVO 객체 타입의 List인 listOfProducts 변수에 저장 (List<ProductVO> listOfProducts)
listOfProducts.add(phone);
listOfProducts.add(notebook);
listOfProducts.add(tablet);
};
// ProductVO 객체 타입의 변수 listOfProducts 에 저장된 모든 상품 목록을 가져오자
// 상품 목록
public List<ProductVO> getAllProducts(){
return listOfProducts;
}
}

 


 

ERDin

- ER 다이어그램 모델링 프로그램

 

new 클릭

 

Logical/Physical (논리/물리)
스키마 구조 나타내기 (컬럼형,자료형,크기)
이렇게 나타난다
더블클릭하고 ORACLE 탭에서 자료형 수정

맥시멈

VARCHAR2(4000) 

NUMBER= 38자리

VO객체에 설정됨

PRODUCT_ID

PNAME

UNIT_PRICE

NOT NULL 이어야함. 

 

테이블 설정하기 (Database Connection) 클릭
Database Authentication으로 바꿔준다 ( 인증-로그인)
oracle 계정 아이디 비밀번호 입력
value = 로컬호스트

 

127.0.0.1:1521/xe

 

 

tool -Foward Engineer - Schema Generation
트리거 - 체크 전체 해제 후 스키마 구조 프리뷰를 볼 수 있다.


 

오라클 디벨로퍼를 킨 후 

 

테이블을 생성한다.

 

CREATE TABLE PRODUCT
(
   PRODUCT_ID            VARCHAR2(10)  NOT NULL ,
   PNAME                 VARCHAR2(90)  NOT NULL ,
   UNIT_PRICE            NUMBER  NOT NULL ,
   DESCRIPTION           VARCHAR2(1000)  NULL ,
   MANUFACTURER          VARCHAR2(90)  NULL ,
   CATEGORY              VARCHAR2(60)  NULL ,
   UNITS_IN_STOCK        NUMBER  NULL ,
   CONDITION             VARCHAR2(60)  NULL ,
   FILENAME              VARCHAR2(1000)  NULL ,
   QUANTITY              NUMBER  NULL,
    CONSTRAINT  PK_PRODUCT PRIMARY KEY (PRODUCT_ID)
);

 

데이터를 넣는다.

다시 돌아와서

 

<products.jsp>


  
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page import="kr.or.ddit.dao.ProductRepository"%>
<%@page import="kr.or.ddit.vo.ProductVO"%>
<%@page import="java.util.List"%>
<% // 스크립틀릿
// ProductRespository() 생성자
// 기본 생성자. 3개의 상품 정보를 가져옴
// 그런 후 ProductVO 객체 타입의 listOfProducts 변수에 저장
ProductRepository productDAO = ProductRepository.getInstance();
%>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="/css/bootstrap.min.css"/>
<title>상품 목록</title>
</head>
<body>
<!-- include 액션 태그 -->
<jsp:include page="menu.jsp" />
<!-- ------------ 상품 목록 시작 ------------- -->
<div class="jumbotron">
<!-- container : 이 안에 내용 있다. -->
<div class="container">
<h1 class="display-3"> 상품 목록</h1>
</div>
</div>
<!-- ------------ 상품 목록 끝 ------------- -->
<% // 스크립틀릿
List<ProductVO> listOfProducts = productDAO.getAllProducts();
%>
<!-- 표현문 -->
<c:set var="listOfProducts" value="<%=listOfProducts %>" />
<!-- container : 이 안에 내용있다 -->
<div class="container">
<!-- 행 별 처리 -->
<div class="row" align="center">
<!-- 1칸씩 반복 -->
<c:forEach var="productVO" items="${listOfProducts}">
<div class="col-md-4">
<img src="/images/${productVO.filename}" style="width : 100%;" alt="${productVO.pname}" title="${productVO.pname}" />
<h3>${productVO.pname}</h3>
<p>${productVO.description}</p>
<p>${productVO.unitPrice}</p>
<p><a href="product.jsp?id=${productVO.productId}" class="btn btn-secondary" role="button">상세정보&raquo;</a></p>
</div>
</c:forEach>
</div>
</div>
<!-- footer -->
<jsp:include page="footer.jsp" />
</body>
</html>

이렇게 작성해주면 상품목록을 구현할 수 있다.

'WEB > JSP' 카테고리의 다른 글

JSP 08 - response  (0) 2022.12.28
JSP 07 - request  (0) 2022.12.28
JSP 05 - 디렉티브 태그 ( taglib02 )  (0) 2022.12.26
JSP 04 - 디렉티브 태그 ( include, taglib)  (0) 2022.12.26
JSP 03 - 디렉티브 태그  (0) 2022.12.23
Comments