JAVA
1. WEB Project 생성 jsp 생성 후 동작확인
2. DB 연동 확인
EX)오라클 DB 연동 코드 예시
<%@ 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 url = "jdbc:oracle:thin:@//localhost:1521/xe";
String userid = "system";
String userpwd = "1234";
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection(url, userid, userpwd);
%>
<h2><%=con%></h2>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="top.jsp" %>
<script>
function formOk(){
alert("확인");
f1.submit();
}
</script>
<section>
<br>
<div align=center>
<h2>회원가입 프로그램</h2>
<form name=f1 action="formOk.jsp" method="post"
enctype="multipart/form-data" onSubmit="return formOk()">
<table border=1 width="450" height=300>
<tr><td align=center>학번</td><td><input type=text name=m_sno></td></tr>
<tr><td align=center>이름</td><td><input type=text name=m_sname></td></tr>
<tr><td align=center>파일</td><td><input type=file name=m_file></td></tr>
<tr><td align=center>특이사항</td><td>
<textarea cols=40 rows =5 name=m_etc></textarea></td></tr>
<tr><td colspan=2 align=center>
<input type=submit value="회원가입"> 
<input type=reset value="다시작성"></td></tr>
</table>
</form>
</div>
<br>
</section>
<%@ include file="footer.jsp" %>
회원가입 게시판을 만들었다.
form의 형태에서 메소드 유형과 인코딩타입을 기재해 주어야 파일을 전달하는데 오류가 나지 않는다.
enctype="multipart/form-data" 을 사용하면 리퀘스트값을 가져올 수 없다.
input 리셋타입을 처음 사용해보았다. 테이블에 작성한 내용을 초기화 시켜준다.
onSubmit으로 리턴을 정해준뒤 스크립트에서 알림을 발생시키고 submit 동작하도록 설정해주었다.
<%@ 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.*" %>
<%@ include file ="DB.jsp" %>
<%
// 파일 업로드 폴더 지정
String realFolder="";
String saveFolder="/files/";
String encType="UTF-8"; // 인코딩 타입
int maxSize = 5*1024*1024; //5MB
// 실제 파일을 가져오는 경로
realFolder = getServletContext().getRealPath(saveFolder);
out.println("realFolder:" + realFolder + "<br>");
MultipartRequest multi =null;
// MultipartRequest 생성되는 시점에 파일이 저장이 된다
multi = new MultipartRequest(request, realFolder, maxSize, encType, new DefaultFileRenamePolicy());
out.println("realFolder:" + multi + "<br>");
String m_sno = multi.getParameter("m_sno");
String m_sname = multi.getParameter("m_sname");
String m_etc = multi.getParameter("m_etc");
String m_files = multi.getFilesystemName("m_files");
File file = multi.getFile("m_files"); // 실제 파일 저장
out.println("realFolder:" + m_files + "<br>");
if (m_files == null){
m_files = "space.png";
}
String Insert_sql="";
Insert_sql = "insert into member2 (m_idx, m_sno, m_sname, m_files, m_etc, m_cnt)";
Insert_sql = Insert_sql +"values(idx_member.nextval, ?, ?, ?, ?, 1)";
PreparedStatement pstmt = con.prepareStatement(Insert_sql);
pstmt.setString(1, m_sno);
pstmt.setString(2, m_sname);
pstmt.setString(3, m_files);
pstmt.setString(4, m_etc);
pstmt.executeUpdate();
response.sendRedirect("list.jsp");
%>
파일의 이름이 null 일때 기본이미지로 저장하고, 파일의 입력값 대로 DB에도 저장될 수 있게 쿼리문을 작성한다.
실제 폴더에 파일이 저장되도록 MultipartRequest를 사용하여 저장을 한다. 실제 경로와 같은지 확인이 필요하며 파일의 이동이 가능하도록 파일명 또한 주의해서 불러오도록 해야한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- db 호출시 사용 -->
<%@ page import="java.sql.*" %>
<%@ include file ="DB.jsp" %>
<%@ include file="top.jsp" %>
<%
String ch1= request.getParameter("ch1");
String ch2= request.getParameter("ch2");
PreparedStatement pstmt=null;
ResultSet rs = null;
if (ch1==null || ch2==null || ch2.equals("")){
String sql = "select * from member2 order by m_sno asc";
pstmt = con.prepareStatement(sql);
}else if(ch1.equals("m_sno")){
String sql = "select * from member2 where m_sno = ? order by m_sno asc";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, ch2);
}else if(ch1.equals("m_sname")) {
String sql = "select * from member2 where m_sname like ? order by m_sno asc";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, "%" + ch2+ "%");
}
rs = pstmt.executeQuery();
%>
<section>
<br>
<div align=center>
<h2>회원 목록 보기</h2>
<table border=1 width=700px;>
<tr>
<td>순번</td>
<td>학번</td>
<td>이름</td>
<td>파일명</td>
<td>특이사항</td>
<td>사진</td>
<td>조회수</td>
</tr>
<% while (rs.next()){
String m_idx = rs.getString("m_idx");
String m_sno = rs.getString("m_sno");
String m_sname = rs.getString("m_sname");
String m_files = rs.getString("m_files");
String m_etc = rs.getString("m_etc");
String m_cnt = rs.getString("m_cnt");
%>
<tr>
<td><a href=edit.jsp?m_idx=<%=m_idx%>><%=m_idx%></a></td>
<td><%=m_sno%></td>
<td><%=m_sname%></td>
<td><%=m_files%></td>
<td><%=m_etc%></td>
<td align=center><a href=delete.jsp?m_idx=<%=m_idx%>>
<img src='./files/<%=m_files%>' width=60px></a></td>
<td><%=m_cnt%></td>
</tr>
<%} %>
</table>
</div>
<br>
<div align=center>
<form >
<select name=ch1>
<option value="m_sno">학번</option>
<option value="m_sname">이름</option>
</select>
<input type=text name=ch2>
<input type=submit value="검색하기">
</form>
</div>
</section>
<%@ include file="footer.jsp" %>
회원 목록의 리스트를 보여주는 코드이다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.io.*" %>
<%@ page import="java.sql.*" %>
<%@ include file ="DB.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
/*
1. 넘어온 레코드에서 삭제할 파일 찾기(select)
2. 파일 삭제 (FSO)
3. 레코드 삭제(delete)
*/
String m_idx = request.getParameter("m_idx");
// 쿼리
PreparedStatement pstmt=null;
ResultSet rs = null;
// 파일 찾기
String search_sql = "select * from member2 where m_idx=?";
pstmt = con.prepareStatement(search_sql);
pstmt.setString(1, m_idx);
rs = pstmt.executeQuery();
rs.next();
// 파일삭제
String m_files = rs.getString("m_files");
String saveFolder="/files/";
String realFolder = getServletContext().getRealPath(saveFolder);
String deleteFileName = realFolder+ m_files ;
File f = new File(deleteFileName);
// 파일 존재 시 삭제 동작
if(f.exists() && !m_files.equals("space.png")){
f.delete();
}
// 레코드 삭제
String delete_sql = "delete from member2 where m_idx=?";
pstmt = con.prepareStatement(delete_sql);
pstmt.setString(1, m_idx);
pstmt.executeUpdate();
response.sendRedirect("list.jsp");
%>
</body>
</html>
select문으로 실제 파일을 찾아온 뒤에 폴더에 저장된 실제 파일을 삭제하고 쿼리문으로 DB에 존재하는 파일도 함께 삭제하는 코드이다.
조건으로는 기본 이미지가 아니고 파일이 존재할때 파일을 삭제하도록 한다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- db 호출시 사용 -->
<%@ page import="java.sql.*" %>
<%@ include file ="DB.jsp" %>
<%@ include file="top.jsp" %>
<%
String m_idx = request.getParameter("m_idx");
PreparedStatement pstmt=null;
ResultSet rs = null;
String update_sql = "update member2 set m_cnt=m_cnt+1 where m_idx = ?";
pstmt = con.prepareStatement(update_sql);
pstmt.setString(1, m_idx);
pstmt.executeUpdate();
String select_sql = "select * from member2 where m_idx = ?";
pstmt = con.prepareStatement(select_sql);
pstmt.setString(1, m_idx);
rs = pstmt.executeQuery();
while (rs.next()){
String m_sno = rs.getString("m_sno");
String m_sname = rs.getString("m_sname");
String m_files = rs.getString("m_files");
String m_etc = rs.getString("m_etc");
%>
<script>
function delK(k){
alert("확인K" + k);
// location.href="delete.jsp?m_idx="+k
// 안쪽은 ES6표기법이고, 바깥쪽은 EL 표기법
location.href='delete.jsp?m_idx=' + k;
}
function formOK(){
alert("확인K" + k);
f1.submit();
}
</script>
<section>
<br>
<div align="center">
<h2>회원 목록 상세 보기</h2>
<form name="f1" action=update.jsp method="post" enctype="multipart/form-data" onSubmit="return formOk()">
<input type="hidden" name="m_idx" value="<%=m_idx%>">
<table border="1" width="500" height="400">
<tr>
<td>학번</td>
<td><input type="text" name="m_sno" value="<%=m_sno%>"></td>
<td rowspan="3" align="center"><img src='./files/<%=m_files %>' width="150px"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="m_sname" value="<%=m_sname%>"></td>
</tr>
<tr>
<td>파일명</td>
<td><input type="file" name="m_files" value="<%=m_files%>"></td>
</tr>
<tr>
<td>특이<br>사항</td>
<td colspan="2"><textarea name="m_etc"><%=m_etc%></textarea></td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="submit" name="k" value="수정하기">
<input type="button" value="삭제하기" onClick="delK(<%=m_idx%>)">
</td>
</tr>
<%} %>
</table>
</form>
</div>
</section>
<%@ include file="footer.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.*" %>
<%@ include file ="DB.jsp" %>
<%
/*
1. 레코드에서 수정한 파일( 삭제할 파일 찾기)
2. space.png가 아니면 삭제하기
3. 파일 추가하기
4. 레코드 수정하기 (파일선택이 있는경우와 없는경우)
*/
// 파일 업로드 폴더 지정
String realFolder="";
String saveFolder="/files/";
String encType="UTF-8"; // 인코딩 타입
int maxSize = 5*1024*1024; //5MB
// 실제 파일을 가져오는 경로
realFolder = getServletContext().getRealPath(saveFolder);
MultipartRequest multi =null;
// MultipartRequest 생성되는 시점에 파일이 저장이 된다
multi = new MultipartRequest(request, realFolder, maxSize, encType, new DefaultFileRenamePolicy());
String m_idx = multi.getParameter("m_idx");
String m_sno = multi.getParameter("m_sno");
String m_sname = multi.getParameter("m_sname");
String m_etc = multi.getParameter("m_etc");
String m_files = multi.getFilesystemName("m_files");
// 기존 레코드에 있는 파일 이름 찾기
PreparedStatement pstmt=null;
PreparedStatement pstmt2=null;
ResultSet rs = null;
String search_sql = "select * from member2 where m_idx=?";
pstmt = con.prepareStatement(search_sql);
pstmt.setString(1, m_idx);
rs = pstmt.executeQuery();
rs.next();
String deleteFileName = rs.getString("m_files");
out.println(deleteFileName);
File f = new File(deleteFileName);
// 수정에서 파일 첨부에 값을 첨부하면 기존 파일 삭제
if(m_files !=null){
if (!deleteFileName.equals("space.png")){
f.delete();
}
}
if(m_files != null){
String update_sql = "update member2 set m_sno = ?, m_sname = ?, m_etc = ?, m_files= ? where m_idx=?";
pstmt2 = con.prepareStatement(update_sql);
pstmt2.setString(1, m_sno);
pstmt2.setString(2, m_sname);
pstmt2.setString(3, m_etc);
pstmt2.setString(4, m_files);
pstmt2.setString(5, m_idx);
pstmt2.executeUpdate();
}else{
String update_sql = "update member2 set m_sno = ?, m_sname = ?, m_etc = ? where m_idx=?";
pstmt2 = con.prepareStatement(update_sql);
pstmt2.setString(1, m_sno);
pstmt2.setString(2, m_sname);
pstmt2.setString(3, m_etc);
pstmt2.setString(4, m_idx);
pstmt2.executeUpdate();
}
pstmt2.close();
rs.close();
pstmt.close();
con.close();
response.sendRedirect("list.jsp");
%>
파일을 찾고 그 파일명이 널이 아닐경우 파일을 추가하여 수정할수 있고, 파일명이 널일경우엔 사진 이외의 값을 추가할 수 있는 쿼리문을 작성했다.
어제 만든 게시판 회원가입을 복습해서 진행했다.
쿼리문과 데이터 값을 받아오는 구문에 대한 이해가 아직도 많이 부족하다.
많은 코드작성과 복습으로 보완해야할 부분이다.
추가적으로 오늘 데이터의 크기를 비교해서