코딩/4-JSP & SERVLET

D03_session_upload

tree0505 2025. 7. 7. 16:55
반응형
  • 배우는 모든 내용은 끝난 것 
  • 나머지는 이제 버전 별로 계속 반복 

  • 배운거 
    • 회원가입, 게시판 , 장바구니 , 비동기 , 파일 업로드 

  • jsp . db . servlet . spring . node 

  • D03_session_upload
  • 라이브러리 cos.jar
  • 01_파일한개

  • index.jsp
<%@page import="java.time.LocalDateTime"%>
<%@ page import="java.util.Arrays" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
  
<%	
	int 		boardSize 			= 0;
	int 		boardLastNumber 	= 1;
	int[] 		boardNumberList 	= new int[1000];
	String[] 	boardSubjectList 	= new String[1000];
	String[] 	boardContentList 	= new String[1000];
	
	for(int i=0; i<3; i++) {
		boardNumberList[i] = i + 1;
		boardSubjectList[i] = "제목" + boardLastNumber;
		boardContentList[i] = "내용" + boardLastNumber;
		
		boardSize += 1;
		boardLastNumber += 1;
	}
	
	// 게시판정보
	session.setAttribute("boardSize", boardSize);
	session.setAttribute("boardLastNumber", boardLastNumber);
	session.setAttribute("boardNumberList", boardNumberList);
	session.setAttribute("boardSubjectList", boardSubjectList);
	session.setAttribute("boardContentList", boardContentList);
	
	int 		boardImageSize 				= 0;
	int			boardImageLastNumber		= 1;
	int[] 		boardImageNumberList 		= new int[1000];
	int[] 		boardImageBoardNumberList 	= new int[1000];
	String[] 	boardImageNameList 			= new String[1000];
	
	session.setAttribute("boardImageSize", boardImageSize);
	session.setAttribute("boardImageLastNumber", boardImageLastNumber);
	session.setAttribute("boardImageNumberList", boardImageNumberList);
	session.setAttribute("boardImageBoardNumberList", boardImageBoardNumberList);
	session.setAttribute("boardImageNameList", boardImageNameList);
	
%>	
   
<%
	response.sendRedirect("boardMain.jsp");
%>

  • boardWriteForm.jsp
<%@ 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>
	<%
		String tdColor = "lightblue";
	%>
	
	<jsp:include page="header.jsp"></jsp:include>
	
	
	<br><br>
	<div align="center">
		
		<h2>새 게시글 작성하기</h2>
		<form  id="FILE_FORM"  method="post" enctype="multipart/form-data">
		<!-- file form 찾기 위해서
			enctype="multipart/form-data" 명령어를 넣어주어야 한다. 
		  -->
			<table border="1">
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">제목</td>
					<td width="450"><input type="text" id="subject" name="subject"></td>
				</tr>
				
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">글내용</td>
					<td width="450"><textarea rows="10" cols="50" id="content" name="content"></textarea></td>
				</tr>
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">사진첨부</td>
					<td width="450" id="box">
						 <p></p>	
						 <input type="file" name="file1">
						 <p></p>					
					</td>
				</tr>
				<tr height="40">
					<td width="150" align="center" colspan="2" bgcolor="<%= tdColor %>">
	               		<button id="button-boardWritePro">글쓰기</button>
						<button id="button-boardMain">메인화면</button>					
					</td>
				</tr>				
			</table>
		</form>
	</div>
	
	<script>		
		let boardWritePro = (event) => {
			event.preventDefault(); //이벤트 제거 . 페이지 이동을 강제로 막는다. 
              let form = document.querySelector("#FILE_FORM"); //가져오기 
		      let formData = new FormData(form); //new FromData(form); 
		     		      
		      /*
		      	옵션 7개 
		      	$.ajax ({1,2,3,4,5,6,7})
		      	
		      	1 => url : 'boardWritePro.jsp'
		      	2 => processData : false
		      	3 => contentType: false
		      	4 => data : formData => new FormData(); 
		      	5 => type : 'POST'
		      	6 => success : function (result){
		      			성공하면 여기로 들어온다. result => html  
		      	}
		      	7 => error : function (){}
		      
		      */
		      $.ajax({
			        url: 'boardWritePro.jsp',
			        processData: false,
			        contentType: false,
			        data: formData,
			        type: 'POST',
			        success: function(result){
			         	alert("게시글을 작성했습니다.");
			         	location.href="boardMain.jsp";
			        },
			        
		      }); 
            return true;
        }			
		
		let boardMain = (event) => {
			event.preventDefault();
			location.href='boardMain.jsp';
		}
		
		let num = 1;	
		
		let $btnBoardWritePro = document.querySelector("#button-boardWritePro");
	   	$btnBoardWritePro.addEventListener("click", boardWritePro);
		
	    let $btnBoardMain = document.querySelector("#button-boardMain");
	    $btnBoardMain.addEventListener("click", boardMain);
	    
    </script>	
</body>
</html>

  • boardWritePro.jsp
<%@page import="java.time.LocalDateTime"%>
<%@page import="java.io.Console"%>

<%@page import="java.util.Enumeration"%>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
    <%
  //-----------------------------------------------------------------------------------------------------
		int 		boardSize 			= 	(int)session.getAttribute("boardSize");
		int 		boardLastNumber 	= 	(int)session.getAttribute("boardLastNumber");
		int[] 		boardNumberList 	= 	(int[])session.getAttribute("boardNumberList");
		String[] 	boardSubjectList 	=  	(String[])session.getAttribute("boardSubjectList");
		String[] 	boardContentList 	=  	(String[])session.getAttribute("boardContentList");
		//-----------------------------------------------------------------------------------------------------
		int 		boardImageSize 				= 	(int)session.getAttribute("boardImageSize");
		int 		boardImageLastNumber 		= 	(int)session.getAttribute("boardImageLastNumber");
		int[] 		boardImageNumberList 		= 	(int[])session.getAttribute("boardImageNumberList");
		int[] 		boardImageBoardNumberList 	=  	(int[])session.getAttribute("boardImageBoardNumberList");
		String[] 	boardImageNameList 			=	(String[])session.getAttribute("boardImageNameList");
    
    %>
    
    <% 
    	// 이미지 파일을 저장할때는 application.getRealPath("") 를 사용한다.
	    String filePathStr = application.getRealPath("");
    	//application.getRealPath 카피본이 있는 위치 
    
    
    	// 여기는 맨 앞에 슬러시를 붙이지 않는다.
    	filePathStr += "01_파일한개/uploadFile";
    	//폴더를 한개 만들어야 한다. 
    	//카피본에서 이미지가 저장될 폴더, 원본은 그냥 비여있다. 
    	//"/" 슬러쉬 안 붙인다. 앞에 
    	
    	System.out.println(filePathStr);
    	
	    try{ 

	    	int maxPostSize= 1024*1024*10; //용량 . 1바이트 => 1024 * 1024 => 1메가. 10메가 
	    	String encoding="UTF-8";	 //인코딩    		
	     	
	    	MultipartRequest mr = new MultipartRequest(request, filePathStr, maxPostSize, encoding, new DefaultFileRenamePolicy());
	    	//임포트 시켜야 됨. 
	    	//옵션 
	    	//1번. request. |2번 이미지 폴더(카피본+폴더)  filePathStr | 3. maxPostSize 10메가 | encoding 인코딩 | DefaultFileRenamePolicy 기본 파일 이름변경 정책. 이름이 똑같으면 알아서 이름 바꿔라. 
	    	//파일을 가져오는것 /아직 세팅만 한것 

 			String subject = mr.getParameter("subject"); //꺼내오기 /제목
 			String content = mr.getParameter("content"); //꺼내오기 /글 내용 / requset 꺼내듯이 그냥 mr.getParmeter 
 			
 			boardNumberList[boardSize] = boardLastNumber;
 			boardSubjectList[boardSize] = subject;
 			boardContentList[boardSize] = content;
 			//배열에 담은것 
 			
	    	String item="";
	    	String ofileName="";
	    	String reFileName="";
	    	
	    	
	    	Enumeration fileList= mr.getFileNames();
	    	//이미지 꺼내기 
	    	//Enumeration => 파일 이미지를 꺼내는 클래스 
	    	//이미지 꺼내는 클래스 저장 
	    	
	    	    	
	    	String sql = "";	    
	    	//이미지는 한번에 하나씩 밖에 못 꺼낸다. 
	    	while(fileList.hasMoreElements()){				//첨부파일 끝까지 계속 반복
	    		//이미지가 있으면 
	    		
	     	  	item = (String)fileList.nextElement(); //이미지를 꺼내라. 
	    		System.out.println("item = " + item.toString()); //출력 
	     	   	ofileName=mr.getOriginalFileName(item); 	 //원본 파일명	
	     	  	reFileName=mr.getFilesystemName(item);		// 변경된 파일명 (파일명이겹치지않으면 원본과 같은이름으로저장)
	     	   	
 	 			boardImageNumberList[boardImageSize] = boardImageSize + 1;
 	 			boardImageBoardNumberList[boardImageSize] = boardNumberList[boardSize];
 	 			boardImageNameList[boardImageSize] = reFileName;
				//배열 
 	 			
 	 			boardImageSize += 1;
 	 			boardImageLastNumber += 1;
	     	} 
	    	
	    	
 			boardSize += 1;
	    	boardLastNumber += 1;
	    	
	    	//---------------------------------------------------------------------------
	    	session.setAttribute("boardSize", boardSize);
	    	session.setAttribute("boardLastNumber", boardLastNumber);
	 		session.setAttribute("boardNumberList", boardNumberList);
	 		session.setAttribute("boardSubjectList", boardSubjectList);
	 		session.setAttribute("boardContentList", boardContentList);
	 		//---------------------------------------------------------------------------
	 		session.setAttribute("boardImageSize", boardImageSize);
	 		session.setAttribute("boardImageLastNumber", boardImageLastNumber);
	 		session.setAttribute("boardImageNumberList", boardImageNumberList);
	 		session.setAttribute("boardImageBoardNumberList", boardImageBoardNumberList);
	 		session.setAttribute("boardImageNameList", boardImageNameList);
    	}
	    catch(Exception e){
	    	e.printStackTrace();
    	}
  
   %>

  • 02_파일여러개

  • boardWriteForm.jsp
<%@ 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>
	<%
		String tdColor = "lightblue";
	%>
	
	<jsp:include page="header.jsp"></jsp:include>
	
	
	<br><br>
	<div align="center">
		
		<h2>새 게시글 작성하기</h2>
		<form  id="FILE_FORM"  method="post" enctype="multipart/form-data">
			<table border="1">
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">제목</td>
					<td width="450"><input type="text" id="subject" name="subject"></td>
				</tr>
				
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">글내용</td>
					<td width="450"><textarea rows="10" cols="50" id="content" name="content"></textarea></td>
				</tr>
				<tr height="40">
					<td width="150" align="center" bgcolor="<%= tdColor %>">사진첨부</td>
					<td width="450" id="box">
						 <p></p>	
						 <button id="button-addPicture">사진추가</button>
						 <p></p>					
					</td>
				</tr>
				<tr height="40">
					<td width="150" align="center" colspan="2" bgcolor="<%= tdColor %>">
	               		<button id="button-boardWritePro">글쓰기</button>
						<button id="button-boardMain">메인화면</button>					
					</td>
				</tr>				
			</table>
		</form>
	</div>
	
	<script>		
		//버튼 생기게 하는것 
		let addPicture = (event) => {
			
			event.preventDefault();	 //버튼 막기 		 
        	if(num == 6){
    			alert("사진은 5장까지 업로드 가능합니다.");
    			return;
    		}
        	
			//태그들 생성 
			//사진 추가를 누르면 태그가 생긴다. 
        	let $box = document.getElementById("box");
        	
        	let $line = document.createElement('span');
        	$line.className = 'line';
        	
        	let $newP1 = document.createElement('span');
            let fileNumber = "file" + num + "";
            let str = "<input type='file' value='추가' name='";            
            str += fileNumber + "'>";
            $newP1.innerHTML = str;
            $line.appendChild($newP1); 
            
        	let $newP2 = document.createElement('span');
        	str = "<input type='button' value='삭제'  onclick='delPicture(this)'><p></p>";       
        	$newP2.innerHTML = str;
            $line.appendChild($newP2);
            
            $box.appendChild($line);
            
            num += 1;
        }     
		
		//지우는것 
		let delPicture = (event) => {
			let $lineList = document.querySelectorAll('.line');
			
			for(let i=0; i<$lineList.length; i++) {
				if($lineList[i].children[1].children[0] == event) {
					console.log(i);
					$lineList[i].remove();
					num -= 1;
					break;
				}
			}
		}
		
		
		let boardWritePro = (event) => {
			event.preventDefault();
                     
              let form = document.querySelector("#FILE_FORM");
		      let formData = new FormData(form);
		     		      
		      $.ajax({
			        url: 'boardWritePro.jsp',
			        processData: false,
			        contentType: false,
			        data: formData,
			        type: 'POST',
			        success: function(result){
			         	alert("게시글을 작성했습니다.");
			         	location.href="boardMain.jsp";
			        },
			        
		      }); 
            return true;
        }			
		
		let boardMain = (event) => {
			event.preventDefault();
			location.href='boardMain.jsp';
		}
		
		let num = 1;	
		
		let $btnAddPicture = document.querySelector("#button-addPicture");
	   	$btnAddPicture.addEventListener("click", addPicture);
		
		let $btnBoardWritePro = document.querySelector("#button-boardWritePro");
	   	$btnBoardWritePro.addEventListener("click", boardWritePro);
		
	    let $btnBoardMain = document.querySelector("#button-boardMain");
	    $btnBoardMain.addEventListener("click", boardMain);
	    
    </script>	
</body>
</html>

  • boardWritePro.jsp
<%@page import="java.time.LocalDateTime"%>
<%@page import="java.io.Console"%>

<%@page import="java.util.Enumeration"%>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
   
    <%
  //-----------------------------------------------------------------------------------------------------
		int 		boardSize 			= 	(int)session.getAttribute("boardSize");
		int 		boardLastNumber 	= 	(int)session.getAttribute("boardLastNumber");
		int[] 		boardNumberList 	= 	(int[])session.getAttribute("boardNumberList");
		String[] 	boardSubjectList 	=  	(String[])session.getAttribute("boardSubjectList");
		String[] 	boardContentList 	=  	(String[])session.getAttribute("boardContentList");
		//-----------------------------------------------------------------------------------------------------
		int 		boardImageSize 				= 	(int)session.getAttribute("boardImageSize");
		int 		boardImageLastNumber 		= 	(int)session.getAttribute("boardImageLastNumber");
		int[] 		boardImageNumberList 		= 	(int[])session.getAttribute("boardImageNumberList");
		int[] 		boardImageBoardNumberList 	=  	(int[])session.getAttribute("boardImageBoardNumberList");
		String[] 	boardImageNameList 			=	(String[])session.getAttribute("boardImageNameList");
    
    %>
    
    <% 
    
	    String filePathStr = application.getRealPath(""); //카피본 위치 
    	filePathStr += "02_파일여러개/uploadFile"; //폴더를 미리 만들어놓기. 원본은 비여놓기 
    	System.out.println(filePathStr);
    	
	    try{ 

	    	int maxPostSize= 1024*1024*10;
	    	String encoding="UTF-8";	    		
	     	MultipartRequest mr = new MultipartRequest(request, filePathStr, maxPostSize, encoding, new DefaultFileRenamePolicy());

 			String subject = mr.getParameter("subject");
 			String content = mr.getParameter("content");
 			
 			boardNumberList[boardSize] = boardLastNumber;
 			boardSubjectList[boardSize] = subject;
 			boardContentList[boardSize] = content;
 			
	    	String item="";
	    	String ofileName="";
	    	String reFileName="";
	    	Enumeration fileList= mr.getFileNames();	 
	    	    	
	    	String sql = "";	    	   	
	    	while(fileList.hasMoreElements()){				//첨부파일 끝까지 계속 반복
	    		
	     	  	item = (String)fileList.nextElement(); //이미지 꺼내기 
	     	   	ofileName=mr.getOriginalFileName(item); 	 //원본 파일명	
	     	  	reFileName=mr.getFilesystemName(item);		// 변경된 파일명 (파일명이 겹치지 않으면 변경안될수도있음)
	     	   	
 	 			boardImageNumberList[boardImageSize] = boardImageSize + 1;
 	 			boardImageBoardNumberList[boardImageSize] = boardNumberList[boardSize];
 	 			boardImageNameList[boardImageSize] = reFileName;
				//db 넣기 
				
 	 			boardImageSize += 1;
 	 			boardImageLastNumber += 1;
	     	} 
	    	
	    	
 			boardSize += 1;
	    	boardLastNumber += 1;
	    	
	    	//---------------------------------------------------------------------------
	    	session.setAttribute("boardSize", boardSize);
	    	session.setAttribute("boardLastNumber", boardLastNumber);
	 		session.setAttribute("boardNumberList", boardNumberList);
	 		session.setAttribute("boardSubjectList", boardSubjectList);
	 		session.setAttribute("boardContentList", boardContentList);
	 		//---------------------------------------------------------------------------
	 		session.setAttribute("boardImageSize", boardImageSize);
	 		session.setAttribute("boardImageLastNumber", boardImageLastNumber);
	 		session.setAttribute("boardImageNumberList", boardImageNumberList);
	 		session.setAttribute("boardImageBoardNumberList", boardImageBoardNumberList);
	 		session.setAttribute("boardImageNameList", boardImageNameList);
    	}
	    catch(Exception e){
	    	e.printStackTrace();
    	}
  
   %>
반응형

'코딩 > 4-JSP & SERVLET' 카테고리의 다른 글

02_이메일  (1) 2025.07.09
D04_session_API => 01_통계  (3) 2025.07.09
D02_session_async  (0) 2025.07.07
C22_dao_board_re  (0) 2025.07.03
C12_db_gisatest => 01_골프장  (1) 2025.06.30