ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JAVA] JDK 실습 (4)
    Studying/Java 2022. 8. 21. 17:56

    2022-08-18

    파일 업로드 실습

    • 시작하기 전에...
    • 각 파일들의 Statement → PrepareStatement로 바꾸기

     

     

    JAVA 코드 작성

     

    testWriteSave.jsp - 데이터 작성

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ include file="./ssi.jsp" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="java.sql.Connection"%>
    <%@ page import="java.sql.DriverManager"%>
    <%@ page import="java.sql.*"%>

     

     

    제목, 급여, 코드를 url 파라미터로부터 가져와 정상적으로 저장되는지 출력해본다.

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>[testWriteSave.jsp]</title>
    </head>
    <body>
        <p>
        <img src="./images/bear.gif">
        <h2>testWriteSave.jsp</h2>
        
        <%
            Gtitle = request.getParameter("title");
            Gpay = Integer.parseInt(request.getParameter("pay"));
            Gcode = Integer.parseInt(request.getParameter("code"));
            
            System.out.println("<h2>제목 데이터 = " + Gtitle);
            System.out.println("<h2>급여 데이터 = " + Gpay);
            System.out.println("<h2>코드 데이터 = " + Gcode);

     

     

     

    DB에서 데이터를 저장할 쿼리문을 만든다.

    msg = "insert into test(title, pay, wdate, code) values(?, ?, sysdate,
        ?)";
    
        try{
            PST = CN.prepareStatement(msg);
            PST.setString(1, Gtitle); // ? 매칭
            PST.setInt(2, Gpay);
            PST.setInt(3, Gcode);
            PST.executeUpdate();
            System.out.println(Gcode + "PreparedStatement 성공 처리");
            response.sendRedirect("testList.jsp");
        }catch(Exception ex){
            response.sendRedirect("testList.jsp");
            System.out.println("test테이블 저장 실패 에러 " + ex);
        }
    %>
    • setString, setInt - 쿼리문의 ? 자리에 매칭할 변수를 지정한다.

     

     

    아래 작은 링크 버튼도 달아준다.

    <p>
        <a href="testWrite.jsp">[게시판입력화면]</a>
        <a href="testList.jsp">[게시판전체출력]</a>
        <a href="index.jsp">[index]</a>
        <p><br><br>
    </body>
    </html>

     

     

     

     

    testEditSave.jsp - 데이터 수정

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ include file="./ssi.jsp" %>
    <%@ page import="java.util.Date" %>
    <%@ page import="java.sql.Connection"%>
    <%@ page import="java.sql.DriverManager"%>
    <%@ page import="java.sql.*"%>

     

     

    이 부분은 동일하다.

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>[testEditSave.jsp]</title>
    </head>
    <body>
        <p>
        <img src="./images/bear.gif">
        <h2>testEditSave.jsp</h2>
        
        <%
            String eGtitle = request.getParameter("title");
            int eGpay = Integer.parseInt(request.getParameter("pay"));
            int eGcode = Integer.parseInt(request.getParameter("code"));
            
            System.out.println("수정제목데이터 = " + eGtitle);
            System.out.println("수정급여데이터 = " + eGpay);
            System.out.println("수정코드데이터 = " + eGcode);

     

     

     

    데이터를 수정하는 쿼리문을 작성한다.

    msg = "update test set title=?, pay=?, wdate=sysdate where code=?";
    
            try{
                PST = CN.prepareStatement(msg);
                PST.setString(1, eGtitle);
                PST.setInt(2, eGpay);
                PST.setInt(3, eGcode);
                PST.executeUpdate();
                System.out.println(eGcode +"데이터 PreparedStatement 수정성공");
                response.sendRedirect("testList.jsp");
            }catch(Exception ex){
                response.sendRedirect("testList.jsp");
                System.out.println("test테이블 수정실패 에러 " + ex);
            }
        %>
    </body>
    </html>

     

     

     

     

     

    파일 업로드를 시작하기 전 준비 단계

    • 이미지 파일을 다운로드 받을 storage 폴더 생성
      • miniBBS > 이미지 저장 경로는 아래와 같다.
        • C:\workspace\work.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\miniBBS\storage
      • Web0812 에도 똑같이 아래 경로에 storage 폴더를 생성
        • C:\workspace\work.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Web0812
      • eclipse Refresh 후 안 보이면 WebContent 오른쪽 클릭 > storage 폴더 생성

     

    • WEB-INF > lib 폴더에 cos.jar 파일을 추가
      • http://www.servlets.com/cos/
      • 위 링크에서 cos-22.05.zip 다운로드
      • C:\workspace\cos-22.05\lib 에 cos.jar 복사/붙여넣기
      • 아래 두 클래스를 import 해서 쓸 거임 
        • C:\workspace\cos-22.05\src\com\oreilly\servlet\multipart
          • DefaultFileRenamePolicy.class
        • C:\workspace\cos-22.05\src\com\oreilly\servlet
          • MultipartRequest.java

     

     

     

    JAVA 코드 작성

     

    AAA.jsp - 파일 입력 페이지

    <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="UTF-8">
     <title>AAA.jsp</title>
     <style type="text/css">
    ...
     </style>
    </head>
    <body>
        <font size=7 color=blue> <b>AAA.jsp</b> </font> 
        <form method="post" action="BBB.jsp" enctype="multipart/form-data">
            <input type="hidden" name="sabun" value="7789"> <br>
           제목 : <input type="text" name="title" value="snow"> <br>
           파일 : <input type="file" name="fileimg"> <br>
                 <input type="submit" value="파일 전송">
                 <input type="reset" value="입력 취소">
        </form>
     <div id="preview">
     </div>
      
    </body>
    </html>
    • enctype="multipart/form-data" 
      • enctype : form 데이터가 서버로 제출될 때 해당 데이터가 인코딩 되는 방식을 지시
        1. application/x-www-form-urlencoded : 기본값. 모든 문자들은 서버로 보내기 전에 인코딩됨을 명시.
        2. multipart/form-data : 모든 문자를 인코딩하지 않음을 명시. 파일이나 이미지를 서버로 전송할 때 주로 사용.
        3. text/plain : 공백 문자(space)는 "+" 기호로 변환하지만, 나머지 문자는 모두 인코딩되지 않음을 명시.

     

     

     

    BBB.jsp - 입력한 파일을 받는다

    <%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>
    
    <%@ page import="com.oreilly.servlet.MultipartRequest" %>
    <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
    <%@ page import="java.io.File" %>
    
    <!DOCTYPE html>
    <html>
    <head>
     <meta charset="UTF-8">
     <title>BBB.jsp</title>
     <style type="text/css">
    ...
     </style>
    </head>
    <body>
      <h2>BBB.jsp</h2>
     
        <%
          String path = application.getRealPath("./storage");  
          System.out.println("공통저장경로" + path);
    
          int size = 1024*1024*7;
          DefaultFileRenamePolicy dfr = new DefaultFileRenamePolicy();
    
          MultipartRequest mr = new MultipartRequest(request,path,size,"UTF-8");
    
    	  // MultipartRequest로 전송 받은 데이터를 불러온다.
          String dsabun = mr.getParameter("sabun");
          String dtitle = mr.getParameter("title");
          String dimg = mr.getFilesystemName("fileimg");
          
          out.println("넘어온사번 = " + dsabun +"<br>");
          out.println("넘어온제목 = " + dtitle +"<br>");
          out.println("넘어온파일 = " + dimg +"<br>");
    
          File ff = mr.getFile("fileimg");
          out.println(dimg + "파일크기는" + ff.length() + "Byte <br>");
        %> 
    	
    	<!-- 이미지를 클릭했을 때 이동 -->
    	<a href="BBBdownload.jsp?fileName=<%=dimg%>">
    		<img src="<%=request.getContextPath() %>/storage/<%=dimg %>" width=300 height=150>
    	</a>&nbsp;&nbsp;
    
      <p>
      <a href="AAA.jsp">[AAA화면]</a>
      <a href="testWrite.jsp">[입력화면]</a>
      <a href="testList.jsp">[전체출력]</a>
      <a href="index.jsp">[index]</a>
    </body>
    </html>
    • String path = application.getRealPath("./storage")  -  파일이 저장 될 서버의 경로
    • MultipartRequest mr = new MultipartRequest(요청,경로,크기,인코딩,덮어쓰기옵션)
      • MultipartRequest 를 생성만 해주면 파일이 업로드 된다(파일 자체의 업로드 완료)
    • mr.getFilesystemName("fileimg")  -  전송 받은 데이터가 파일일 경우 파일 이름을 받아옴

     

     

     

     

     

     

    BBBdownload.jsp - 이미지를 클릭하면 이미지 다운로드 한다. (response 내장 객체를 활용한다.)

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ page import="com.oreilly.servlet.MultipartRequest" %>
    <%@ page import="com.oreilly.servlet.multipart.DefaultFileRenamePolicy" %>
    <%@ page import="java.io.File" %>
    <%@ page import="java.io.*" %>
    <%@ page import="java.net.URLEncoder" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>BBBdownload.jsp</title>
    <style type="text/css">
    	* { font-size:20pt;  }
        a { font-size:20pt; text-decoration:none ;font-weight:bold; }
        a:hover{ font-size:24pt; text-decoration:underline ; color:blue ;}
        body{margin-left:10px;}
    </style>
    </head>
    <body>
    	<h2>BBBdownload.jsp</h2>
        
    	<%
    		//miniBBS폴더/filedownload.jsp 문서 참고
    		String path = application.getRealPath("./storage");
    		System.out.println("공통저장경로"+path);
    		String Gdata = request.getParameter("fileName");
    		System.out.println("다운로드 대상 파일 이름"+Gdata);
    		
    		//팝업창 자바스크립트 window.open("파일명", "표식", "가로, 높이, left, top")
    		response.setHeader("Content-Disposition", "attachment;filename="+Gdata);
    		try{
    			File file = new File(path, Gdata);
    			InputStream is = new FileInputStream(file); // Byte 단위로 넘김
    			OutputStream os = response.getOutputStream();
    			
    			//C, java, C# 표준 데이터타입 int, char, boolean, byte, float
    			long size = file.length();
    			byte[] bt = new byte[(int)size];
    			is.read(bt, 0, bt.length);
    			os.write(bt);
    			
    			is.close(); os.close();
    		}catch(Exception ex){}
    	%>
        
    	<p>
    	<a href="BBB.jsp">[AAA화면]</a>
    	<a href="BBB.jsp">[BBB화면]</a>
    	<a href="testWrite.jsp">[게시판입력화면]</a>
      	<a href="testList.jsp">[게시판전체출력]</a>
      	<a href="index.jsp">[index]</a>
    </body>
    </html>

     

     

    이미지가 저장 된다~~~

     

     

     

     

     

     

     

     

    'Studying > Java' 카테고리의 다른 글

    [JAVA] JDK 실습 (6)  (0) 2022.08.28
    [JAVA] JDK 실습 (5)  (0) 2022.08.21
    [JAVA] JDK 배포 파일 만들기/실행하기  (0) 2022.08.21
    [JAVA] JDK 실습 (3)  (0) 2022.08.21
    [JAVA] JDK 실습 (2)  (0) 2022.08.16
Designed by Tistory.