본 포스팅은
정보 제공용이 아닌
유튜브 동빈나님의 JSP 게시판 만들기 강좌 13강을
바탕으로 보고 배운 것을 직접 정리해본 포스트 입니다.
** 간략 프로세스
- view.jsp에서 수정 버튼 -> update.jsp로 이동. -> updateAcion.jsp -> BbsDAO의 update() 호출
** update.jsp
<%
//로그인 세션 확인
String userID = null;
if(session.getAttribute("userID") != null){
userID = (String)session.getAttribute("userID");
}
//로그인이 안되었다면
if(userID == null){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('먼저 로그인 하세요.')");
script.println("location.href = 'login.jsp'");
script.println("</script>");
}
//유효한 게시물인지 확인
int bbsID = 0;
if(request.getParameter("bbsID") != null){
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
//게시물 번호가 유효하지 않은 번호라면
if(bbsID == 0){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('유효하지 않는 글입니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);
//작성자와 로그인한 회원의 아이디와 다르다면
if(!userID.equals(bbs.getUserID())){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('권한이 없습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
- HTML 부분의 위쪽에서 로그인 상태, 게시물의 유효성, 작성자 본인확인을 먼저 해준다.
- 이 모든 게 OK일 경우만 진행 가능하게, 하나라도 No이면 돌려보내주자.
<!-- 수정 게시판 부분 -->
<div class="container">
<div class="row">
<form action="updateAction.jsp?bbsID=<%=bbsID %>" method="post">
<table class = "table table-striped" style="text-align : center; border: 1px solid #dddddd">
<thead> <!-- thead : 테이블의 가장 윗줄 -->
<tr>
<th colspan="2" style="background-color:#eeeeee; text-align: center;">게시물 수정 양식</th>
</tr>
</thead>
<tbody>
<tr>
<td><input type="text" class="form-control" placeholder="글 제목" name="bbsTitle" maxlength="50" value="<%= bbs.getBbsTitle() %>"></td>
</tr>
<tr>
<td><textarea class="form-control" placeholder="글 내용" name="bbsContent" maxlength="2048" style="height:350px;"><%=bbs.getBbsContent() %></textarea></td>
</tr>
</tbody>
</table>
<input type="submit" class="btn btn-primary pull-right" value="수정하기">
</form>
</div>
</div>
- 수정할 글을 작성하는 테이블이다.
- 글쓸 때의 테이블과 코드는 거의 같으나 다른 점이 있다면 기존의 제목과 내용이 보여야한다는 점이다.
- input type="text"는 value=""를 통해, textarea에는 여는 태그와 닫는 태그 사이에 넣어주면 된다.
- form은 updateAction으로 post방식으로 보낼건데 update문에 쓰일 bbsID를 Action에 get방식으로 같이 넣어준다.
** updateAction.jsp
<%
String userID = null;
if(session.getAttribute("userID")!=null){
userID = (String)session.getAttribute("userID");
}
int bbsID = 0;
if(request.getParameter("bbsID") != null){
bbsID = Integer.parseInt(request.getParameter("bbsID"));
}
//게시물 번호가 유효하지 않은 번호라면
if(bbsID == 0){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('유효하지 않는 글입니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
Bbs bbs = new BbsDAO().getBbs(bbsID);
//작성자와 로그인한 회원의 아이디와 다르다면
if(!userID.equals(bbs.getUserID())){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('권한이 없습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
} else { //권한이 있는 경우
//넘어온 제목이나 내용이 누락된 경우
if(request.getParameter("bbsTitle")== null || request.getParameter("bbsContent") == null){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('입력하지 않은 정보가 있습니다.')");
script.println("history.back'");
script.println("</script>");
//넘어 온 것이 누락된 게 없을 경우
}else{
BbsDAO bao = new BbsDAO();
int result = bao.update(bbsID, request.getParameter("bbsTitle"), request.getParameter("bbsContent"));
if(result == -1){
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('수정에 실패했습니다.')");
script.println("histroy.back()");
script.println("</script>");
}else {
PrintWriter script = response.getWriter();
script.println("<script>");
script.println("alert('글이 수정되었습니다.')");
script.println("location.href = 'bbs.jsp'");
script.println("</script>");
}
}
}
%>
- 수정할 기능을 수행할 페이지이다.
- 위 update.jsp에서의 확인 코드와 거의 비슷하지만 제목과 글이 누락이 되진 않았는지도 체크해야한다.
- 현재 bbsTitle과 bbsContent가 request를 통해 넘어왔기 때문에 getParameter로 확인해준다.
- 누락된 것이 없다면 글번호, 수정한 제목, 수정한 내용을 인자로 BbsDAO의 update 메서드를 호출한다.
- 반환값에 따라 적절한 알림과 이동을 시켜준다.
** BbsDAO
//글 수정하기
public int update(int bbsID, String bbsTitle, String bbsContent) {
String sql = "UPDATE BBS SET bbsTitle = ?, bbsContent =? where bbsID =? ";
try {
PreparedStatement pst;
pst = conn.prepareStatement(sql);
pst.setString(1, bbsTitle);
pst.setString(2, bbsContent);
pst.setInt(3, bbsID);
return pst.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
return -1;
}
- 글번호, 수정한 제목, 수정한 글을 내용으로 update의 sql문을 완성시켜주고 실행한다.
- 성공한다면 1개의 레코드가 수정될테니 1을 반환할 것이고 실패한다면 -1이 반환하도록 한다.
** 결과 화면
'웹 개발 한걸음' 카테고리의 다른 글
[JSP] 14강 - 메인 화면 꾸미기 (0) | 2021.03.17 |
---|---|
[JSP] 13강 Part2 - 게시글 삭제 (0) | 2021.03.17 |
[JSP] 12강 - 상세 페이지 구현 + 특수 문자 처리 (0) | 2021.03.12 |
[JDBC] 용어 정리 해보기 (0) | 2021.03.12 |
[JSP] 11강 - 게시글 목록 구현 (0) | 2021.03.12 |