본문 바로가기

JAVA

[55일차] 자바로 mysql연동, 이미지 추가해서 자료실 만들기

교재p.545 파일업로드 

files 폴더만들고, cos.jar 파일 붙여넣기

 

마이오라클 테이블 만들어주기
jsp 파일들 만들어주기 (인클루드 제외)
인덱스 실행화면
자료저장하기 누른 화면

 

이미지 선택해서 저장하기 눌러보면

 

form_ok.jsp 파일에 out.print(realFolder);찍어서 경로 확인하면 이미지는 이 경로로 들어감

*파일 경로 3가지*


 

실행화면

 

이름과 파일명이 잘 뜨는것을 확인

 

사이즈도 확인하기 

 

 

 

같은 사진 저장하면 중복 방지로 이름이 자동으로 바뀌어서 저장됨 , 원본이름 마이키3 -> 중복방지변경이름 마이키33
이 위치에 저장되서 들어가는중

 


데이터베이스에 저장하도록 만들기 

(이름, 파일명, 파일종류, 파일사이즈)

 

sql 에서도 연동되어 들어간것을 확인 할 수 있다

 


목록보기 list.jsp 만들기 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="java.sql.*" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<%

String path= request.getContextPath();


	//데이터 베이스 저장하기 
	String url= "jdbc:mysql://localhost:3306/korea";
	String user="root";
	String password="autoset";
	Class.forName("com.mysql.jdbc.Driver");
	Connection con = DriverManager.getConnection(url,user,password);
	
	String SQL="select idx, name, file from T0808";
	PreparedStatement pstmt = con.prepareStatement(SQL);
	ResultSet rs= pstmt.executeQuery();
%>
<div align=center>
<h2> 목록보기 (<a href=form.jsp>저장하기</a>)</h2>
<table border=1 width=300>
<tr><td>번호</td><td>이름</td><td>파일명</td><td>이미지</td></tr>
<%	
	while(rs.next()){
		%>
		
		<tr>
		<td><%=rs.getString("idx") %></td>
		<td><%=rs.getString("name") %></td>
		<td><%=rs.getString("file") %></td>
		<td><img src= '<%=path%>/files/<%=rs.getString("file") %>' width=50 height=50></td>
		</tr>
		<%
	}
	
%>
</table>
</div>
<%
rs.close();
pstmt.close();
con.close();
%>
</body>
</html>

 

 

 

내용보기 edit.jsp 만들기

 

이름에 링크 걸고

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ page import="java.sql.*" %>
    
<%
String path= request.getContextPath();
String idx= request.getParameter("idx");


	//데이터 베이스 저장하기 
	String url= "jdbc:mysql://localhost:3306/korea";
	String user="root";
	String password="autoset";
	Class.forName("com.mysql.jdbc.Driver");
	Connection con = DriverManager.getConnection(url,user,password);
	
	String SQL="select idx, name, file from T0808 where idx=?";
	PreparedStatement pstmt = con.prepareStatement(SQL);
	pstmt.setString(1, idx);
	ResultSet rs= pstmt.executeQuery();
	rs.next();
	String name=rs.getString("name");
	String file=rs.getString("file");
	
%>    

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<div align=center>
<br> <h2> 자료 수정하기</h2>
<img src=<%=path %>/files/<%=file %> width=200 height=200>
<table border=1>
<form method=post enctype="multipart/form-data" action=update.jsp>
<tr>
	<td>이름</td><td> <input type=text name=name value="<%=name%>"></td>
</tr>
<tr>
	<td>이미지</td><td> <input type=file name=file></td>
</tr>
<tr>
	<td colspan=2 align=center><input type=submit value=수정하기>
	<input type=button onClick="list()" value=목록보기>
	</td>
</tr>
</form>
</table>
</div>
</body>
</html>

목록보기에 이름링크를 누르면 수정하기 페이지가 뜬다

 

 

form_ok 에 정보 입력하고 저장하기 누르면 바로 목록보기 화면으로 넘어가게 하기


edit.jsp 파일 hidden으로 idx 넘기기 

 

<%@ page language="java" 
         contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%> 


<%
String path=request.getContextPath();
String idx = request.getParameter("idx");


// 데이터베이스 저장하기 
String url="jdbc:mysql://localhost:3306/korea";
String user="root";
String password="autoset"; 

Class.forName("com.mysql.jdbc.Driver");
Connection  con = DriverManager.getConnection(url, user, password );

String SQL ="select idx,  name, file from T0808 where idx=? ";
PreparedStatement pstmt=con.prepareStatement(SQL);
pstmt.setString(1, idx);
ResultSet rs= pstmt.executeQuery();
rs.next();
idx =rs.getString("idx");
String name =rs.getString("name");
String file =rs.getString("file");
%>         
         
         
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

<div  align="center">
<br> <h2> 자료 수정하기  </h2>
<img src="<%=path%>/files/<%=file %>" width=200  height=200>
<form method=post  enctype="multipart/form-data"
      action=update.jsp >
      
      
<table  border=1>
<tr><td>이름</td>
    <td> 
    <input  type=hidden  name=idx  value="<%=idx%>">
    <input  type=text  name=name value="<%=name%>"></td>
</tr>
    
<tr><td>이미지</td> 
    <td><input  type=file  name=file></td>
</tr>
<tr>
    <td colspan=2 align="center" >
    <input  type=submit value="수정하기" >
    <input  type=button onClick="list()" value="목록보기" >
    </td>
</tr>
</table>
</form>
</div>
</body>
</html>

 

 

update.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.util.*"%>    
<%@ page import="java.io.*"%> 
<%@ page import="java.sql.*"%> 

<% 

// 데이터베이스 저장하기 
  String url="jdbc:mysql://localhost:3306/korea";
  String user="root";
  String password="autoset"; 

  Class.forName("com.mysql.jdbc.Driver");
  Connection  con = DriverManager.getConnection(url, user, password );
    
  // 이클립스 와 배포시 저장되는 위치 잡기 
  String files = "/files/";
  ServletContext context = getServletContext();
  String realFolder=context.getRealPath(files);
  
  int maxSize = 5 * 1024 * 1024 ;  // 5MB 
  String encType = "UTF-8";
  
  MultipartRequest multi =null;
   multi = new MultipartRequest(request, realFolder, maxSize,
		                encType, new DefaultFileRenamePolicy());
  
   String idx = multi.getParameter("idx");
   
   String SQL ="select idx, name, file from T0808 where idx=? ";
   PreparedStatement pstmt=con.prepareStatement(SQL);
   pstmt.setString(1, idx);
   ResultSet rs= pstmt.executeQuery();
   rs.next();

   String  rs_file =rs.getString("file");
   String  DeletefileName = realFolder + rs_file ; // 경로 + 파일명
   
   File f= new File(DeletefileName); // 파일 객체 생성  
   
   if (f.exists()){ // 파일이 존재하면 ...
	   f.delete();  //  파일 삭제
   }
   
   String name = multi.getParameter("name");
   String file=multi.getFilesystemName("file");


   String UPDATE_SQL ="update T0808 set name=?, file=? where idx=?";
   pstmt=con.prepareStatement(UPDATE_SQL);
   pstmt.setString(1, name);
   pstmt.setString(2, file);
   pstmt.setString(3, idx);
   int k = pstmt.executeUpdate();
   if (k==1){
	   response.sendRedirect("list.jsp");
	   System.out.println("저장성공");
   }else{
	   out.print("저장실패");  
   }
%>

 

 

 

 

수정된것 확인

 

이미지 저장폴더 보면 원래 기존파일 (마이키4) 사라지고 마이키64로 저장된 것 확인

 


목록보기, 삭제하기 만들기 

<%@ page language="java" 
         contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%> 


<%
String path=request.getContextPath();
String idx = request.getParameter("idx");


// 데이터베이스 저장하기 
String url="jdbc:mysql://localhost:3306/korea";
String user="root";
String password="autoset"; 

Class.forName("com.mysql.jdbc.Driver");
Connection  con = DriverManager.getConnection(url, user, password );

String SQL ="select idx,  name, file from T0808 where idx=? ";
PreparedStatement pstmt=con.prepareStatement(SQL);
pstmt.setString(1, idx);
ResultSet rs= pstmt.executeQuery();
rs.next();
idx =rs.getString("idx");
String name =rs.getString("name");
String file =rs.getString("file");
%>         
         
         
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<script>
function listOK(){
	alert("목록보기");
	location.href="list.jsp";
}
function delOK(){
	alert("삭제하기");
	location.href="delete.jsp?idx"+k;
}
</script>
<body>

<div  align="center">
<br> <h2> 자료 수정하기  </h2>
<img src="<%=path%>/files/<%=file %>" width=200  height=200>
<form method=post  enctype="multipart/form-data"
      action=update.jsp >
      
      
<table  border=1>
<tr><td>이름</td>
    <td> 
    <input  type=hidden  name=idx  value="<%=idx%>">
    <input  type=text  name=name value="<%=name%>"></td>
</tr>
    
<tr><td>이미지</td> 
    <td><input  type=file  name=file></td>
</tr>
<tr>
    <td colspan=2 align="center" >
    <input  type=submit value="수정하기" >
    <input  type=button onClick="listOK()" value="목록보기" >
    <input  type=button onClick="delOK()" value="삭제하기" >
    </td>
</tr>
</table>
</form>
</div>
</body>
</html>

삭제하기 버튼 추가
바디 위에 스크립트 만들기

 

목록보기 누르면

 

이동한다

 


이어서 삭제하기 만들기 

edit.jsp 파일 수정

<%@ page language="java" 
         contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%> 


<%
String path=request.getContextPath();
String idx = request.getParameter("idx");


// 데이터베이스 저장하기 
String url="jdbc:mysql://localhost:3306/korea";
String user="root";
String password="autoset"; 

Class.forName("com.mysql.jdbc.Driver");
Connection  con = DriverManager.getConnection(url, user, password );

String SQL ="select idx,  name, file from T0808 where idx=? ";
PreparedStatement pstmt=con.prepareStatement(SQL);
pstmt.setString(1, idx);
ResultSet rs= pstmt.executeQuery();
rs.next();
idx =rs.getString("idx");
String name =rs.getString("name");
String file =rs.getString("file");
%>         
         
         
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>

<script>
function listOK(){
	alert("목록보기");
	location.href="list.jsp";
}
function delOK(){
	alert("삭제하기"+k);
	location.href="delete.jsp?idx"+k;
}
</script>
<body>

<div  align="center">
<br> <h2> 자료 수정하기  </h2>
<img src="<%=path%>/files/<%=file %>" width=200  height=200>
<form method=post  enctype="multipart/form-data"
      action=update.jsp >
      
      
<table  border=1>
<tr><td>이름</td>
    <td> 
    <input  type=hidden  name=idx  value="<%=idx%>">
    <input  type=text  name=name value="<%=name%>"></td>
</tr>
    
<tr><td>이미지</td> 
    <td><input  type=file  name=file></td>
</tr>
<tr>
    <td colspan=2 align="center" >
    <input  type=submit value="수정하기" >
    <input  type=button onClick="listOK()" value="목록보기" >
    <input  type=button onClick="delOK(<%=idx %>)" value="삭제하기" >
    </td>
</tr>
</table>
</form>
</div>
</body>
</html>

 

.....