일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 컬렉션프레임워크
- ibatis
- Oracle
- 배열
- crud
- Android
- 이클립스
- 맥
- 객체지향
- 단축키
- JDBC
- Mac
- nodejs
- 생활코딩
- servlet
- FastAPI
- Homebrew
- 자바
- 자바문제
- API
- python
- Java
- 반복문
- ddit
- html
- jsp
- spring
- Error
- pyqt
- 대덕인재개발원
- Today
- Total
romworld
JSP 06 - 쇼핑몰 사이트 만들기(2), ERWin 본문
기존에 만들어둔 <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 다이어그램 모델링 프로그램





맥시멈
VARCHAR2(4000)
NUMBER= 38자리

PRODUCT_ID
PNAME
UNIT_PRICE
는 NOT NULL 이어야함.




127.0.0.1:1521/xe


오라클 디벨로퍼를 킨 후

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">상세정보»</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 |