20221123(수)
- 목차
- 썸네일 이미지
- 상품 정보 저장
- 상품 이미지 미리보기
- 상품 목록보기
< 썸네일 이미지 >
- Thumnail 작업?
➡ 원본이미지를 대상으로 사본이미지를 해상도의 손실을 줄이고, 크기를 작게 만드는 것
1. docmall의 pom.xml에서 썸네일 이미지 라이브러리 추가
2. FileUtils.java 코드추가
출력스트림은 객체만 생성이 되어도, 실제 경로에 파일이 생성되어 있다.
3. ProductVO.java와 ProductInsert.jsp 파일의 변수명 일치여부 확인하기
폼 태그 안에 <input type = "file"> 태그가 들어갔다면,
반드시 form태그의 요청방식은 post여야 하고 인코딩타입은 "multipart/form-data"이어야 한다!!!!!!!!
4. 상품등록 이미지 저장시, 날짜폴더 생성됨
5. FileUtils.java의 작업에 의해 썸네일 이미지가 만들어짐
ex) 실행화면
원본파일 / 썸네일 파일
(1) 상품이미지 >> goods의 날짜폴더에 생성됨 (썸네일 이미지와 함께)
(2) 상품설명 CKEditor내 이미지 >> ckeditor 폴더 내 생성됨
[Spring][쇼핑몰 프로젝트][24] 상품 이미지 업로드(썸네일 생성 및 저장) - 5
프로젝트 Github : https://github.com/sjinjin7/Blog_Project 프로젝트 포스팅 색인(index) : https://kimvampa.tistory.com/188 목표 썸네일 이미지 생성 및 저장 저번 포스팅에서 이미지 저장까지 구현을 하였습니다. 앞
kimvampa.tistory.com
+ 추가설정(web.xml에 코드추가) *경로 변경필요!
<!--파일업로드 설정. WAS(Tomcat)자체 설정 -->
<multipart-config>
<location>C:\\dorothydatabase\\upload\\tmp</location>
<max-file-size>20971520</max-file-size><!-- 20mb -->
<max-request-size>41943040</max-request-size><!-- 40mb -->
<file-size-threshold>20971520</file-size-threshold><!-- 20mb -->
</multipart-config>
< 상품 정보 저장 >
0. SQL
--3. 상품 테이블
CREATE TABLE PRODUCT_TBL(
PDT_NUM NUMBER CONSTRAINT PK_PRODUCT_NUM PRIMARY KEY,
CATE_CODE NUMBER NOT NULL,
CATE_CODE_PRT NUMBER NOT NULL,
PDT_NAME VARCHAR2(50) NOT NULL,
PDT_PRICE NUMBER NOT NULL,
PDT_DISCOUNT NUMBER NOT NULL,
PDT_COMPANY VARCHAR2(30) NOT NULL,
PDT_DETAIL VARCHAR2(4000) NOT NULL,
PDT_IMG_FOLDER VARCHAR2(100) NOT NULL,
PDT_IMG VARCHAR2(100) NOT NULL,
PDT_AMOUNT NUMBER NOT NULL,
PDT_BUY CHAR(1) DEFAULT 'Y' NOT NULL,
PDT_DATE_SUB DATE DEFAULT SYSDATE NOT NULL,
PDT_DATE_UP DATE DEFAULT SYSDATE NOT NULL
);
-- PDT_NUM, CATE_CODE, CATE_CODE_PRT, PDT_NAME, PDT_PRICE, PDT_DISCOUNT,
-- PDT_COMPANY, PDT_DETAIL, PDT_IMG_FOLDER, PDT_IMG, PDT_AMOUNT, PDT_BUY,
-- PDT_DATE_SUB, PDT_DATE_UP
-- 상품테이블 시퀀스
CREATE SEQUENCE SEQ_PRODUCT_NUM;
1. AdProductMapper.java & AdProductMapper.xml
- DB에서 불러올 때 DATE 두개는 뺀다.
** 지금하는 얘기 잊지말기 (빈칸도 오류다!)
문자 입력하기(String 형) & 숫자 입력하기(int 형)
2. AdProductService.java & AdProductServiceImpl.java 상품추가 코드추가
3. AdProductController.java 상품정보 저장 코드추가
** FileUtils.uploadFile 파라미터 추가하면서 코드 수정해야 함(FileUtils.java)
ex) 실행화면 (상품등록 후 DB에 추가된 것 확인하기)
이미지 주소 일치여부도 확인하기!
< 상품 이미지 미리보기 >
- 파일 선택하는 순간에 미리보기 이미지가 띄워지도록 하기
1. productInsert.jsp 코드추가 (301~
- 제이쿼리 코드 추가
ex) 실행화면
< 상품 목록 보기 >
1. docmall에서 Criteria.jav와 PageDTO.java 복붙
2. AdProductController.java
- Model model 작업은 cri를 jsp로 쓰기 위해서 진행한 작업이다.
2. 매퍼 (2개 추가)
- Criteria cri 안에 들어잇는 4개의 필드가 매퍼에서 사용된다.
(1) 상품목록
- 반복할 쿼리 선언 : <sql id="">
- 선언한 쿼리 사용 : <include refId="">
[MyBatis] 동적 태그들(if, choose)
● if ● choose(when, otherwise) if는 test라는 속성과 함께 특정한 조건이 true가 되었을 때 포함된 SQL을 사용하고자 할 때 사용 ex) 단일 항목으로 제목, 내용, 작성자(title, content, writer)에 대해 검색해야
tired-overtime.tistory.com
(2) 상품개수
4. 서비스 (2개 추가)
5. 컨트롤러
6. jsp 파일 복붙후 productList.jsp 파일 만들기
(1) docmall에서 productList.jsp 코드 가져와서 삽입하기 </section>전까지
<div class="row">
<div class="col-md-12">
<div class="box box-primary">
<div class="box-header">
LIST PRODUCT
</div>
<div class="box-body">
<!-- 1)검색폼 -->
<form id="searchForm" action="/admin/product/productList" method="get">
<select name="type">
<option value="" <c:out value="${pageMaker.cri.type == null ? 'selected' : '' }" />>--</option>
<option value="N" <c:out value="${pageMaker.cri.type eq 'N' ? 'selected' : '' }" />>상품명</option>
<option value="C" <c:out value="${pageMaker.cri.type eq 'C' ? 'selected' : '' }" />>제조사</option>
<option value="NC" <c:out value="${pageMaker.cri.type eq 'NC' ? 'selected' : '' }" />>상품명 or 제조사</option>
</select>
<input type="text" name="keyword" value="${pageMaker.cri.keyword }">
<input type="hidden" name="pageNum" value="${pageMaker.cri.pageNum }">
<input type="hidden" name="amount" value="${pageMaker.cri.amount }">
<button type="button" id="btnSearch" class="btn btn-link">Search</button>
</form>
<table class="table table-hover">
<thead>
<tr>
<th scope="col">번호</th>
<th scope="col">상품명</th>
<th scope="col">가격</th>
<th scope="col">등록일</th>
<th scope="col">판매여부</th>
<th scope="col">수정</th>
<th scope="col">삭제</th>
</tr>
</thead>
<tbody>
<c:forEach items="${productList }" var="productVO">
<!-- BoardVO클래스의 필드명으로 코딩했지만, 호출은 getter메서드가 사용됨. -->
<tr>
<td scope="row"><c:out value="${productVO.pdt_num }" /></td>
<td>
<img src="/admin/product/displayFile?folderName=${productVO.pdt_img_folder }&fileName=s_${productVO.pdt_img }"
alt="" style="width: 80px;height: 80px;" onerror="this.onerror=null; this.src='/image/no_images.png'">
<a class="move" href="${productVO.pdt_num }"><c:out value="${productVO.pdt_name }" escapeXml="true" /></a>
</td>
<td><c:out value="${productVO.pdt_price }" /></td>
<td><fmt:formatDate value="${productVO.pdt_date_sub }" pattern="yyyy-MM-dd hh:mm" /></td>
<td><c:out value="${productVO.pdt_buy }" /></td>
<td><button type="button" name="btnProductEdit" data-pdt_num="${productVO.pdt_num }" class="btn btn-link">Edit</button></td>
<td>
<input type="hidden" name="pdt_img_folder" value="${productVO.pdt_img_folder }">
<input type="hidden" name="pdt_img" value="${productVO.pdt_img }">
<button type="button" name="btnProductDelete" data-pdt_num="${productVO.pdt_num }" class="btn btn-link">Delete</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
<nav aria-label="...">
<ul class="pagination">
<!-- 이전표시 -->
<c:if test="${pageMaker.prev }">
<li class="page-item">
<a class="page-link" href="${pageMaker.startPage - 1 }">Previous</a>
</li>
</c:if>
<!-- 페이지번호 표시. 1 2 3 4 5 -->
<c:forEach begin="${pageMaker.startPage }" end="${pageMaker.endPage }" var="num" >
<li class='page-item ${pageMaker.cri.pageNum == num ? "active": "" }'><a class="page-link" href="${num}">${num}</a></li>
</c:forEach>
<!--
<li class="page-item active" aria-current="page">
<span class="page-link">2</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
-->
<!-- 다음표시 -->
<c:if test="${pageMaker.next }">
<li class="page-item">
<a class="page-link" href="${pageMaker.endPage + 1 }">Next</a>
</li>
</c:if>
</ul>
<!--1)페이지 번호 클릭시 2)상품수정버튼 클릭시 3)상품삭제버튼 클릭시-->
<form id="actionForm" action="/board/list" method="get">
<input type="hidden" name="pageNum" value="${pageMaker.cri.pageNum}">
<input type="hidden" name="amount" value="${pageMaker.cri.amount}">
<input type="hidden" name="type" value="${pageMaker.cri.type}">
<input type="hidden" name="keyword" value="${pageMaker.cri.keyword}">
</form>
</nav>
</div>
</div>
</div>
</div>
(2) fmt 코드추가
(3) 아래 필요없는 내용 날리기
7. 컨트롤러 코드추가
ex) 실행화면
'🏫 Open API_JAVA' 카테고리의 다른 글
[86일차 - 1] 관리자_상품 수정 (페이지, 정보 읽어오기, 수정하기) (0) | 2022.11.24 |
---|---|
[85일차 - 2] 썸네일 크기조절 / 상품 목록 이미지 보여주기 / 특수문자 서버 전달 시 에러 / 검색 기능 추가 (0) | 2022.11.24 |
[84일차 - 2] CKEditor 내 이미지 업로드 작업 / 상품 이미지 등록 세팅 (0) | 2022.11.23 |
[84일차 - 1] CKEditor / 카테고리 목록 선택 (0) | 2022.11.22 |
[83일차] 메일링 폴더 생성 / 구역별 JSP 나누기 / 관리자 (로그인) (0) | 2022.11.22 |