• DBCP 방식 사용,
  • 액션태그 사용 (useBean, setProperty)
  • DTO, DAO 클래스
  • 페이징 처리 (inline view)

 

 

프로그램 구조

 

Java Resources >
src > board
DTO 클래스 BoardDataDTO.java  
DAO 클래스 BoardDBBean.java  
WebContent > board board writeForm.jsp  
writePro.jsp  
list.jsp  
content.jsp  
updateForm.jsp  
updatePro.jsp  
deleteFrom.jsp  
deletePro.jsp  
META-INF context.xml 커넥션 풀 환경설정 파일
WEB-INF > lib ojdbc6.jar  
  web.xml 프로젝트 환경설정 파일

 

 

 

 

 

 

1. 글목록 버튼

단순히 list.jsp로 나가는 것이 아닌, 들어온 페이지 값으로 다시 돌아가야 한다.

예를 들어 5 페이지에서 상세페이지로 들어왔다면 글목록을 눌렀을 때 5 페이지로 돌아가야 하고

10 페이지에서 들어왔다면 10페이지로 돌아가야 한다.

그 역할을 해주는 변수가 nowpage 이다.

 

			<input type="button" value="글목록" 
			onClick="location.href='list.jsp?page=<%=nowpage%>' ">

 

 

 

2. 글수정 버튼

 

글삭제 버튼도 아래 코드를 붙여넣어 작성한다.

 

			<input type="button" value="글수정"
			onClick="location.href='updateForm.jsp?num=<%= num %>&page=<%= nowpage %>' ">

 

 

 

 

3. updateForm.jsp

파일을 생성 후, 내용은 writeForm.jsp에서 그대로 복사해서 가져온다.

회원가입의 회원정보수정 폼 처럼 필요한 내용만 수정하여 사용한다.

 

글번호와 페이지 정보를 구해오는 변수를 설정하고,

상세정보를 구해오는 DAO 객체를 생성,

num값을 매개로 getContent 메소드를 실행하는 코드를 작성한다.

 

<%
	int num = Integer.parseInt(request.getParameter("num"));
	String nowpage = request.getParameter("page");
	BoardDBBean dao = BoardDBBean.getInstance();
	
	BoardDataBean boaard = dao.getContent(num);
%>

 

그리고 DAO 페이지에 getContent 메소드를 생성한다.

 

 

 

 

4. getContent 메소드 생성

역시 updateContent 메소드를 그대로 복사, 붙여넣기 하여 필요한 내용만 수정한다.

updateContent 메소드에는 두 sql문이 있었다.

1) num 값을 기준으로 해당 로우 데이터의 readcount 값을 1 증가 시켜주는 sql문

2) num 값을 기준으로 해당 로우 데이터를 불러오는 sql문

 

getContent에서 필요한 sql문은 2) 뿐이라 조회수 증가 sql문은 삭제한다.

 

 

 

 

 

5. updateForm.jsp

 

updatePro.jsp를 생성 후, 폼 태그의 액션값을 updatePro.jsp로 수정한다.

 

 

 

글수정 버튼을 눌렀을 때 글쓰기 버튼을 눌렀을때의 빈칸대신 해당 글 내용이 수정 가능하도록 불러와져 있어야 한다.

 

모든 작성자 칸을 다음과 같이 value 값을 넣어 수정한다.

 

   <tr>
    <td  width="100"  bgcolor="<%=value_c%>" align="center">이 름</td>
    <td  width="330">
       <input type="text" size="10" maxlength="10" id="writer" name="writer"></td>
  </tr>
  <tr>
  
  
  				//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

   <tr>
    <td  width="100"  bgcolor="<%=value_c%>" align="center">이 름</td>
    <td  width="330">
       <input type="text" size="10" maxlength="10" id="writer" name="writer"
       value="<%= board.getWriter %>"></td>
  </tr>
  <tr>

 

 

 

 

 

6. 비밀번호 일치

 

수정을 완료하려면 글작성 시 입력한 비밀번호와

글수정 시 입력한 비밀번호가 일치해야 한다.

이 때, 기준값이 되는 컬럼인 num값으로 passwd 컬럼을 불러오기 위해 hidden 객체를 생성한다.

또, 수정이 끝난 후 목록 페이지로 제대로 돌아가기 위해 현재 페이지 값을 전달하는 hidden 객체도 생성한다.

 

<input type="hidden" name="num" value="<%= num %>">
<input type="hidden" name="num" value="<%= nowpage %>">

 

 

 

 

7. updatePro.jsp

글 수정 후 수정완료 버튼을 누르면 이 페이지로 이동하도록 클릭 이벤트를 작성해두었다.

 

이 updatePro.jsp에서는

비밀번호 일치 조건문을 통해

만약 일치한다면 DB를 업데이트하고 글목록으로 넘어가도록,

불일치 한다면 alert창을 띄우고 뒤로 이동하도록 한다.

 

인코딩 설정과 usebean객체, 프로퍼티 액션태그를 작성한다.

 

<%
	request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="board" class="board.BoardDataBean"/>
<jsp:setProperty property="*" name="board"/>

 

페이지 값은 DTO 클래스에 설정한 필드가 아니기 때문에 매번 번거롭더라도 따로 넘겨받아야 한다.

 

<%
	String nowpage = request.getParameter("page");
%>

 

 

 

 

 

8. 비밀번호 비교를 위한 조건문

 

DAO 객체 생성 후

 

<%
	BoardDBBean dao = BoardDBBean.getInstance();
	BoardDataBean old = dao.getContent(board.getNum()); %>

 

if문으로 검사

 

<%	if(old.getPasswd().equals(board.getPasswd())) { //비번 일치
		int result = dao.update(board);	//update SQL문 실행할 메소드
		
		if(result == 1) { %>
			<script>
				alert("글 수정 성공");
				location.href="list.jsp?page=<%=nowpage%>";
			</script>
<%		} else { %>

<%		}	// result if end %>	

<% } else { %>	
		<script>
			alert("비밀번호가 일치하지 않습니다.")
			history.go(-1);
		</script>
		
<%} //passwd if end %>

 

 

 

9. 글 수정을 완료할 update 메소드 작성

 

	public int update (BoardDataBean board){
		int result = 0;
		
		Connection con = null;
		PreparedStatement pstmt = null;
		
		try {
			con = getConnection();
			
			String sql = "update board0 set writer=?, email=?, subject=?,";
					sql+="content=? where num=?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, board.getWriter());
			pstmt.setString(2, board.getEmail());
			pstmt.setString(3, board.getSubject());
			pstmt.setString(4, board.getContent());
			pstmt.setInt(5, board.getNum());
			
			result = pstmt.executeUpdate();
					
		} catch (Exception e) {
			
		} finally {
			if(pstmt != null) try { pstmt.close(); }catch(Exception e) {}
			if(con != null) try { con.close(); }catch(Exception e) {}
		}
		
		return result;
		
	} // update end

 

 

 

 

 

10. deleteForm.jsp 생성

파일을 생성 후

content.jsp의 글 삭제 버튼에 onClick 이벤트로 삭제폼과 연결시킨다.

deleteForm에는 updateForm.jsp의 내용을 그대로 복사-붙여넣기 해서

폼에 맞는 내용으로 수정한다.

 

폼 태그의 action 값을 deletePro.jsp로 수정하고,

hidden으로 넘어갈 num, nowpage

비밀번호 입력 양식만 남겨두면 된다.

 

 

 

11. 글 삭제를 누르면 deletePro.jsp로 넘어간다.

hidden으로 넘어온 num 값을 토대로 DB에서 로우 데이터를 불러와

deleteForm.jsp에서 입력한 비밀번호 값과 대조한다.

만약 비밀번호가 일치한다면 삭제 메소드를 실행후 alert창 실행후 list.jsp로 이동한다.

비밀번호가 일치하지 않으면 삭제 불가 alert 실행 후 뒤로 한번 이동한다.

이 내용은 updatePro.jsp와 일치하기 때문에 역시 복사-붙여넣기로 내용을 가져와

세부 내용을 수정한다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="board.BoardDataBean"%>
<%@page import="board.BoardDBBean"%>
<%
	request.setCharacterEncoding("UTF-8");
%>

<jsp:useBean id="board" class="board.BoardDataBean"/>
<jsp:setProperty property="*" name="board"/>

<%
	String nowpage = request.getParameter("page");
%>

<%
	BoardDBBean dao = BoardDBBean.getInstance();
	BoardDataBean old = dao.getContent(board.getNum()); %>

	
<%	if(old.getPasswd().equals(board.getPasswd())) { //비번 일치
		int result = dao.delete(board.getNum());	//delete SQL문 실행할 메소드
		
		if(result == 1) { %>
			<script>
				alert("글 삭제 성공");
<%-- 			location.href="content.jsp?num=<%=board.getNum()%>&page=<%=nowpage%>"; --%>
				location.href="list.jsp?page=<%=nowpage%>";
			</script>
<%		} else { %>

<%		}	// result if end %>	

<% } else { %>	
		<script>
			alert("비밀번호가 일치하지 않습니다.")
			history.go(-1);
		</script>
		
<%} //passwd if end %>

 

 

12. DAO에서 delete 메소드 생성

 

	public int delete (int num){
		int result = 0;
		
		Connection con = null;
		PreparedStatement pstmt = null;
		
		try {
			con = getConnection();
			
			String sql = "delete from board0 where num=?";
			
			pstmt = con.prepareStatement(sql);
			pstmt.setInt(1, num);
			result = pstmt.executeUpdate();
					
		} catch (Exception e) {
			
		} finally {
			if(pstmt != null) try { pstmt.close(); }catch(Exception e) {}
			if(con != null) try { con.close(); }catch(Exception e) {}
		}
		
		return result;
		
	}

 

 

 

13. 마지막으로 index.jsp를 실행하면 바로 list.jsp로 이동하도록 자바스크립트 코드를 작성한다.

 

<script>
	location.href="board/list.jsp";
</script>

+ Recent posts