Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 컬렉션 타입
- 예외미루기
- 대덕인재개발원
- 인터페이스
- NestedFor
- abstract
- cursor문
- Java
- 집합_SET
- 자바
- 어윈 사용법
- GRANT VIEW
- 환경설정
- 추상메서드
- 오라클
- 다형성
- 한국건설관리시스템
- oracle
- 메소드오버로딩
- 정수형타입
- exception
- 예외처리
- 제네릭
- 컬렉션프레임워크
- 사용자예외클래스생성
- 생성자오버로드
- 객체 비교
- EnhancedFor
- 자동차수리시스템
- 참조형변수
Archives
- Today
- Total
거니의 velog
231201_SPRING 2 (8-2) 본문
package kr.or.ddit.controller.file.item02;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/item2")
public class FIleUploadController02 {
/*
* 3. 여러 개의 이미지 업로드
*
* - 한 번에 여러 개의 이미지를 업로드 하는 파일 업로드 기능을 구현한다.
*
* # 데이터베이스 만들기
* > item2 테이블을 활용
*
* # 파일 업로드 구현 설명
*
* - 파일 업로드 등록 화면 컨트롤러 만들기 (FileUploadController02)
* - 파일 업로드 등록 화면 컨트롤러 메소드 만들기 (item2RegisterForm:get)
* - 파일 업로드 등록 화면 만들기 (item2/register.jsp)
* - 여기까지 확인
*/
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String item2RegisterForm() {
return "item2/register";
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ITEM2</title>
</head>
<body>
<h2>REGISTER</h2>
<form action="/item2/register" method="post" enctype="multipart/form-data">
<table border="1">
<tr>
<td>상품명</td>
<td><input type="text" name="itemName" id="itemName" /></td>
</tr>
<tr>
<td>가격</td>
<td><input type="text" name="price" id="price" /></td>
</tr>
<tr>
<td>파일</td>
<td><input type="file" name="pictures" id="picture1" /></td>
</tr>
<tr>
<td>파일</td>
<td><input type="file" name="pictures" id="picture2" /></td>
</tr>
<tr>
<td>개요</td>
<td><textarea rows="10" cols="30" wrap="soft" name="description" id="description"></textarea></td>
</tr>
</table>
<div>
<button type="submit" id="registerBtn">Register</button>
<button type="button" id="listBtn" onclick="javascript:location.href='/item2/list'">List</button>
</div>
</form>
</body>
</html>
- http://localhost/item2/register
package kr.or.ddit.vo;
import java.util.List;
import org.springframework.web.multipart.MultipartFile;
import lombok.Data;
@Data
public class Item2 {
private int itemId;
private String itemName;
private int price;
private String description;
private List<MultipartFile> pictures;
private String pictureUrl;
private String pictureUrl2;
}
package kr.or.ddit.controller.file.item02;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/item2")
public class FIleUploadController02 {
/*
* 3. 여러 개의 이미지 업로드
*
* - 한 번에 여러 개의 이미지를 업로드 하는 파일 업로드 기능을 구현한다.
*
* # 데이터베이스 만들기
* > item2 테이블을 활용
*
* # 파일 업로드 구현 설명
*
* - 파일 업로드 등록 화면 컨트롤러 만들기 (FileUploadController02)
* - 파일 업로드 등록 화면 컨트롤러 메소드 만들기 (item2RegisterForm:get)
* - 파일 업로드 등록 화면 만들기 (item2/register.jsp)
* - 여기까지 확인
*
* - 파일 업로드 등록 기능 컨트롤러 만들기 (item2Register:post)
* - 파일 업로드 등록 기능 서비스 인터페이스 메소드 만들기
* - 파일 업로드 등록 기능 서비스 클래스 메소드 만들기
* - 파일 업로드 등록 기능 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 등록 기능 Mapper xml 쿼리 만들기
* - 파일 업로드 등록 완료 페이지 만들기 (item2/success.jsp)
* - 여기까지 확인
*/
@Inject
private IItem2Service itemService;
// root-context.xml에서 설정한 uploadPath 빈등록 path 경로를 사용한다.
@Resource(name = "uploadPath")
private String resourcePath;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String item2RegisterForm() {
return "item2/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String item2Register(Item2 item, Model model) throws IOException {
List<MultipartFile> pictures = item.getPictures();
for(int i = 0; i < pictures.size(); i++) {
MultipartFile file = pictures.get(i);
log.info("originalName : " + file.getOriginalFilename());
log.info("size : " + file.getSize());
log.info("contentType : " + file.getContentType());
String savedName = uploadFile(file.getOriginalFilename(), file.getBytes());
if(i == 0) { // 첫번째 URL 정보
item.setPictureUrl(savedName);
}else if(i == 1) { // 두번째 URL 정보
item.setPictureUrl2(savedName);
}
}
itemService.register(item);
model.addAttribute("msg", "등록이 완료되었습니다.");
return "item2/success";
}
private String uploadFile(String originalName, byte[] fileData) throws IOException {
UUID uuid = UUID.randomUUID(); // UUID로 파일명 생성
// UUID + "_" + 원본 파일명
String createdFileName = uuid.toString() + "_" + originalName;
File file = new File(resourcePath);
if(!file.exists()) {
file.mkdirs();
}
File target = new File(resourcePath, createdFileName); // 파일 업로드 준비
FileCopyUtils.copy(fileData, target); // 파일 복사 진행
return createdFileName;
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SUCCESS</title>
</head>
<body>
<h2>${msg }</h2>
<a href="/item2/list">List</a>
</body>
</html>
package kr.or.ddit.service;
import kr.or.ddit.vo.Item2;
public interface IItem2Service {
public void register(Item2 item);
}
package kr.or.ddit.service.impl;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
}
package kr.or.ddit.mapper;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<!--
[마이바티스] 스프링에서 "_"를 사용한 컬럼명 사용 시(BOOK 테이블의 BOOK_ID와 같은 컬럼)
카멜케이스로 읽어주는 역할(bookId와 같이)
ex) 테이블 컬럼명이 member_id인 경우 jsp 화면 단에서 이 값을 사용시 memberId로 사용할 수 있다.
-->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
<typeAliases>
<typeAlias type="kr.or.ddit.vo.Board" alias="board"/>
<typeAlias type="kr.or.ddit.vo.crud.CrudMember" alias="crudMember"/>
<typeAlias type="kr.or.ddit.vo.crud.CrudMemberAuth" alias="crudMemberAuth"/>
<typeAlias type="kr.or.ddit.vo.Item" alias="item"/>
<typeAlias type="kr.or.ddit.vo.Item2" alias="item2"/>
<typeAlias type="kr.or.ddit.vo.crud.PaginationInfoVO" alias="pagingVO"/>
<typeAlias type="kr.or.ddit.vo.crud.NoticeVO" alias="noticeVO"/>
<typeAlias type="kr.or.ddit.vo.crud.NoticeFileVO" alias="noticefileVO"/>
</typeAliases>
</configuration>
- http://localhost/item2/register
package kr.or.ddit.controller.file.item02;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/item2")
public class FIleUploadController02 {
/*
* 3. 여러 개의 이미지 업로드
*
* - 한 번에 여러 개의 이미지를 업로드 하는 파일 업로드 기능을 구현한다.
*
* # 데이터베이스 만들기
* > item2 테이블을 활용
*
* # 파일 업로드 구현 설명
*
* - 파일 업로드 등록 화면 컨트롤러 만들기 (FileUploadController02)
* - 파일 업로드 등록 화면 컨트롤러 메소드 만들기 (item2RegisterForm:get)
* - 파일 업로드 등록 화면 만들기 (item2/register.jsp)
* - 여기까지 확인
*
* - 파일 업로드 등록 기능 컨트롤러 만들기 (item2Register:post)
* - 파일 업로드 등록 기능 서비스 인터페이스 메소드 만들기
* - 파일 업로드 등록 기능 서비스 클래스 메소드 만들기
* - 파일 업로드 등록 기능 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 등록 기능 Mapper xml 쿼리 만들기
* - 파일 업로드 등록 완료 페이지 만들기 (item2/success.jsp)
* - 여기까지 확인
*
* - 파일 업로드 목록 화면 컨트롤러 메소드 만들기 (item2List:get)
* - 파일 업로드 목록 화면 서비스 인터페이스 메소드 만들기
* - 파일 업로드 목록 화면 서비스 클래스 메소드 만들기
* - 파일 업로드 목록 화면 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 목록 화면 Mapper xml 쿼리 만들기
* - 파일 업로드 목록 화면 페이지 만들기 (item2/list.jsp)
* - 여기까지 확인
*
* - 파일 업로드 수정 화면 컨트롤러 메소드 만들기 (item2ModifyForm:get)
* - 파일 업로드 수정 화면 서비스 인터페이스 메소드 만들기
* - 파일 업로드 수정 화면 서비스 클래스 메소드 만들기
* - 파일 업로드 수정 화면 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 수정 화면 Mapper xml 쿼리 만들기
* - 파일 업로드 수정 화면 페이지 만들기 (item2/modify.jsp)
* - 여기까지 확인
*
* - 파일 업로드 수정 기능 컨트롤러 메소드 만들기 (item2Modify:post)
* - 파일 업로드 수정 기능 서비스 인터페이스 메소드 만들기
* - 파일 업로드 수정 기능 서비스 클래스 메소드 만들기
* - 파일 업로드 수정 기능 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 수정 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인
*
* - 파일 업로드 삭제 화면 컨트롤러 메소드 만들기 (item2RemoveForm:get)
* - 파일 업로드 삭제 화면 서비스 인터페이스 메소드 만들기
* - 파일 업로드 삭제 화면 서비스 클래스 메소드 만들기
* - 파일 업로드 삭제 화면 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 삭제 화면 Mapper xml 쿼리 만들기
* - 파일 업로드 삭제 화면 만들기 (item2/remove.jsp)
* - 여기까지 확인
*
* - 파일 업로드 삭제 기능 컨트롤러 메소드 만들기 (item2Remove:post)
* - 파일 업로드 삭제 기능 서비스 인터페이스 메소드 만들기
* - 파일 업로드 삭제 기능 서비스 클래스 메소드 만들기
* - 파일 업로드 삭제 기능 Mapper 인터페이스 메소드 만들기
* - 파일 업로드 삭제 기능 Mapper xml 쿼리 만들기
* - 여기까지 확인
*/
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String item2list(Model model) {
List<Item2> itemList = itemService.list();
model.addAttribute("itemList", itemList);
return "item2/list";
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Service {
public void register(Item2 item);
public List<Item2> list();
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
@Override
public List<Item2> list() {
return mapper.list();
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
public List<Item2> list();
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
<select id="list" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
order by item_id desc
</select>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ITEM2</title>
</head>
<body>
<h2>LIST</h2>
<a href="/item2/register">상품 등록</a>
<hr />
<table border="1">
<tr>
<th width="80">상품 ID</th>
<th width="320">상품명</th>
<th width="100">가격</th>
<th width="80">편집</th>
<th width="80">제거</th>
</tr>
<c:choose>
<c:when test="${empty itemList }">
<tr>
<td colspan="5">조회하신 게시글이 존재하지 않습니다.</td>
</tr>
</c:when>
<c:otherwise>
<c:forEach items="${itemList }" var="item">
<tr>
<td align="center">${item.itemId }</td>
<td align="left">${item.itemName }</td>
<td align="right">${item.price }원</td>
<td align="center">
<a href="/item2/modify?itemId=${item.itemId }">상품편집</a>
</td>
<td align="center">
<a href="/item2/remove?itemId=${item.itemId }">상품제거</a>
</td>
</tr>
</c:forEach>
</c:otherwise>
</c:choose>
</table>
</body>
</html>
- http://localhost/item2/list
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String item2ModifyForm(int itemId, Model model) {
Item2 item = itemService.read(itemId);
model.addAttribute("item", item);
return "item2/modify";
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Service {
public void register(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
@Override
public List<Item2> list() {
return mapper.list();
}
@Override
public Item2 read(int itemId) {
return mapper.read(itemId);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
<select id="list" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
order by item_id desc
</select>
<select id="read" parameterType="int" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
where item_id = #{itemId}
</select>
</mapper>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ITEM2</title>
</head>
<body>
<h2>MODIFY</h2>
<form action="/item2/modify" method="post" enctype="multipart/form-data">
<input type="hidden" name="itemId" value="${item.itemId }" />
<input type="hidden" name="pictureUrl" value="${item.pictureUrl }" />
<input type="hidden" name="pictureUrl2" value="${item.pictureUrl2 }" />
<table border="1">
<tr>
<td>상품명</td>
<td><input type="text" name="itemName" id="itemName" value="${item.itemName }" /></td>
</tr>
<tr>
<td>가격</td>
<td><input type="text" name="price" id="price" value="${item.price }" /></td>
</tr>
<tr>
<td>파일1</td>
<td>
<img alt="파일 이미지" src="/item2/display?itemId=${item.itemId }" width="210", height="240">
</td>
</tr>
<tr>
<td>파일1</td>
<td><input type="file" name="pictures" id="picture1" /></td>
</tr>
<tr>
<td>파일2</td>
<td>
<img alt="파일 이미지" src="/item2/display2?itemId=${item.itemId }" width="210", height="240">
</td>
</tr>
<tr>
<td>파일2</td>
<td><input type="file" name="pictures" id="picture2" /></td>
</tr>
<tr>
<td>개요</td>
<td><textarea rows="10" cols="30" wrap="soft" name="description" id="description">${item.description }</textarea></td>
</tr>
</table>
<div>
<button type="submit" id="modifyBtn">Modify</button>
<button type="button" id="listBtn" onclick="javascript:location.href='/item2/list'">List</button>
</div>
</form>
</body>
</html>
package kr.or.ddit.controller.file.item02;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.UUID;
import javax.annotation.Resource;
import javax.inject.Inject;
import org.apache.commons.io.IOUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Controller
@RequestMapping("/item2")
public class FIleUploadController02 {
@Inject
private IItem2Service itemService;
// root-context.xml에서 설정한 uploadPath 빈등록 path 경로를 사용한다.
@Resource(name = "uploadPath")
private String resourcePath;
@RequestMapping(value = "/register", method = RequestMethod.GET)
public String itemRegisterForm() {
return "item2/register";
}
@RequestMapping(value = "/register", method = RequestMethod.POST)
public String itemRegister(Item2 item, Model model) throws IOException {
List<MultipartFile> pictures = item.getPictures();
for(int i = 0; i < pictures.size(); i++) {
MultipartFile file = pictures.get(i);
log.info("originalName : " + file.getOriginalFilename());
log.info("size : " + file.getSize());
log.info("contentType : " + file.getContentType());
String savedName = uploadFile(file.getOriginalFilename(), file.getBytes());
if(i == 0) { // 첫번째 URL 정보
item.setPictureUrl(savedName);
}else if(i == 1) { // 두번째 URL 정보
item.setPictureUrl2(savedName);
}
}
itemService.register(item);
model.addAttribute("msg", "등록이 완료되었습니다.");
return "item2/success";
}
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String item2list(Model model) {
List<Item2> itemList = itemService.list();
model.addAttribute("itemList", itemList);
return "item2/list";
}
@RequestMapping(value = "/modify", method = RequestMethod.GET)
public String item2ModifyForm(int itemId, Model model) {
Item2 item = itemService.read(itemId);
model.addAttribute("item", item);
return "item2/modify";
}
@ResponseBody
@RequestMapping(value = "/display")
public ResponseEntity<byte[]> displayFile(int itemId) {
InputStream in = null;
ResponseEntity<byte[]> entity = null;
// itemId에 해당하는 이미지 파일명을 얻어온다.
String fileName = itemService.getPicture(itemId);
log.info("fileName : " + fileName);
try {
String formatName = fileName.substring(fileName.lastIndexOf(".") + 1); // 확장자 추출
MediaType mType = getMediaType(formatName);
HttpHeaders headers = new HttpHeaders();
in = new FileInputStream(resourcePath + File.separator + fileName);
if(mType != null) {
headers.setContentType(mType);
}
entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
} catch (Exception e) {
e.printStackTrace();
entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST);
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return entity;
}
@ResponseBody
@RequestMapping(value = "/display2")
public ResponseEntity<byte[]> displayFile2(int itemId) {
InputStream in = null;
ResponseEntity<byte[]> entity = null;
// itemId에 해당하는 이미지 파일명을 얻어온다.
String fileName = itemService.getPicture2(itemId);
log.info("fileName : " + fileName);
try {
String formatName = fileName.substring(fileName.lastIndexOf(".") + 1); // 확장자 추출
MediaType mType = getMediaType(formatName);
HttpHeaders headers = new HttpHeaders();
in = new FileInputStream(resourcePath + File.separator + fileName);
if(mType != null) {
headers.setContentType(mType);
}
entity = new ResponseEntity<byte[]>(IOUtils.toByteArray(in), headers, HttpStatus.CREATED);
} catch (Exception e) {
e.printStackTrace();
entity = new ResponseEntity<byte[]>(HttpStatus.BAD_REQUEST);
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return entity;
}
// 추출된 확장자를 통한 Mime 타입 결정
private MediaType getMediaType(String formatName) {
if(formatName != null) {
if(formatName.toUpperCase().equals("JPG")) {
return MediaType.IMAGE_JPEG;
}
if(formatName.toUpperCase().equals("GIF")) {
return MediaType.IMAGE_GIF;
}
if(formatName.toUpperCase().equals("PNG")) {
return MediaType.IMAGE_PNG;
}
}
return null;
}
private String uploadFile(String originalName, byte[] fileData) throws IOException {
UUID uuid = UUID.randomUUID(); // UUID로 파일명 생성
// UUID + "_" + 원본 파일명
String createdFileName = uuid.toString() + "_" + originalName;
File file = new File(resourcePath);
if(!file.exists()) {
file.mkdirs();
}
File target = new File(resourcePath, createdFileName); // 파일 업로드 준비
FileCopyUtils.copy(fileData, target); // 파일 복사 진행
return createdFileName;
}
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
@Override
public List<Item2> list() {
return mapper.list();
}
@Override
public Item2 read(int itemId) {
return mapper.read(itemId);
}
@Override
public String getPicture(int itemId) {
return mapper.getPicture(itemId);
}
@Override
public String getPicture2(int itemId) {
return mapper.getPicture2(itemId);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
public String getPicture(int itemId);
public String getPicture2(int itemId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
<select id="list" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
order by item_id desc
</select>
<select id="read" parameterType="int" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
where item_id = #{itemId}
</select>
<select id="getPicture" parameterType="int" resultType="string">
select picture_url
from item2
where item_id = #{itemId}
</select>
<select id="getPicture2" parameterType="int" resultType="string">
select picture_url2
from item2
where item_id = #{itemId}
</select>
</mapper>
- http://localhost/item2/modify?itemId=2
@RequestMapping(value = "/modify", method = RequestMethod.POST)
public String item2Modify(Item2 item, Model model) throws Exception {
List<MultipartFile> pictures = item.getPictures();
for(int i = 0; i < pictures.size(); i++) {
MultipartFile file = pictures.get(i);
if(file != null && file.getSize() > 0) {
log.info("originalName : " + file.getOriginalFilename());
log.info("size : " + file.getSize());
log.info("contentType : " + file.getContentType());
String savedName = uploadFile(file.getOriginalFilename(), file.getBytes());
if(i == 0) {
item.setPictureUrl(savedName);
}
if(i == 1) {
item.setPictureUrl2(savedName);
}
}
}
itemService.modify(item);
model.addAttribute("msg", "수정이 완료되었습니다.");
return "item2/success";
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Service {
public void register(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
public String getPicture(int itemId);
public String getPicture2(int itemId);
public void modify(Item2 item);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
@Override
public List<Item2> list() {
return mapper.list();
}
@Override
public Item2 read(int itemId) {
return mapper.read(itemId);
}
@Override
public String getPicture(int itemId) {
return mapper.getPicture(itemId);
}
@Override
public String getPicture2(int itemId) {
return mapper.getPicture2(itemId);
}
@Override
public void modify(Item2 item) {
mapper.update(item);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
public String getPicture(int itemId);
public String getPicture2(int itemId);
public void update(Item2 item);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
<select id="list" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
order by item_id desc
</select>
<select id="read" parameterType="int" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
where item_id = #{itemId}
</select>
<select id="getPicture" parameterType="int" resultType="string">
select picture_url
from item2
where item_id = #{itemId}
</select>
<select id="getPicture2" parameterType="int" resultType="string">
select picture_url2
from item2
where item_id = #{itemId}
</select>
<update id="update" parameterType="item">
update item2
set
item_name = #{itemName},
price = #{price},
description = #{description},
picture_url = #{pictureUrl},
picture_url2 = #{pictureUrl2}
where item_id = #{itemId}
</update>
</mapper>
- http://localhost/item2/modify?itemId=2
@RequestMapping(value = "/remove", method = RequestMethod.GET)
public String item2RemoveForm(int itemId, Model model) {
Item2 item = itemService.read(itemId);
model.addAttribute("item", item);
return "item2/remove";
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ITEM2</title>
</head>
<body>
<h2>REMOVE</h2>
<form action="/item2/remove" method="post">
<input type="hidden" name="itemId" value="${item.itemId }" />
<table border="1">
<tr>
<td>상품명</td>
<td><input type="text" name="itemName" id="itemName" value="${item.itemName }" disabled="disabled" /></td>
</tr>
<tr>
<td>가격</td>
<td><input type="text" name="price" id="price" value="${item.price }" disabled="disabled" /></td>
</tr>
<tr>
<td>파일1</td>
<td>
<img alt="파일 이미지" src="/item2/display?itemId=${item.itemId }" width="210", height="240">
</td>
</tr>
<tr>
<td>파일2</td>
<td>
<img alt="파일 이미지" src="/item2/display2?itemId=${item.itemId }" width="210", height="240">
</td>
</tr>
<tr>
<td>개요</td>
<td><textarea rows="10" cols="30" wrap="soft" name="description" id="description" disabled="disabled">${item.description }</textarea></td>
</tr>
</table>
<div>
<button type="submit" id="removeBtn">Remove</button>
<button type="button" id="listBtn" onclick="javascript:location.href='/item2/list'">List</button>
</div>
</form>
</body>
</html>
- http://localhost/item2/remove?itemId=2
@RequestMapping(value = "/remove", method = RequestMethod.POST)
public String item2Remove(int itemId, Model model) {
itemService.remove(itemId);
model.addAttribute("msg", "삭제가 완료되었습니다.");
return "item2/success";
}
package kr.or.ddit.service;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Service {
public void register(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
public String getPicture(int itemId);
public String getPicture2(int itemId);
public void modify(Item2 item);
public void remove(int itemId);
}
package kr.or.ddit.service.impl;
import java.util.List;
import javax.inject.Inject;
import org.springframework.stereotype.Service;
import kr.or.ddit.mapper.IItem2Mapper;
import kr.or.ddit.service.IItem2Service;
import kr.or.ddit.vo.Item2;
@Service
public class Item2ServiceImpl implements IItem2Service {
@Inject
private IItem2Mapper mapper;
@Override
public void register(Item2 item) {
mapper.create(item);
}
@Override
public List<Item2> list() {
return mapper.list();
}
@Override
public Item2 read(int itemId) {
return mapper.read(itemId);
}
@Override
public String getPicture(int itemId) {
return mapper.getPicture(itemId);
}
@Override
public String getPicture2(int itemId) {
return mapper.getPicture2(itemId);
}
@Override
public void modify(Item2 item) {
mapper.update(item);
}
@Override
public void remove(int itemId) {
mapper.delete(itemId);
}
}
package kr.or.ddit.mapper;
import java.util.List;
import kr.or.ddit.vo.Item2;
public interface IItem2Mapper {
public void create(Item2 item);
public List<Item2> list();
public Item2 read(int itemId);
public String getPicture(int itemId);
public String getPicture2(int itemId);
public void update(Item2 item);
public void delete(int itemId);
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.or.ddit.mapper.IItem2Mapper">
<insert id="create" parameterType="item2">
insert into item2 (
item_id, item_name, price, description, picture_url, picture_url2
) values (
seq_item2.nextval, #{itemName}, #{price}, #{description}, #{pictureUrl}, #{pictureUrl2}
)
</insert>
<select id="list" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
order by item_id desc
</select>
<select id="read" parameterType="int" resultType="item2">
select
item_id, item_name, price, description, picture_url, picture_url2
from item2
where item_id = #{itemId}
</select>
<select id="getPicture" parameterType="int" resultType="string">
select picture_url
from item2
where item_id = #{itemId}
</select>
<select id="getPicture2" parameterType="int" resultType="string">
select picture_url2
from item2
where item_id = #{itemId}
</select>
<update id="update" parameterType="item">
update item2
set
item_name = #{itemName},
price = #{price},
description = #{description},
picture_url = #{pictureUrl},
picture_url2 = #{pictureUrl2}
where item_id = #{itemId}
</update>
<delete id="delete" parameterType="int">
delete from item2
where item_id = #{itemId}
</delete>
</mapper>
- http://localhost/item2/remove?itemId=2
'대덕인재개발원_웹기반 애플리케이션' 카테고리의 다른 글
231204_SPRING 2 (9-1) (0) | 2023.12.04 |
---|---|
231201_SPRING 2 (과제 1) (0) | 2023.12.01 |
231201_SPRING 2 (8-1) (0) | 2023.12.01 |
231130_SPRING 2 (7-3) (0) | 2023.11.30 |
231130_SPRING 2 (7-2) (0) | 2023.11.30 |