개발자입니다
IT BANK) JSP 19일차 - JSP(회원관리 페이지(SQL)2) 본문
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>
'JSP > IT BANK - JSP' 카테고리의 다른 글
IT BANK) JSP 20일차 - JSP(회원관리 페이지(SQL)2), EL, JSTL (31) | 2022.10.05 |
---|---|
IT BANK) JSP 18일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.30 |
IT BANK) JSP 17일차 - JSP(회원관리 페이지(SQL)2) (31) | 2022.09.29 |
IT BANK) JSP 16일차 - JSP(회원관리 페이지(SQL)2) (0) | 2022.09.28 |
IT BANK) JSP 15일차 - JSP(회원관리 페이지(SQL)2) (31) | 2022.09.27 |