Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

개발자입니다

IT BANK) JSP 18일차 - JSP(회원관리 페이지(SQL)2) 본문

JSP/IT BANK - JSP

IT BANK) JSP 18일차 - JSP(회원관리 페이지(SQL)2)

끈기JK 2022. 9. 30. 17:01

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();
		}
	}