본문 바로가기

웹 개발 한걸음

[JSP] 13강 Part1 - 게시글 수정

본 포스팅은

정보 제공용이 아닌

유튜브 동빈나님의 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이 반환하도록 한다.

 

 


 

** 결과 화면

수정할 게시물 상세페이지
수정 페이지
수정작업
수정 성공
수정된 것을 확인