SQL
create table zitem(
item_num number not null,
name varchar2(30) not null,
price number(9) not null,
quantity number(7) not null,
photo1 varchar2(400) not null,
photo2 varchar2(400) not null,
detail clob not null,
reg_date date default sysdate not null,
modify_date date,
status number(1) not null,
constraint zitem_pk primary key (item_num)
);
create sequence zitem_seq;
VO
Item
package kr.item.vo;
import java.sql.Date;
public class ItemVO {
private int item_num;
private String name;
private int price;
private int quantity;
private String photo1;
private String photo2;
private String detail;
private Date reg_date;
private Date modify_date;
private int status;
public int getItem_num() {
return item_num;
}
public void setItem_num(int item_num) {
this.item_num = item_num;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public String getPhoto1() {
return photo1;
}
public void setPhoto1(String photo1) {
this.photo1 = photo1;
}
public String getPhoto2() {
return photo2;
}
public void setPhoto2(String photo2) {
this.photo2 = photo2;
}
public String getDetail() {
return detail;
}
public void setDetail(String detail) {
this.detail = detail;
}
public Date getReg_date() {
return reg_date;
}
public void setReg_date(Date reg_date) {
this.reg_date = reg_date;
}
public Date getModify_date() {
return modify_date;
}
public void setModify_date(Date modify_date) {
this.modify_date = modify_date;
}
public int getStatus() {
return status;
}
public void setStatus(int status) {
this.status = status;
}
}
DAO
Item
package kr.item.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import kr.item.vo.ItemVO;
import kr.util.DBUtil;
public class ItemDAO {
private static ItemDAO instance = new ItemDAO();
public static ItemDAO getInstance() {
return instance;
}
private ItemDAO() {}
public void insertItem(ItemVO item)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
String sql = null;
try {
conn = DBUtil.getConnection();
sql = "INSERT INTO zitem (item_num,name,price,"
+ "quantity,photo1,photo2,detail,status) "
+ "VALUES (zitem_seq.nextval,?,?,?,?,?,?,?)";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, item.getName());
pstmt.setInt(2, item.getPrice());
pstmt.setInt(3, item.getQuantity());
pstmt.setString(4, item.getPhoto1());
pstmt.setString(5, item.getPhoto2());
pstmt.setString(6, item.getDetail());
pstmt.setInt(7, item.getStatus());
pstmt.executeUpdate();
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(null, pstmt, conn);
}
}
public List<ItemVO> getListItem(
int start, int end, String keyfield,
String keyword,int status)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<ItemVO> list = null;
String sql = null;
String sub_sql = "";
int cnt = 0;
try {
conn = DBUtil.getConnection();
if(keyword !=null && !"".equals(keyword)) {
if(keyfield.equals("1")) sub_sql += "AND name LIKE '%' || ? || '%'";
else if (keyfield.equals("2")) sub_sql += "AND detail LIKE '%' || ? || '%'";
}
sql = "SELECT * FROM (SELECT a.*,rownum rnum FROM "
+ "(SELECT * FROM zitem WHERE status > ? " + sub_sql
+ " ORDER BY item_num DESC)a) "
+ "WHERE rnum >= ? AND rnum <= ?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(++cnt, status);
if(keyword!=null && !"".equals(keyword)) {
pstmt.setString(++cnt, keyword);
}
pstmt.setInt(++cnt, start);
pstmt.setInt(++cnt, end);
rs = pstmt.executeQuery();
list = new ArrayList<ItemVO>();
while(rs.next()) {
ItemVO item = new ItemVO();
item.setItem_num(rs.getInt("item_num"));
item.setName(rs.getString("name"));
item.setPrice(rs.getInt("price"));
item.setQuantity(rs.getInt("quantity"));
item.setPhoto1(rs.getString("photo1"));
item.setReg_date(rs.getDate("reg_date"));
item.setStatus(rs.getInt("status"));
list.add(item);
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return list;
}
public ItemVO getItem(int item_num)throws Exception{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
ItemVO item = null;
String sql = null;
try {
conn = DBUtil.getConnection();
sql = "SELECT * FROM zitem WHERE item_num=?";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, item_num);
rs = pstmt.executeQuery();
if(rs.next()) {
item = new ItemVO();
item.setItem_num(rs.getInt("item_num"));
item.setName(rs.getString("name"));
item.setPrice(rs.getInt("price"));
item.setQuantity(rs.getInt("quantity"));
item.setPhoto1(rs.getString("photo1"));
item.setPhoto2(rs.getString("photo2"));
item.setDetail(rs.getString("detail"));
item.setReg_date(rs.getDate("reg_date"));
item.setStatus(rs.getInt("status"));
}
}catch(Exception e) {
throw new Exception(e);
}finally {
DBUtil.executeClose(rs, pstmt, conn);
}
return item;
}
}
Action
Main Action
package kr.main.action;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.controller.Action;
import kr.item.dao.ItemDAO;
import kr.item.vo.ItemVO;
public class MainAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
ItemDAO itemDAO = ItemDAO.getInstance();
List<ItemVO> itemList = itemDAO.getListItem(
1,5,null,null,1);
request.setAttribute("itemList", itemList);
return "/WEB-INF/views/main/main.jsp";
}
}
package kr.item.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.controller.Action;
public class AdminWriteFormAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num == null) {
return "redirect:/member/loginForm.do";
}
Integer user_auth =
(Integer)session.getAttribute("user_auth");
if(user_auth != 9) {
return "/WEB-INF/views/common/notice.jsp";
}
return "/WEB-INF/views/item/admin_writeForm.jsp";
}
}
Admin Write
package kr.item.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import kr.controller.Action;
import kr.item.dao.ItemDAO;
import kr.item.vo.ItemVO;
import kr.util.FileUtil;
public class AdminWriteAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpSession session = request.getSession();
Integer user_num =
(Integer)session.getAttribute("user_num");
if(user_num == null) {
return "redirect:/member/loginForm.do";
}
Integer user_auth =
(Integer)session.getAttribute("user_auth");
if(user_auth != 9) {
return "/WEB-INF/views/common/notice.jsp";
}
request.setCharacterEncoding("utf-8");
ItemVO item = new ItemVO();
item.setName(request.getParameter("name"));
item.setPrice(Integer.parseInt(
request.getParameter("price")));
item.setQuantity(Integer.parseInt(
request.getParameter("quantity")));
item.setPhoto1(FileUtil.createFile(request, "photo1"));
item.setPhoto2(FileUtil.createFile(request, "photo2"));
item.setDetail(request.getParameter("detail"));
item.setStatus(Integer.parseInt(
request.getParameter("status")));
ItemDAO dao = ItemDAO.getInstance();
dao.insertItem(item);
String url = request.getContextPath() + "/item/adminList.do";
response.addHeader("Refresh", "2;url="+url);
request.setAttribute("result_title", "상품 등록 완료");
request.setAttribute("result_msg", "성공적으로 등록되었습니다.");
request.setAttribute("result_url", url);
return "/WEB-INF/views/common/result_view.jsp";
}
}
User Detail
package kr.item.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.controller.Action;
import kr.item.dao.ItemDAO;
import kr.item.vo.ItemVO;
import kr.util.StringUtil;
public class UserDetailAction implements Action{
@Override
public String execute(HttpServletRequest request, HttpServletResponse response) throws Exception {
int item_num = Integer.parseInt(
request.getParameter("item_num"));
ItemDAO dao = ItemDAO.getInstance();
ItemVO item = dao.getItem(item_num);
item.setDetail(StringUtil.useBrHtml(item.getDetail()));
request.setAttribute("item", item);
return "/WEB-INF/views/item/user_detail.jsp";
}
}
View
Main
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>메인</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
</head>
<body>
<div class="page-main">
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<div class="content-main">
<h4>최신 상품</h4>
<div class="image-space">
<c:forEach var="item" items="${itemList}">
<div class="horizontal-area">
<a href="${pageContext.request.contextPath}/item/detail.do?item_num=${item.item_num}">
<img src="${pageContext.request.contextPath}/upload/${item.photo1}">
<span>${item.name}</span>
<br>
<b><fmt:formatNumber value="${item.price}"/>원</b>
</a>
</div>
</c:forEach>
<div class="float-clear">
<hr width="100%" size="1" noshade="noshade">
</div>
</div>
</div>
</div>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!-- header 시작 -->
<div id="main_logo">
<h1 class="align-center">
<a href="${pageContext.request.contextPath}/main/main.do">회원제 게시판</a>
</h1>
</div>
<div id="main_nav">
<ul>
<li>
<a href="${pageContext.request.contextPath}/board/list.do">게시판</a>
</li>
<c:if test="${!empty user_num && user_auth == 9}">
<li>
<a href="${pageContext.request.contextPath}/member/adminList.do">회원관리</a>
</li>
<li>
<a href="${pageContext.request.contextPath}/item/adminWriteForm.do">상품관리</a>
</li>
</c:if>
<c:if test="${!empty user_num}">
<li>
<a href="${pageContext.request.contextPath}/member/myPage.do">MY페이지</a>
</li>
</c:if>
<c:if test="${!empty user_num && !empty user_photo}">
<li class="menu-profile">
<img src="${pageContext.request.contextPath}/upload/${user_photo}" width="25" height="25" class="my-photo">
</li>
</c:if>
<c:if test="${!empty user_num && empty user_photo}">
<li class="menu-profile">
<img src="${pageContext.request.contextPath}/images/face.png" width="25" height="25" class="my-photo">
</li>
</c:if>
<c:if test="${!empty user_num}">
<li class="menu-logout">
[<span>${user_id}</span>]
<a href="${pageContext.request.contextPath}/member/logout.do">로그아웃</a>
</li>
</c:if>
<c:if test="${empty user_num}">
<li>
<a href="${pageContext.request.contextPath}/member/registerUserForm.do">회원가입</a>
</li>
<li>
<a href="${pageContext.request.contextPath}/member/loginForm.do">로그인</a>
</li>
</c:if>
</ul>
</div>
<!-- header 끝 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 등록</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript">
window.onload=function(){
const myForm = document.getElementById('write_form');
myForm.onsubmit=function(){
const radio = document.querySelectorAll(
'input[type=radio]:checked');
if(radio.length < 1){
alert('상품표시여부를 지정하세요!');
return false;
}
const items = document.querySelectorAll('.input-check');
for(let i=0;i<items.length;i++){
if(items[i].value.trim()==''){
const label = document.querySelector(
'label[for="'+items[i].id+'"]');
alert(label.textContent + ' 항목은 필수 입력');
items[i].value = '';
items[i].focus();
return false;
}
}
};
};
</script>
</head>
<body>
<div class="page-main">
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<div class="content-main">
<h2>상품 등록</h2>
<form id="write_form" action="adminWrite.do" method="post"
enctype="multipart/form-data">
<ul>
<li>
<label>상품표시여부</label>
<input type="radio" name="status" value="1"
id="status1">미표시
<input type="radio" name="status" value="2"
id="status2">표시
</li>
<li>
<label for="name">상품명</label>
<input type="text" name="name" id="name"
maxlength="10" class="input-check">
</li>
<li>
<label for="price">가격</label>
<input type="number" name="price" id="price"
min="1" max="999999999" class="input-check">
</li>
<li>
<label for="quantity">수량</label>
<input type="number" name="quantity" id="quantity"
min="0" max="9999999" class="input-check">
</li>
<li>
<label for="photo1">상품사진1</label>
<input type="file" name="photo1"
class="input-check"
id="photo1" accept="image/gif,image/png,image/jpeg">
</li>
<li>
<label for="photo2">상품사진2</label>
<input type="file" name="photo2"
class="input-check"
id="photo2" accept="image/gif,image/png,image/jpeg">
</li>
<li>
<label for="detail">상품설명</label>
<textarea rows="5" cols="30"
name="detail" id="detail"
class="input-check"></textarea>
</li>
</ul>
<div class="align-center">
<input type="submit" value="등록">
<input type="button" value="목록"
onclick="location.href='adminList.do'">
</div>
</form>
</div>
</div>
</body>
</html>
User - Detail
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품정보</title>
<link rel="stylesheet" href="${pageContext.request.contextPath}/css/style.css" type="text/css">
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-3.7.1.min.js"></script>
</head>
<body>
<div class="page-main">
<jsp:include page="/WEB-INF/views/common/header.jsp"/>
<div class="content-main">
<c:if test="${item.status == 1}">
<div class="result-display">
<div class="align-center">
본 상품은 판매 중지되었습니다.
<p>
<input type="button" value="판매상품 보기"
onclick="location.href='itemList.do'">
</div>
</div>
</c:if>
<c:if test="${item.status == 2}">
</c:if>
</div>
</div>
</body>
</html>
Properties
Item
#상품관리 관리자
/item/adminWriteForm.do=kr.item.action.AdminWriteFormAction
/item/adminWrite.do=kr.item.action.AdminWriteAction