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 19일차 - JSP(회원관리 페이지(SQL)2) 본문

JSP/IT BANK - JSP

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

끈기JK 2022. 10. 4. 18:01

221004

 

 

MTU size : Maximum Transfer Unit

 

-로그인한 사용자 게시글만 수정, 삭제 버튼 나타나게 코딩

// content.jsp 수정
    <%if(board.getId().equals(session.getAttribute("id"))) {%>
        <button type="button"  onclick="location.href='boardModify.jsp'">수정</button>
        <button type="button"  onclick="location.href='boardDelete.jsp'">삭제</button>
    <%} %>

 

-파일 다운

// content.jsp 수정
<th>다운로드</th> 
    <td onclick="location.href='fileDown.jsp?fileName=<%=board.getFileName()%>&writeId=<%=board.getId()%>'">
        <%=board.getFileName()%>
    </td>
// filedown.jsp
<%@page import="java.io.OutputStream"%>
<%@page import="java.io.File"%>
<%@page import="java.io.FileInputStream"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	String fileName = request.getParameter("fileName");
	String writeId = request.getParameter("writeId");
	
	// 정상 http://localhost:8085/jspExam/session_quiz/fileDown.jsp?fileName=test2.txt&writeId=admin
			
	// 비정상 http://localhost:8085/jspExam/session_quiz/fileDown.jsp?
	if(fileName == null || writeId == null){
		response.sendRedirect("boardForm.jsp");
		return;
	}
	
	// 비정상 http://localhost:8085/jspExam/session_quiz/fileDown.jsp?fileName=&writeId=
	if(fileName == "" || writeId == ""){
		response.sendRedirect("boardForm.jsp");
		return;
	}

	// 파일 데이터를 읽기 위한 작업
	String saveDir = "C:\\jsps\\upload\\" + writeId + "\\" + fileName;
	File file = new File(saveDir);
	
	FileInputStream iStream = new FileInputStream(file);
	
	// 프로그램의 데이터를 클라이언트에게 전달. 파일 다운시 쓸수밖에 없는 코드
	/*
		out 내장객체가 사용 중이기에 getOutputStream() 이미 호출됨 이라는 에러가 발생.
		out.clear() : 사용 중인 Buffer 초기화
		out = pageContext.pushBody(); out 내장객체는 전역적으로 사용가능한 OutputStream이 아니라 현재 페이지의 Body만 출력할 OuputStream 객체를 넣어줌.
	*/
	out.clear();
	out = pageContext.pushBody();
	OutputStream oStream = response.getOutputStream();
	
	/*
		파일데이터인지 화면에 출력할 문자열 데이터인지 구분을 하기 위해 HTTP 안에 Header의 속성과 값을 설정함.
		파일 다운시 쓸수밖에 없는 코드
	*/
	response.setContentType("application/octet-stream");
	response.setHeader("Content-Disposition", "attachment;filename="+fileName);
	
	/* read(b, off, len)
	b : 파일에서 읽은 데이터를 저장할 변수
	off : offset(상대거리), 첫번째 매개변수(배열)에 저장할 위치
	len : 파일에서 한 번 읽을 최대 크기
	반환데이터 : 실제 읽은 파일 데이터 사이즈
	*/
	byte[] b = new byte[1000];
	while(true){
		// 서버에서 파일 데이터를 읽어서 변수(배열)에 저장하기
	 	int currentSize = iStream.read(b, 0, b.length);
	 	if(currentSize == -1)
	 		break;
	 	
	 	// 변수(배열)에 데이터를 클라이언트에게 전달하기. 그러나 해당 파일을 실행시켜버림
	 	oStream.write(b, 0, currentSize);
	}
%>

 

 

-수정 및 삭제 코딩

// content.jsp 수정
    <button type="button" onclick="location.href='boardModify.jsp?num=<%=num %>'">수정</button>
    <button type="button" onclick="location.href='boardDelete.jsp?num=<%=num %>'">삭제</button>

*<input type=“hidden”>은 사용자에게는 보이지 않는 숨겨진 입력 필드를 정의합니다.

숨겨진 입력 필드는 렌더링이 끝난 웹 페이지에서는 전혀 보이지 않으며, 페이지 콘텐츠 내에서 그것을 볼 수 있게 만드는 방법도 없습니다.

따라서 숨겨진 입력 필드는 폼 제출 시 사용자가 변경해서는 안 되는 데이터를 함께 보낼 때 유용하게 사용됩니다.

*javascript:history.back() : 뒤로가기

앞으로가기, 앞뒤 원하는 만큼 가기, 리로드하기 등이 있다.

// boardModify.jsp
<%@page import="session_quiz.BoardDTO"%>
<%@page import="session_quiz.BoardDAO"%>
<%@ page language="java"  pageEncoding="utf-8"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>boardModify</title>
</head>
<body>
<%@ include file="header.jsp"%>
<div align="center" >

<%
	String n = request.getParameter("num");
	if(n == null || n == ""){
		response.sendRedirect("boardForm.jsp");
		return;
	}
		
	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;
	}
%>
<form action="boardModifyService.jsp" method="post">
	
	<input type="hidden" name="num" value="<%=num%>">
	
	<table border='1'>
		<tr>
			<th width="200">작성자</th>
			<td width="200"><%=board.getId() %></td>
			<th width="100">조회수</th>
			<td width="200"><%=board.getHit() %></td>
		</tr>
		<tr>
			<th>작성일</th>
			<td><%=board.getWriteTime() %></td>
			<th>다운로드</th>
			<td><%=board.getFileName() %></td>
		</tr>
		<tr>
			<th>제목 수정</th>
			<td colspan="3">
				<input style="width:100%;" type="text" name="title" value="<%=board.getTitle()%>">
			</td>
		</tr>
		<tr>
			<th>문서내용 수정</th>
			<td colspan="3">
				<textarea rows="10" cols="30" style="width:100%" name="content"><%=board.getContent() %></textarea>
			</td>
		</tr>
		<tr>
			<td colspan="4" >
				<button type="button" onclick = "location.href='javascript:history.back();'">이전</button>
				<input type="submit" value="수정">
			</td>
		</tr>
	</table>
</form>
</div>
<%@ include file="footer.jsp"%>
</body>
</html>

 

<form>태그 내 <input tye="hidden" name="num" value=""> 로 하면 url에 담아서 전달하듯이 값 전달할 수 있다.

// boardModityService.jsp
<%@page import="session_quiz.BoardDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
    // boardModifyService.jsp
    	
    String n = request.getParameter("num");
	if(n == null || n == ""){
		response.sendRedirect("boardForm.jsp");
		return;
	}
		
	int num = 0;
	try{
		num = Integer.parseInt(n);
	} catch(Exception e){
		response.sendRedirect("boardForm.jsp");
		return;
	}
	
	String title = request.getParameter("title");
	String content = request.getParameter("content");
	
	if(title.isEmpty() || content.isEmpty()){
		out.print("<script>alert('제목과 내용을 입력하셔야합니다.'); location.href='boardModify.jsp?num="+num+"'</script>");
		return;
	}
	
	BoardDAO boardDao = new BoardDAO();
	boardDao.modify(num, title, content);
	boardDao.disconnection();
%>
<script>alert('게시글 수정이 완료되었습니다.'); location.href='boardForm.jsp'</script>
// BoardDAO.java 추가
    public void modify(int num, String title, String content) {
        String sql = "UPDATE session_quiz_board SET title=?, content=? WHERE num=?";
        PreparedStatement ps = null;

        try {
            ps = con.prepareStatement(sql);
            ps.setString(1, title);
            ps.setString(2, content);
            ps.setInt(3, num);
            ps.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

// boardDelete.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
String id = (String)session.getAttribute("id");
if(id == null){
	out.print("<script>alert('로그인 후 이용하세요.'); location.href='login.jsp';</script>");
	return;
}

String n = request.getParameter("num");
if(n == null || n == ""){
	response.sendRedirect("boardForm.jsp");
	return;
}
	
int num = 0;
try{
	num = Integer.parseInt(n);
} catch(Exception e){
	response.sendRedirect("boardForm.jsp");
	return;
}
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>boardDelete</title>
</head>
<body>
	<%@ include file="/session_quiz/header.jsp" %>
	<div align="center">
		<h1>게시글 삭제</h1>
		<table>
		<tr><td>
			<form action="boardDeleteService.jsp" method="post" id="f">
				<input type="hidden" name="num" value="<%=num %>">
				<input type="text" value="<%=session.getAttribute("id") %>" readonly="readonly"> <br>
				<input type="password" name="pw" placeholder="비밀번호"><br>
				<input type="password" name="confirm" placeholder="비밀번호 확인" ><br>
				<input type="submit" value="게시글 삭제"><br>
			</form>
		</td></tr>
		</table>
	</div>
	<%@ include file="/session_quiz/footer.jsp" %>
</body>
</html>

 

// boardDeleteService.jsp
<%@page import="java.io.File"%>
<%@page import="session_quiz.BoardDTO"%>
<%@page import="session_quiz.BoardDAO"%>
<%@page import="session_quiz.MemberDTO"%>
<%@page import="session_quiz.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	// boardDeleteService.jsp
	request.setCharacterEncoding("utf-8");

	String id = (String)session.getAttribute("id");
	if(id == null){
		out.print("<script>alert('로그인 후 이용하세요.'); location.href='login.jsp';</script>");
		return;
	}

	String n = request.getParameter("num");
	if(n == null || n == ""){
		response.sendRedirect("boardForm.jsp");
		return;
	}
		
	int num = 0;
	try{
		num = Integer.parseInt(n);
	} catch(Exception e){
		response.sendRedirect("boardForm.jsp");
		return;
	}
	
	String pw = request.getParameter("pw");
	String confirm = request.getParameter("confirm");
	if(pw == "" || confirm == ""){
		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');location.href='boardDelete.jsp?num="+num+"'</script>");
		return;
	}
	
	if(pw.equals(confirm) == false){
// 		out.print("<script>alert('서버에서 검증하고 있는 필수 입력 항목입니다.');</script>");  // 아래 response가 먼저 동작하므로 불필요
		response.sendRedirect("boardDelete.jsp?num="+num);
		return;
	}
	
	MemberDAO memberDao = new MemberDAO();
	MemberDTO member = memberDao.selectId(id);
	
	if(member.getPw().equals(pw) == false){
		out.print("<script>alert('비밀번호가 일치하지 않습니다.');location.href='boardDelete.jsp?num="+num+"'</script>");
		return;
	}
	
	BoardDAO boardDao = new BoardDAO();
	BoardDTO board = boardDao.selectNum(num);
	
	String writeId = board.getId();
	if(writeId.equals(id) == false){
		response.sendRedirect("boardForm.jsp");
		return;
	}
	
	//DataBase에서 정보 삭제
	boardDao.delete(num);
	boardDao.disconnection();
	
	// 파일 삭제
	String fileName = board.getFileName();
	String saveDir = "C:\\jsps\\upload\\" + id + "\\" + fileName;
	File file = new File(saveDir);
	if(file.exists() == true) // 파일이 존재할 경우 true
		file.delete();
%>
<script>alert('게시글 삭제 완료되었습니다.');location.href='boardForm.jsp';</script>