개발자입니다
IT BANK) JSP 18일차 - JSP(회원관리 페이지(SQL)2) 본문
220930
어려운 이유는 적응하는 시간이 필요하기 때문이다. 자주 치다보면 적응되어 별거 없구나 하는 순간이 온다.
파일 전달하려면 <form> 태그에 enctype="multipart/form-data" 입력 필요하다.
// boardWrite.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>boardWrite</title>
</head>
<body>
<%@ include file="/session_quiz/header.jsp" %>
<form action="boardWriteService.jsp" method="post" enctype="multipart/form-data">
<table border=1 align="center">
<caption>
<font size=5><b>게시글 등록</b></font>
</caption>
<tr>
<th>제목</th>
<td><input type="text" name="title" style="width:98%"></td>
</tr>
<tr>
<th>내용</th>
<td><textarea rows="10" cols="50" name="content"></textarea></td>
</tr>
<tr>
<th>파일첨부</th>
<td><input type="file" name="upfile"></td>
</tr>
<tr align="center">
<td colspan=2>
<input type="submit" value="글쓰기">
<input type="button" value="목록" onclick="location.href='boardForm.jsp'">
</td>
</tr>
</table>
</form>
<%@ include file="/session_quiz/footer.jsp" %>
</body>
</html>
// boardWriteService.jsp
<%@page import="java.text.SimpleDateFormat"%>
<%@page import="java.util.Date"%>
<%@page import="session_quiz.BoardDAO"%>
<%@page import="session_quiz.BoardDTO"%>
<%@page import="java.io.File"%>
<%@page import="com.oreilly.servlet.MultipartRequest"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/*
<form enctype="multipart/form-data">
파일 전송 시 multipart/form-data 방식으로 데이터 전달하기에 내장객체 request로 데이터를 인식하지 못함.
String title = request.getParameter("title");
out.print("제목 : " + title + "<br>");
*/
String id = (String)session.getAttribute("id");
if(id == null){
response.sendRedirect("login.jsp");
return;
}
// String saveDir = "C:\\jsps\\upload\\" + "로그인한 계정명, 작성자";
String saveDir = "C:\\jsps\\upload\\" + id;
File file = new File(saveDir);
// file.exists() : 파일 또는 폴더의 존재 유무를 확인 후 true or false
if(file.exists() == false){
file.mkdir(); // 폴더 또는 디렉토리 생성
}
// 1024byte == 1kb
// 1024kb == 1Mb
// 1024Mb == 1Gb
int maxPostSize = 1024 * 1024 * 10; // 10Mb. 1은 1byte. 서버 성능 유지를 위해 제한하는게 좋음
// MultipartRequest mRequest = new MultipartRequest(request, "파일저장경로", "파일의 최대크기", "UTF-8");
// MultipartRequest에 경로 적어놓으면 그곳에 파일 저장한다.
MultipartRequest mRequest = new MultipartRequest(request, saveDir, maxPostSize, "UTF-8");
/*멀티파트 폼(<form enctype=”multipart/form-data”>)으로 넘긴 파라미터는 단순 request.getParameter
메서드로 받으면 null 이 나오고, multipartRequest.getParameter 메서드로 받아야 한다.*/
String title = mRequest.getParameter("title");
String content = mRequest.getParameter("content");
String fileName = mRequest.getOriginalFileName("upfile");
/*
String upfile = mRequest.getParameter("upfile");
out.print("파일이름: " + upfile + "<br>");
*/
BoardDTO board = new BoardDTO();
board.setTitle(title);
board.setContent(content);
board.setFileName(fileName);
board.setHit(0);
board.setId(id);
Date date = new Date(); // java.util 로 추가. sql 아님
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
board.setWriteTime(sdf.format(date));
BoardDAO boardDao = new BoardDAO();
boardDao.write(board);
boardDao.disconnection();
%>
<script>alert('게시글 등록 완료'); location.href='boardForm.jsp';</script>
multipart로 다운 받기위해 cos.jar 라이브러리 필요하다.
아래 폴더에 집어넣는다.
// BoardDAO.java 수정
public void write(BoardDTO board) {
// INSERT INTO session_quiz_board VALUES(session_board_seq.nextval, 'admin', '게시글 제목1', '게시글 내용1', 'test1.txt', '2022-09-01', 0);
String sql = "INSERT INTO session_quiz_board VALUES(session_board_seq.nextval, ?, ?, ?, ?, ?, ?)";
PreparedStatement ps = null;
try {
ps = con.prepareStatement(sql);
ps.setString(1, board.getId());
ps.setString(2, board.getTitle());
ps.setString(3, board.getContent());
ps.setString(4, board.getFileName());
ps.setString(5, board.getWriteTime());
ps.setInt(6, board.getHit());
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
-quiz
// content.jsp
<%@page import="session_quiz.BoardDTO"%>
<%@page import="session_quiz.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>content</title>
</head>
<body>
<%@ include file="header.jsp" %>
<%
String n = request.getParameter("num");
int num = 0;
try{
num = Integer.parseInt(n);
}catch(Exception e){
response.sendRedirect("boardForm.jsp");
return;
}
BoardDAO boardDao = new BoardDAO();
BoardDTO board = boardDao.selectNum(num);
if(board == null){
response.sendRedirect("boardForm.jsp");
return;
}
int hit = board.getHit();
hit++;
boardDao.incrementHit(num, hit);
boardDao.disconnection();
%>
<table border="1" align="center">
<caption>
<font size=5><b>글 내용</b></font>
</caption>
<tr>
<th width="100">작성자</th>
<td width="200"><%=board.getId() %></td>
<th width="100">조회수</th>
<td width="200"> <%=hit%> </td>
</tr>
<tr>
<th>작성일</th> <td><%=board.getWriteTime() %></td>
<th>다운로드</th> <td><%=board.getFileName()%></td>
</tr>
<tr>
<th>제목</th> <td colspan=3><%=board.getTitle() %></td>
</tr>
<tr>
<th>문서내용</th> <td colspan=3><%=board.getContent()%></td>
</tr>
<tr>
<td colspan=4>
<button type="button" onclick="location.href='boardForm.jsp'">목록</button>
<button type="button" onclick="location.href='boardModify.jsp'">수정</button>
<button type="button" onclick="location.href='boardDelete.jsp'">삭제</button>
</td>
</tr>
</table>
<%@ include file="footer.jsp" %>
</body>
</html>
// boardForm.jsp 수정
<tr>
<td><%=board.getNum() %></td>
<td onclick="location.href='content.jsp?num=<%=board.getNum()%>'"> <%=board.getTitle() %></td> // 수정
<td><%=board.getId() %></td>
<td><%=board.getWriteTime() %></td>
<td><%=board.getHit() %></td>
</tr>
// BoardDAO.java 코드 추가
// INSERT INTO session_quiz_board VALUES(session_board_seq.nextval, 'admin', '게시글 제목1', '게시글 내용1', 'test1.txt', '2022-09-01', 0);
public BoardDTO selectNum(int num) {
String sql = "SELECT * FROM session_quiz_board WHERE num=?";
PreparedStatement ps = null;
ResultSet rs = null;
try {
ps = con.prepareStatement(sql);
ps.setInt(1, num);
rs = ps.executeQuery();
if(rs.next()) {
BoardDTO board = new BoardDTO();
board.setNum(num);
board.setId(rs.getString("id"));
board.setTitle(rs.getString("title"));
board.setContent(rs.getString("content"));
board.setFileName(rs.getString("filename"));
board.setWriteTime(rs.getString("writetime"));
board.setHit(rs.getInt("hit"));
return board;
}
} catch (Exception e) {
// TODO: handle exception
}
return null;
}
public void incrementHit(int num, int hit) {
String sql = "UPDATE session_quiz_board SET hit=? WHERE num=?";
PreparedStatement ps = null;
try {
ps = con.prepareStatement(sql);
ps.setInt(1, hit);
ps.setInt(2, num);
ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
}
'JSP > IT BANK - JSP' 카테고리의 다른 글
IT BANK) JSP 20일차 - JSP(회원관리 페이지(SQL)2), EL, JSTL (0) | 2022.10.05 |
---|---|
IT BANK) JSP 19일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.10.04 |
IT BANK) JSP 17일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.29 |
IT BANK) JSP 16일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.28 |
IT BANK) JSP 15일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.27 |