자바(JAVA)/JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)

JAVA/JSP 26. 모델1 방식의 회원제 게시판 만들기 - 게시글 수정하기

개발학생 2024. 1. 5. 19:52
반응형

*게시글 수정하기란?

  • ‘게시글 상세 보기’+’게시글 글쓰기’ 형태
  • 내가 작성했던 글을 DB에서 가져와서 글쓰기 폼에 채워서 보여주고, 내용을 수정해 전송하면 수정한 내용으로 DB 갱신
  • 게시글 수정하기 처리 프로세스와 담당 모듈(파일)

 

1. 게시글 수정 폼 화면 작성

1) 프로젝트에서 WebContent → Board 폴더에 Edit.jsp 파일 생성

  • 기존의 Write.jsp의 코드 복사-붙여넣기 후 내용 수정
// WebContent/Board/Edit.jsp

<%@ page import="model1.board.BoardDAO"%>
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%>    //1.
<%
//2.(아래 코드 3줄)
String num = request.getParameter("num");  // 일련번호 받기 
BoardDAO dao = new BoardDAO(application);  // DAO 생성
BoardDTO dto = dao.selectView(num);        // 게시물 가져오기

//3.로그인 ID 얻기(아래 코드 4줄-if문까지)  
String sessionId = session.getAttribute("UserId").toString(); 
if (!sessionId.equals(dto.getId())) {      // 본인인지 확인
    JSFunction.alertBack("작성자 본인만 수정할 수 있습니다.", out);
    return;
}
dao.close();  // DB 연결 해제
%>
<!DOCTYPE html>

... 생략 ...
</head>
<body>
<jsp:include page="../Common/Link.jsp" />
<h2>회원제 게시판 - 수정하기(Edit)</h2>
<form name="writeFrm" method="post" action="EditProcess.jsp"    //4.
      onsubmit="return validateForm(this);">
    <input type="hidden" name="num" value="<%= dto.getNum() %>" />    //5.
    <table border="1" width="90%">
        
								... 생략...
						<td>
                <input type="text" name="title" style="width: 90%;" 
                       value="<%= dto.getTitle() %>"/>    //6.
            </td>
        </tr>
        <tr>

            ... 생략 ...
                <textarea name="content" style="width: 90%; height: 100px;"><%= dto.getContent() %></textarea>
            </td>
        </tr>

      ... 생략 ...
</body>
</html>
  1. 수정하기 페이지에서도 로그인한 상태인지 확인하기 위해, IsLoggedIn.jsp 인클루드
  2. 로그인한 상태라면, 게시물을 가져옴
  3. 로그인한 상태라면, 로그인한 사용자가 게시물 작성자 본인이 맞는지 확인
    → 본인이 아니라면, 경고창을 띄우고 뒤로 이동
  4. 수정용 form 태그(수정 처리는 EditProcess.jsp에서 함)
  5. hidden 속성의 input 태그: 선택된 게시물의 일련번호를 EditProcess.jsp에 그대로 전달
  6. value 속성의 input 태그: 기존 게시물의 제목을 입력 폼에 미리 채워 넣음
  7. textarea 태그: 기존 게시물의 내용을 입력 폼에 미리 채워 넣음(여는 태그와 닫는 태그 사이의 콘텐츠 부분에 값 삽입)
    → input 태그와는 다르게 시작 태그와 종료 태그 사이에 텍스트가 들어가므로 반드시 공백 없이 작성)

 

2) 로그인 후, 게시글 상세 보기 페이지에서 [수정하기] 버튼 클릭해보기

(1) 로그인: 아이디 ‘hello’, 비밀번호 ‘1234’

 

(2) [게시판(페이징 X)] 버튼 클릭

 

(3) [지금은 봄입니다] 게시글 클릭

 

(4) [수정하기] 버튼 클릭해보기

 

(5) [수정하기] 버튼 정상 작동 확인

 

2. DAO 준비

  • BoardDAO.java 파일에 코드 추가
// Java Resources/src/model1/board/BoardDAO.java

... 생략 ...

public class BoardDAO extends JDBConnect {
		...생략...

		//지정한 게시물 수정
		public int updateEdit(BoardDTO dto) {    //1.
				int result = 0;
				
				try {
						//2.쿼리문 템플릿
						String query = "UPDATE board SET"
												 + " title=?, content=? "
												 + " WHERE num=?";

						//3.쿼리문 완성
						psmt = con.prepareStatement(query);
						psmt.setString(1, dto.getTitle());
						psmt.setString(2, dto.getContent());
						psmt.setString(3, dto.getNum());

						//4.쿼리문 실행
						result = psmt.executeUpdate();
				}
				catch (Exception e) {
						System.out.println("게시물 수정 중 예외 발생");
						e.printStackTrace();
				}

				return result;    //5.결과 반환
		}
}
  1. 메소드가 매개변수로 받는 DTO 객체에 수정할 내용이 담겨 있음
  2. UPDATE 쿼리문
  3. 제목, 내용, 일련번호를 인파라미터로 입력
  4. 쿼리 실행
  5. 반환하는 값: 없데이트된 행의 개수

3. 수정 처리 페이지 작성

  • 프로젝트의 [WebContent] → [Board] 폴더에 EditProcess.jsp 파일 생성 및 코드입력 (DAO에 추가한 메소드 이용)
// WebContent/Board/EditProcess.jsp

<%@ page import="model1.board.BoardDAO"%> 
<%@ page import="model1.board.BoardDTO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
		pageEncoding="UTF-8"%>
<%@ include file="./IsLoggedIn.jsp"%>    //로그인한 상태인지 확인
<%
//수정 내용(폼값) 얻기
String num = request.getParameter("num");
String title = request.getParameter("title");
String content = request.getParameter("content");

//DTO 객체에 저장
BoardDTO dto = new BoardDTO();
dto.setNum(num);
dto.setTitle(title);
dto.setContent(content);

//DB에 반영[DAO 객체를 생성해 updateEdit() 메소드 호출]
BoardDAO dao = new BoardDAO(application);
int affected = dao.updateEdit(dto);
dao.close();

//수정 성공/수정 실패 처리
if (affected == 1) {
		//수정 성공 시 상세 보기 페이지로 이동
		response.sendRedirect("View.jsp?num=" + dto.getNum());
}
else {
		//수정 실패 시 이전 페이지로 이동
		JSFunction.alertBack("수정하기에 실패하였습니다", out);
}
%>

4. 동작 확인

1) 프로젝트에서 목록 보기(List.jsp) 파일을 선택한 상태로 우클릭 후, [Run As] → [Run On Server]로 실행

 

2) 공통 링크의 ‘로그인’ 클릭 후, 아이디에 ‘hello’ 비밀번호에 ‘1234’입력해서 로그인

 

3) [게시판(페이징 X)] 클릭 후, 수정하려는 게시글의 ‘제목’을 클릭해 상세 보기 페이지로 이동

 

4) 게시글의 제목과 내용을 적당히 수정 후 [작성 완료] 버튼 클릭

 

5) 게시글의 제목과 내용이 잘 수정된 것을 볼 수 있음

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형