[Spring] STS / file upload 파일 올리기 _ 1. select
2021. 3. 4. 14:03ㆍWeb_Back-end/Spring
프로젝트 생성
상품 테이블 goods 를 사용해서 연습해보기
mybatis 설정 - DB와 연동하기 위해
oracle 설정
db.properties
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:orcl
username=scott
password=tiger
properties 파일을 읽어들이는 설정 + vo에 대한 애칭 설정 + 작성할 mapping 파일 경로 설정
dbConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<properties resource="com/example/demo/db/db.properties"/>
<typeAliases>
<typeAlias type="com.example.demo.vo.GoodsVo" alias="goodsVo"/>
</typeAliases>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="om/example/demo/db/GoodsMapper.xml"/>
</mappers>
</configuration>
sql 설정
GoodsMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="goods">
<select id="findAll" resultType="goodsVo">
select * from goods
</select>
</mapper>
sql을 요청하는 SqlSessionFactory 사용, 실제로 sql 요청하는 method
DBManager.java
package com.example.demo.db;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.demo.vo.GoodsVo;
public class DBManager {
private static SqlSessionFactory factory;
static {
try {
Reader reader =
Resources.getResourceAsReader("com/example/demo/db/dbConfig.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch(Exception e) {
System.out.println("예외발생 : " + e.getMessage());
}
}
/**
* method명 Mapper파일의 id 와 동일하게 한다
*/
public static List<GoodsVo> findAll(){
SqlSession session = factory.openSession();
List<GoodsVo> list = session.selectList("goods.findAll");
session.close();
return list;
}
}
Dao 생성
GoodsDao.java
package com.example.demo.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.example.demo.db.DBManager;
import com.example.demo.vo.GoodsVo;
@Repository
public class GoodsDao {
public List<GoodsVo> findAll(){
return DBManager.findAll();
}
}
Controller 생성
GoodsController.java
package com.example.demo.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dao.GoodsDao;
@Controller
public class GoodsController {
//의존관계 자동설정
@Autowired
private GoodsDao dao;
public void setDao(GoodsDao dao) {
this.dao = dao;
}
@RequestMapping("/listGoods.do")
public ModelAndView listGoods() {
ModelAndView mav = new ModelAndView();
mav.addObject("list", dao.findAll());
return mav;
}
}
JSP 사용하는 설정하기
application.properties
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521:orcl
spring.datasource.data-username=scott
spring.datasource.data-password=tiger
server.port=9090
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
porm.xml
view 생성
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>상품목록</h2>
<hr>
<table border="1" width="80%">
<tr>
<th>상품번호</th>
<th>상품이름</th>
</tr>
<c:forEach var="g" items="list">
<tr>
<td>${g.no }</td>
<td>${g.name }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
파일 업로드
상품정보 insert 하기 _ fname을 사용해서, 파일을 업로드하기
상품등록으로 가는 a태그를 목록페이지에서 추가
listGoods.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>상품목록</h2>
<a href="insertGoods.do">상품등록</a>
<hr>
<table border="1" width="80%">
<tr>
<th>상품번호</th>
<th>상품이름</th>
</tr>
<c:forEach var="g" items="${list }">
<tr>
<td>${g.no }</td>
<td>${g.name }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
상품등록 페이지 생성
insertGoods.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<h2>상품등록</h2>
<hr>
<form action="insertGoods.do" method="post" enctype="multipart/form-data">
상품번호 : <input type="text" name="no"><br>
상품이름 : <input type="text" name="name"><br>
상품수량 : <input type="text" name="qty"><br>
상품가격 : <input type="text" name="price"><br>
상품사진 : <input type="file" name="uploadFile"><br>
<input type="submit" value="등록">
<input type="reset" value="취소">
</form>
</body>
</html>
파일 업로드를 위한 객체생성을 하는 방법
SpringConfig.java
package com.example.demo;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
@Configuration
public class SpringConfig {
// xml을 대신해주는 method 생성
@Bean
public CommonsMultipartResolver multipartResolver() {
return new CommonsMultipartResolver();
}
}
vo에서 MultipartFile 추가 _ 변수명은 jsp id와 같이 한다
GoodsVo.java
package com.example.demo.vo;
import org.springframework.web.multipart.MultipartFile;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class GoodsVo {
private int no;
private String name;
private int qty;
private int price;
private String fname;
private MultipartFile uploadFile;
}
webapp 폴더안에 파일을 저장할 폴더를 생성
Controller 에 method 추가하기
GoodsController.java
package com.example.demo.controller;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.example.demo.dao.GoodsDao;
import com.example.demo.vo.GoodsVo;
@Controller
public class GoodsController {
//의존관계 자동설정
@Autowired
private GoodsDao dao;
public void setDao(GoodsDao dao) {
this.dao = dao;
}
@RequestMapping("/listGoods.do")
public ModelAndView listGoods() {
ModelAndView mav = new ModelAndView();
mav.addObject("list", dao.findAll());
return mav;
}
@RequestMapping(value="/insertGoods.do", method=RequestMethod.GET)
public void insertForm() {
// setViewName() 하지 않아도, 요청한 이름의 view페이지로 이동하기 때문에
// ModelAndView객체를 따로 만들지 않아도 된다
}
@RequestMapping(value="/insertGoods.do", method=RequestMethod.POST)
public ModelAndView insertSubmit(GoodsVo g, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
String path = request.getRealPath("/img");
System.out.println("path: " + path);
// client(=g = vo)가 업로드한 파일에 대한 정보를 가져온다(=getUploadFile)
// vo에 MultipartFile : uploadFile을 추가했다
MultipartFile uploadFile = g.getUploadFile();
if(uploadFile != null) {
try {
// file의 내용을 담는다
// uploadFile.getBytes() : 실제 파일의 내용을 byte형으로 담는다
// getBytes() : 예외처리
byte[] data = uploadFile.getBytes();
// client가 업로드한 파일의 파일명 알아오기
String fname = uploadFile.getOriginalFilename();
FileOutputStream fos =
new FileOutputStream(path + "/" + fname);
// client가 업로드한 파일의 내용을 기록
fos.write(data);
fos.close();
// 파일명을 fname에 지정해주기
g.setFname(fname);
} catch (IOException e) {
System.out.println("예외발생: " + e.getMessage());
}
}
int re = dao.insertGoods(g);
if(re == 1) {
mav.setViewName("redirect:/listGoods.do");
}else {
mav.addObject("msg", "상품등록에 실패하였습니다");
mav.setViewName("error");
}
return mav;
}
}
Dao 에 insertGoods() method 생성
GoodsDao.java
package com.example.demo.dao;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.example.demo.db.DBManager;
import com.example.demo.vo.GoodsVo;
@Repository
public class GoodsDao {
public List<GoodsVo> findAll(){
return DBManager.findAll();
}
public int insertGoods(GoodsVo g) {
// TODO Auto-generated method stub
return DBManager.insert(g);
}
}
DBManager.java 에 insert() method 생성
DBManager.java
package com.example.demo.db;
import java.io.Reader;
import java.util.List;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.example.demo.vo.GoodsVo;
public class DBManager {
private static SqlSessionFactory factory;
static {
try {
Reader reader =
Resources.getResourceAsReader("com/example/demo/db/dbConfig.xml");
factory = new SqlSessionFactoryBuilder().build(reader);
reader.close();
}catch(Exception e) {
System.out.println("예외발생 : " + e.getMessage());
}
}
/**
* method명 Mapper파일의 id 와 동일하게 한다
*/
public static List<GoodsVo> findAll(){
SqlSession session = factory.openSession();
List<GoodsVo> list = session.selectList("goods.findAll");
session.close();
return list;
}
public static int insert(GoodsVo g) {
// TODO Auto-generated method stub
SqlSession session = factory.openSession();
int re = session.insert("goods.insert", g);
// DB에 변동이 있는 명령을 내린 이후에 commit을 해줘야한다
session.commit();
session.close();
return re;
}
}
insert하는 방법 찾아보기
<insert id="insertAuthor"> insert into Author (id,username,password,email,bio) values
(#{id},#{username},#{password},#{email},#{bio}) </insert>
mapping 파일에 , sql 문 작성 (insert Node 추가)
GoodsMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="goods">
<select id="findAll" resultType="goodsVo">
select * from goods
</select>
<insert id="insert">
insert into goods values(#{no}, #{name}, #{qty}, #{price}, #{fname})
</insert>
</mapper>
Error 페이지 작성
error.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
${msg }
</body>
</html>
파일 업로드를 위한 jar파일이 필요하다
pom.xml에 jar를 추가
필요한 jar파일을 추가하는 방법 등을 볼 수 있다 ↓↓↓↓
Maven Repository: Search/Browse/Explore
Coroutines support libraries for Kotlin Last Release on Mar 3, 2021
mvnrepository.com
1 fileupload
현재 프로젝트 환경과 맞는 버전 선택
2 commons-io
현재 프로젝트 환경과 맞는 버전 선택
위의 내용을 복사하여, pom.xml 에 추가해준다
pom.xml
server가동하고, 서비스 요청하기
아직 한글 처리를 하지 않아, 한글이 깨진다
콘솔창에 출력한, img폴더의 경로에 파일이 저장되었는지 확인
잘 저장이 되었다
- 이제 한글깨지는 것을 처리해보자
- 모든 jsp파일을 UTF-8 로 인코딩해주고,
- 이후에 생성될 jsp파일이 자동으로 인코딩할 수 있게 변경해준다
- window_preferences_web_jsp files_utf-8로 변경
'Web_Back-end > Spring' 카테고리의 다른 글
[Spring] STS / file upload 파일 올리기 _ 3. update (0) | 2021.03.04 |
---|---|
[Spring] STS / file upload 파일 올리기 _ 2. delete (0) | 2021.03.04 |
[Spring] STS / lombok 사용 (0) | 2021.03.04 |
[Spring] 스프링부트 & mybatis 환경에서 DB연결 연습 2 (0) | 2021.03.03 |
[Spring] spring boot 기초_ DB와 연동하기 (0) | 2021.03.03 |