생각하는 감쟈
[JAVA] 파일_01 : File_Upload Form 본문
파일 생성
SQL
create table fileinfo(
file_no number not null, -- 파일번호 (자동 증가)
file_writer varchar2(50) not null, -- 작성자 이름
origin_file_name varchar(260) not null, -- 원본 파일
save_file_name VARCHAR2(260) not null, -- 실제 저장된 파일 이름
file_size number, -- 파일 크기
file_date date not null, -- 파일 등록일
primary key(file_no)
);
file_info 시퀀스 생성
create SEQUENCE fileinfo_seq
start with 1
INCREMENT by 1
;
fileMain ( main 실행 page )
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href ="<%= request.getContextPath()%>/file/fileList.do"> 파일 목록 보기</a>
</body>
</html>
실행 화면 )
fileList
<%@page import="kr.or.ddit.vo.FileInfoVO"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%
//컨트롤러 (서블릿)에서 보내온 자료 받기
List<FileInfoVO> fileList = (List<FileInfoVO>)request.getAttribute("fileList.jsp");
%>
<body>
<h2> 전체 파일 목록</h2> <br><hr><br>
<table border="1">
<thead>
<tr>
<th>번호</th><th> 작성자</th> <th>저장파일명</th><th>원래의 파일명</th>
<th>파일크기</th><th>날짜</th><th>비고</th>
<tr>
</thead>
<tbody>
<%
if(fileList == null || fileList.size() == 0){
%>
<tr>
<td colspan="7"> Upload한 파일 목록이 하낟 없습니다</td>
</tr>
<%
}else {
for(FileInfoVO fvo : fileList){
%>
<tr>
<td><%=fvo.getFile_no() %></td>
<td><%=fvo.getFile_writer() %></td>
<td><%=fvo.getSave_file_name() %></td>
<td><%=fvo.getOrigin_file_name() %></td>
<td><%=fvo.getFile_size() %></td>
<td><%=fvo.getFile_date() %></td>
<td> DownLoad </td>
</tr>
<%
}
}
%>
</tbody>
</table>
</body>
</html>
실행 화면)
fileupload
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2> File Upload 연습용 Form</h2>
<form action = "<%=request.getContextPath()%>/file/fileUpload.do"
method="post" enctype="multipart/form-data">
작성자 이름 : <input type="text" name="username"> <br><br>
한 개의 파일 선택 : <input type="file" name="upFile1"> <br><br>
여러 개의 파일 선택 : <input type="file" name="upFile2" multiple> <br><br>
<input type="submit" value="전송">
</form>
<br><hr><br>
<a href="<%=request.getContextPath()%>/file/fileUpload.do">파일 목록 보기</a>
</body>
</html>
실행 화면)
SQL VO
SELECT
'private '||
DECODE( DATA_TYPE , 'NUMBER', 'int ', 'String ' )||
LOWER(COLUMN_NAME)||';'
FROM COLS
WHERE TABLE_NAME = 'FILEINFO'
ORDER BY COLUMN_ID;
fileinfoVo
package kr.or.ddit.vo;
public class fileinfoVO {
private int file_no;
private String file_writer;
private String origin_file_name;
private String save_file_name;
private long file_size;
private String file_date;
public int getFile_no() {
return file_no;
}
public void setFile_no(int file_no) {
this.file_no = file_no;
}
public String getFile_writer() {
return file_writer;
}
public void setFile_writer(String file_writer) {
this.file_writer = file_writer;
}
public String getOrigin_file_name() {
return origin_file_name;
}
public void setOrigin_file_name(String origin_file_name) {
this.origin_file_name = origin_file_name;
}
public String getSave_file_name() {
return save_file_name;
}
public void setSave_file_name(String save_file_name) {
this.save_file_name = save_file_name;
}
public long getFile_size() {
return file_size;
}
public void setFile_size(long file_size) {
this.file_size = file_size;
}
public String getFile_date() {
return file_date;
}
public void setFile_date(String file_date) {
this.file_date = file_date;
}
}
file_size>> private long으로 바꿔주기
mybatis-config
config에 <typeAlias> / <mappers> 추가
<typeAliases>
<typeAlias type="kr.or.ddit.vo.FileInfoVO" alias ="fileVo"/>
</typeAliases>
<mappers>
<mapper resource="kr/or/ddit/mybatis/mappers/fileinfo-mapper.xml"/>
</mappers>
fileinfo-mapper
<?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="fileinfo">
<insert id="insertFileinfo" parameterType="fileVo">
insert into fileinfo
(file_no, file_writer, origin_file_name, save_file_name, file_size, file_date)
values(fileinfo_seq.nextval, #{file_writer}, #{origin_file_name},
#{save_file_name},#{file_size}, sysdate)
</insert>
<select id="getAllFileinfo" resultType="fileVo">
select * from fileinfo
</select>
<select id="getFileinfo" parameterType="int" resultType="fileVo">
select * from fileinfo where file_no = #{file_no}
</select>
</mapper>
IFileInfoDao / FileInfoDaoImpl
package kro.or.ddit.upload.dao;
import java.util.List;
import kr.or.ddit.vo.FileInfoVO;
public interface IFileInfoDao {
/**
* 저장할 정보가 저장된 FileInfoVO 객체를 인수값으로 받아서 DB에 insert하는 메서드
*
* @param 저장할 정보가 저장된 FileInfoVO
* @return 작업 성공 : 1, 실패 : 0
*/
public int insertFileInfo(FileInfoVO fileVo);
/**
* db에 저장된 전체 파일 전보 목록을 가져와 List에 담아서 반환하는 메서드
* @return 전체 파일 정보 목록이 저장된 List 객체
*/
public List<FileInfoVO> getAllFileinfo();
/**
* 파일 번로를 인수값으로 받아서 해당 정보를 VO에 담아서 반환하는 메서드
* @param FileNo 검색할 file번호
* @return 검색된 파일 정보가 저장된 FileInfoVO객체
*/
public FileInfoVO getFileinfo(int FileNo);
}
package kro.or.ddit.upload.dao;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import kr.or.ddit.util.MyBatisUtil;
import kr.or.ddit.vo.FileInfoVO;
import sun.security.jca.GetInstance;
public class FileInfoDaoImpl implements IFileInfoDao {
private static FileInfoDaoImpl dao;
private FileInfoDaoImpl() { }
public static FileInfoDaoImpl getInstance() {
if(dao==null) dao = new FileInfoDaoImpl();
return dao;
}
@Override
public int insertFileInfo(FileInfoVO fileVo) {
SqlSession session = null;
int cnt = 0;
try {
session = MyBatisUtil.getSqlSession();
cnt = session.insert("fileinfo.insertFileinfo", fileVo);
if(cnt>0) session.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
session.close();
}
return cnt;
}
@Override
public List<FileInfoVO> getAllFileinfo() {
SqlSession session = null;
List<FileInfoVO> fileList = null; //반환값
try {
session = MyBatisUtil.getSqlSession();
fileList = session.selectList("fileinfo.getAllFileinfo");
} catch (Exception e) {
e.printStackTrace();
}finally {
session.close();
}
return fileList;
}
@Override
public FileInfoVO getFileinfo(int FileNo) {
SqlSession session = null;
FileInfoVO fileVo = null; //반환값
try {
session = MyBatisUtil.getSqlSession();
fileVo = session.selectOne("fileinfo.getFileinfo", FileNo);
} catch (Exception e) {
e.printStackTrace();
}finally{
session.close();
}
return fileVo;
}
}
IFileInfoServicel / FileInfoServiceImpl
package kro.or.ddit.upload.service;
import java.util.List;
import kr.or.ddit.vo.FileInfoVO;
public interface IFileInfoService {
/**
* 저장할 정보가 저장된 FileInfoVO 객체를 인수값으로 받아서 DB에 insert하는 메서드
*
* @param 저장할 정보가 저장된 FileInfoVO
* @return 작업 성고 : 1, 실패 : 0
*/
public int insertFileInfo(FileInfoVO fileVo);
/**
* db에 저장된 전체 파일 전보 목록을 가져와 List에 담아서 반환하는 메서드
* @return 전체 파일 정보 목록이 저장된 List 객체
*/
public List<FileInfoVO> getAllFileinfo();
/**
* 파일 번로를 인수값으로 받아서 해당 정보를 VO에 담아서 반환하는 메서드
* @param FileNo 검색할 file번호
* @return 검색된 파일 정보가 저장된 FileInfoVO객체
*/
public FileInfoVO getFileinfo(int FileNo);
}
package kro.or.ddit.upload.service;
import java.util.List;
import kr.or.ddit.vo.FileInfoVO;
import kro.or.ddit.upload.dao.FileInfoDaoImpl;
import kro.or.ddit.upload.dao.IFileInfoDao;
public class FileInfoServiceImpl implements IFileInfoService {
private IFileInfoDao dao;
private static FileInfoServiceImpl service;
private FileInfoServiceImpl() {
dao = FileInfoDaoImpl.getInstance();
}
public static FileInfoServiceImpl getInstance(){
if(service == null) service = new FileInfoServiceImpl();
return service;
}
@Override
public int insertFileInfo(FileInfoVO fileVo) {
return dao.insertFileInfo(fileVo);
}
@Override
public List<FileInfoVO> getAllFileinfo() {
return dao.getAllFileinfo();
}
@Override
public FileInfoVO getFileinfo(int FileNo) {
return dao.getFileinfo(FileNo);
}
}
FileList ( controller / servlet)
package kro.or.ddit.upload.controller;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import kr.or.ddit.vo.FileInfoVO;
import kro.or.ddit.upload.service.FileInfoServiceImpl;
import kro.or.ddit.upload.service.IFileInfoService;
// DB에 저장된 파일 목록을 가져와 View로 보내는 서블릿
@WebServlet("/file/fileList.do")
public class FileList extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
IFileInfoService service = FileInfoServiceImpl.getInstance();
// 전체 파일 목록을 가져와 List에 저장하기
List<FileInfoVO> fileList = service.getAllFileinfo();
// 구해진 전체 파일 목록을 View목록으로 보낸다
request.setAttribute("fileList", fileList);
request.getRequestDispatcher("/fileupload/fileList.jsp")
.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
FileUpload ( controller / servlet )
package kro.or.ddit.upload.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/file/fileUpload.do")
public class FileUpload extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//Get방식으로요청하면 FileUpload 홈 페이지로 이동한다.
request.getRequestDispatcher("/fileupload/fileupload.jsp")
.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// POSt방식으로요청하면 Upload된 파일을 받아서 처리한다.
doGet(request, response);
}
}
'Language > Java' 카테고리의 다른 글
[JAVA] 파일_02 : File_Download Form (0) | 2024.06.07 |
---|---|
[JQuery] 게시판 만들기_02 (0) | 2024.06.05 |
[JAVA] $.ajax - LprodTest (Ajax / Non Ajax) (0) | 2024.06.05 |
[JQuery] 메뉴판 만들기_01 (1) | 2024.06.04 |
[JAVA] $.ajax - jsonTest 코드 (0) | 2024.06.04 |
Comments