Life is Good

수콩이의 시선

Coding/JSP

[MVC/DB연동] 게시판 페이지 (페이지 번호, 댓글 달기, 글쓰기, 글 수정하기, 글 삭제하기) (3)

Soocong 2022. 4. 8. 18:06

 

 

 

 

시작 페이지(index.jsp)

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작페이지</title>
</head>

<body>
   <c:set var = "root" value = "${pageContext.request.contextPath}"/>
	
   <c:if test="${memberLevel==null}">
    	<a href="${root}/member/register.do">회원가입</a>
  		<a href="${root}/member/login.do">로그인</a>	
   </c:if>

   <c:if test="${memberLevel!=null}">
    	<a href="${root}/member/delete.do">회원탈퇴</a>
    	<a href="${root}/member/update.do">회원수정</a>
  		<a href="${root}/member/logout.do">로그아웃</a>	
  		
  		<c:if test="${memberLevel=='MA'}">
  			<h3>관리자 페이지</h3>
  			<a href="">회원관리</a>
  		</c:if>
   </c:if>
	<br /><br />
	
	<a href="${root}/board/write.do">게시판 글쓰기</a>
	<a href="${root}/board/list.do">목록 게시판</a>
</body>
</html>

 


- 게시판 글 번호 -

 

글번호는 바로 증가하고

그룹번호는 같게한다.

글 순서는 자신보다 큰값이 있으면 증가시키고 자신도 +1 시킨다.

글레벨 +1 시킨다.

 

내용 Command DB
  글번호 그룹번호 글순서 글레벨 글번호 그룹번호 글순서 글레벨
안녕하세요 0 1 0 0 1 1 0 0
반가워요. 0 1 0 0 2 2 0 0
하이 0 1 0 0 3 3 0 0
배고파! 0 1 0 0 4 4 0 0
[답글] 안녕 1 1 0 0 5 1 5 1
[답글] 안 1 1 0 0 6 1 2 1
[답글] 녕 1 1 0 0 7 1 1 1
졸려 0 1 0 0 8 5 0 0
[답글] 반 2 2 0 0 9 2 2 1
[답글] 가 2 2 0 0 10 2 1 1
[답답글] a 6 1 2 1 11 1 4 2
[답답글] b 6 1 2 1 12 1 3 2
[답답글] ㅎ 5 1 5 1 13 1 7 2
[답답글] ㅎㅎ 5 1 5 1 14 1 6 2

(1) 안녕하세요.  0100

     -> (5) [답글] 안녕  1100

          -> (13) [답답글] ㅎ 5151

          -> (14) [답답글] ㅎㅎ 5151

     -> (6) [답글] 안 1100

          -> (9) [답답글] a   6121

          -> (10) [답답글] b   6121

     -> (7) [답글] 녕 1100

(2) 반가워요.  0100

     -> (11) [답글] 반 2200

     -> (12) [답글] 가 2200

(3) 하이  0100

(4) 배고파!  0100

(8) 졸려 0100

 


Oracle SQL developer로 가서 board 테이블과 시퀀스를 생성해준다.

 

 

BoardDao.java

package com.java.board.model;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;

import com.java.database.ConnectionProvider;
import com.java.database.jdbcUtil;

public class BoardDao {

    private static BoardDao instance = new BoardDao();

    public static BoardDao getInstance() {
	return instance;
    }

    public int insert(BoardDto boardDto) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int value = 0;

	writeNumber(boardDto, conn);
	

	try {
	    String sql = "insert into board(board_number, writer, subject, email, content, password, write_date, read_count, group_number, sequence_number, sequence_level) "
		         + "values (board_number_seq.nextval,?,?,?,?,?,?,?,?,?,?)";
	    conn = ConnectionProvider.getConnection();
	    pstmt = conn.prepareStatement(sql);

	    pstmt.setString(1, boardDto.getWriter());
	    pstmt.setString(2, boardDto.getSubject());
	    pstmt.setString(3, boardDto.getEmail());
	    pstmt.setString(4, boardDto.getContent().replace("\r\n", "<br/>"));
	    pstmt.setString(5, boardDto.getPassword());

	    /*
	     * Date date = boardDto.getWriteDate(); long time = date.getTime(); Timestamp ts
	     * = new Timestamp(time);
	     */

	    pstmt.setTimestamp(6, new Timestamp(boardDto.getWriteDate().getTime()));
	    pstmt.setInt(7, boardDto.getReadCount());
	    pstmt.setInt(8, boardDto.getGroupNumber());
	    pstmt.setInt(9, boardDto.getSequenceNumber());
	    pstmt.setInt(10, boardDto.getSequenceLevel());

	    value = pstmt.executeUpdate();
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(conn);
	}

	return value;
    }

    public void writeNumber(BoardDto boardDto, Connection conn) {
	// 그룹번호(ROOT), 글순서(자식), 글레벨(자식)
	int boardNumber = boardDto.getBoardNumber(); // 0
	int groupNumber = boardDto.getGroupNumber(); // 1
	int sequenceNumber = boardDto.getSequenceNumber(); // 0
	int sequenceLevel = boardDto.getSequenceLevel(); // 0

	PreparedStatement pstmt = null;
	ResultSet rs = null;
	String sql = null;

	try {

	    if (boardNumber == 0) { // ROOT : 그룹번호
		sql = "select max(group_number) from board";
		conn = ConnectionProvider.getConnection();
		pstmt = conn.prepareStatement(sql);
		rs = pstmt.executeQuery();

		if (rs.next()) {
		    int max = rs.getInt(1);
		    boardDto.setGroupNumber(max + 1);
		}
	    } else { // 답글 : 글 순서, 글 레벨
		
		sql = "update board set sequence_number=sequence_number+1 "
			+ "where group_number=? and sequence_number>?";

		conn = ConnectionProvider.getConnection();
		pstmt = conn.prepareStatement(sql);
		pstmt.setInt(1, groupNumber);
		pstmt.setInt(2, sequenceNumber);
		pstmt.executeUpdate();
		
		sequenceNumber = sequenceNumber + 1;
		sequenceLevel = sequenceLevel + 1;

		boardDto.setSequenceNumber(sequenceNumber);
		boardDto.setSequenceLevel(sequenceLevel);
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(rs);
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(conn);
	}
    }

    public int getCount() {
	int value = 0;
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;

	try {
	    String sql = "select count(*) from board";
	    conn = ConnectionProvider.getConnection();
	    pstmt = conn.prepareStatement(sql);
	    rs = pstmt.executeQuery();

	    if (rs.next())
		value = rs.getInt(1);
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(rs);
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(conn);
	}
	return value;
    }

    public ArrayList<BoardDto> getBoardList(int startRow, int endRow) {
	ArrayList<BoardDto> boardList = null;
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;

	try {
	    String sql = "select * from"
		    + "(select rownum as rnum, a.* from (select * FROM board order by group_number desc, sequence_number asc) a) b "
		    + "where b.rnum>=? and b.rnum<=?";

	    conn = ConnectionProvider.getConnection();
	    pstmt = conn.prepareStatement(sql);
	    pstmt.setInt(1, startRow);
	    pstmt.setInt(2, endRow);
	    rs = pstmt.executeQuery();

	    boardList = new ArrayList<BoardDto>();
	    while (rs.next()) {
		BoardDto boardDto = new BoardDto();
		boardDto.setBoardNumber(rs.getInt("board_number"));
		boardDto.setWriter(rs.getString("writer"));
		boardDto.setSubject(rs.getString("subject"));
		boardDto.setEmail(rs.getString("email"));
		boardDto.setContent(rs.getString("content"));
		
		boardDto.setPassword(rs.getString("password"));
		boardDto.setWriteDate(new Date(rs.getTimestamp("write_date").getTime()));
		boardDto.setReadCount(rs.getInt("read_count"));
		boardDto.setGroupNumber(rs.getInt("group_number"));
		boardDto.setSequenceNumber(rs.getInt("sequence_number"));
		boardDto.setSequenceLevel(rs.getInt("sequence_level"));

		boardList.add(boardDto);
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(rs);
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(conn);
	}
	return boardList;
    }

    public BoardDto read(int boardNumber) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	BoardDto boardDto = null;
	
	try {
	    conn=ConnectionProvider.getConnection();
	    conn.setAutoCommit(false);
	    
	    String sqlUpdate = "update board set read_count=read_count+1"
	    		+ "where board_number =?";
	    pstmt = conn.prepareStatement(sqlUpdate);
	    pstmt.setInt(1, boardNumber);
	    int value = pstmt.executeUpdate();
	    if(value > 0) jdbcUtil.close(pstmt);
	    
	    String sqlSelect = "select * from board where board_number=?";
	    pstmt = conn.prepareStatement(sqlSelect);
	    pstmt.setInt(1, boardNumber);
	    rs = pstmt.executeQuery();
	    
	    if(rs.next()) {
		boardDto = new BoardDto();
		boardDto.setBoardNumber(rs.getInt("board_number"));
		boardDto.setWriter(rs.getString("writer"));
		boardDto.setSubject(rs.getString("subject"));
		boardDto.setEmail(rs.getString("email"));
		boardDto.setContent(rs.getString("content"));
		
		boardDto.setPassword(rs.getString("password"));
		boardDto.setWriteDate(new Date(rs.getTimestamp("write_date").getTime()));
		boardDto.setReadCount(rs.getInt("read_count"));
		boardDto.setGroupNumber(rs.getInt("group_number"));
		boardDto.setSequenceNumber(rs.getInt("sequence_number"));
		boardDto.setSequenceLevel(rs.getInt("sequence_level"));
	    }
	    
	    conn.commit();
	}catch (Exception e) {
	    e.printStackTrace();
	    jdbcUtil.rollBack(conn);
	}finally {
	    jdbcUtil.close(rs);
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(conn);
	}
	return boardDto;
    }

    public int delete(int boardNumber, String password) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int value = 0;
	
	try {
	    String sql = "delete from board where board_number=? and password=?";
	    
	    conn = ConnectionProvider.getConnection();
	    pstmt = conn.prepareStatement(sql);
	    pstmt.setInt(1, boardNumber);
	    pstmt.setString(2, password);
	    
	    value = pstmt.executeUpdate();
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(conn);
	    jdbcUtil.close(pstmt);	    
	}
	
	return value;
    }

    public BoardDto getContentList(int boardNumber) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	ResultSet rs = null;
	BoardDto boardDto = null;
	
	try {
	    String sql = "select * from board where board_number = ?";
	    
	    conn = ConnectionProvider.getConnection();
	    pstmt = conn.prepareStatement(sql);
	    pstmt.setInt(1, boardNumber);
	    rs = pstmt.executeQuery();
	    
	    if(rs.next()) {
		boardDto = new BoardDto();
		boardDto.setBoardNumber(rs.getInt("board_number"));
		boardDto.setWriter(rs.getString("writer"));
		boardDto.setSubject(rs.getString("subject"));
		boardDto.setEmail(rs.getString("email"));
		boardDto.setContent(rs.getString("content"));
		
		boardDto.setPassword(rs.getString("password"));
		boardDto.setWriteDate(new Date(rs.getTimestamp("write_date").getTime()));
		boardDto.setReadCount(rs.getInt("read_count"));
		boardDto.setGroupNumber(rs.getInt("group_number"));
		boardDto.setSequenceNumber(rs.getInt("sequence_number"));
		boardDto.setSequenceLevel(rs.getInt("sequence_level"));
	    }
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(conn);
	    jdbcUtil.close(pstmt);
	    jdbcUtil.close(rs);
	}
	return boardDto;
    }
    
    public int update(int boardNumber, BoardDto boardDto) {
	Connection conn = null;
	PreparedStatement pstmt = null;
	int value = 0;

	try {
	    String sql = "update board set "
		    	+"subject=?, email=? "
		    	+",content=?, password=? "
		    	+",write_date=? "
	    		+"where board_number=? ";
	   
	    conn=ConnectionProvider.getConnection();    
	    
	    pstmt = conn.prepareStatement(sql);
	    pstmt.setString(1, boardDto.getSubject());
	    pstmt.setString(2, boardDto.getEmail());
	    pstmt.setString(3, boardDto.getContent().replace("\r\n", "<br/>"));
	    pstmt.setString(4, boardDto.getPassword());
	    pstmt.setTimestamp(5, new Timestamp(boardDto.getWriteDate().getTime()));
	    pstmt.setInt(6, boardNumber);
	    
	    System.out.println(sql);
		
	    value = pstmt.executeUpdate();
	    
	} catch (Exception e) {
	    e.printStackTrace();
	} finally {
	    jdbcUtil.close(conn);
	    jdbcUtil.close(pstmt);
	}
	return value;
    }
}

 

BoardDto.java

package com.java.board.model;

import java.util.Date;

public class BoardDto {
    private int boardNumber;
    private String writer;
    private String subject;
    private String email;
    private String content;
    private String password;
    
    private Date writeDate;
    private int groupNumber;
    private int sequenceNumber;
    private int sequenceLevel;
    private int readCount;
    
    public BoardDto() {
	super();
	// TODO Auto-generated constructor stub
    }
    
    public BoardDto(int boardNumber, String writer, String subject, String email, String content, String password,
	    Date writeDate, int groupNumber, int sequenceNumber, int sequenceLevel, int readCount) {
	super();
	this.boardNumber = boardNumber;
	this.writer = writer;
	this.subject = subject;
	this.email = email;
	this.content = content;
	this.password = password;
	this.writeDate = writeDate;
	this.groupNumber = groupNumber;
	this.sequenceNumber = sequenceNumber;
	this.sequenceLevel = sequenceLevel;
	this.readCount = readCount;
    }
    public int getBoardNumber() {
        return boardNumber;
    }
    public void setBoardNumber(int boardNumber) {
        this.boardNumber = boardNumber;
    }
    public String getWriter() {
        return writer;
    }
    public void setWriter(String writer) {
        this.writer = writer;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public Date getWriteDate() {
        return writeDate;
    }
    public void setWriteDate(Date writeDate) {
        this.writeDate = writeDate;
    }
    public int getGroupNumber() {
        return groupNumber;
    }
    public void setGroupNumber(int groupNumber) {
        this.groupNumber = groupNumber;
    }
    public int getSequenceNumber() {
        return sequenceNumber;
    }
    public void setSequenceNumber(int sequenceNumber) {
        this.sequenceNumber = sequenceNumber;
    }
    public int getSequenceLevel() {
        return sequenceLevel;
    }
    public void setSequenceLevel(int sequenceLevel) {
        this.sequenceLevel = sequenceLevel;
    }
    public int getReadCount() {
        return readCount;
    }
    public void setReadCount(int readCount) {
        this.readCount = readCount;
    }
    @Override
    public String toString() {
	return "BoardDao [boardNumber=" + boardNumber + ", writer=" + writer + ", subject=" + subject + ", email="
		+ email + ", content=" + content + ", password=" + password + ", writeDate=" + writeDate
		+ ", groupNumber=" + groupNumber + ", sequenceNumber=" + sequenceNumber + ", sequenceLevel="
		+ sequenceLevel + ", readCount=" + readCount + "]";
    }
}

 

jdbcUtil.java  ---> rollback함수 추가

package com.java.database;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

public class jdbcUtil {
    public static void close(Connection conn) {
	if(conn!=null) {
	    try {
		conn.close();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }
    
    public static void close(PreparedStatement pstmt) {
	if(pstmt!=null) {
	    try {
		pstmt.close();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }

    public static void close(ResultSet rs) {
	if(rs!=null) {
	    try {
		rs.close();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }

    public static void rollBack(Connection conn) {
	if (conn != null) {
	    try {
		conn.rollback();
	    } catch (Exception e) {
		e.printStackTrace();
	    }
	}
    }
}

게시판 리스트(페이지 번호)

 

 

list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri = "http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>목록 페이지</title>
</head>
<body>
	<div align="right">
		<table>
			<tr>
				<td>
					<a href="${root}/board/write.do">글쓰기</a>
				</td>
			</tr>
		</table>
	</div>
	
	<c:if test="${count==0||boardList.size()==0}">
		<div align="center">
			게시판에 저장된 글이 없습니다.
		</div>
	</c:if>
	
	<c:if test="${count>0}">
		<div align="center">
			<table border="1">
				<tr>
					<td align="center" width="50"><strong>번호</strong></td>
					<td align="center" width="250"><strong>제목</strong></td>
					<td align="center" width="70"><strong>작성자</strong></td>
					<td align="center" width="150"><strong>작성일</strong></td>
					<td align="center" width="50"><strong>조회수</strong></td>
				</tr>
				
				 <c:forEach var="boardDto" items="${boardList}">
					 <tr>
					 	<td align="center" width="50">${boardDto.boardNumber}</td>
						<td align="center" width="250">
							<a href="${root}/board/read.do?boardNumber=${boardDto.boardNumber}&pageNumber=${currentPage}">${boardDto.subject}</a>
						</td>
						<td align="center" width="70">${boardDto.writer}</td>
						<td align="center" width="150">
							<fmt:formatDate value="${boardDto.writeDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
						</td>
						<td align="center" width="50">${boardDto.readCount}</td>
					 </tr>
				 </c:forEach>
			</table>
		</div>
	</c:if>
	
	<div align="center">
		<%-- 
			1. 한 페이지당 게시물 수 : 10 
			2. 총 페이지 수: 10page = 전체레코드 수 100/ 한 페이지당 게시물 수 10 
						 11page = 전체레코드 수 101/ 한 페이지당 게시물 수 10
						 
			3. 페이지번호 블럭 : 10 
							[1][2][3][4][5]...[10]
							요청페이지번호 5이면 시작번호 1, 글번호 10
							
							pageBlock, currentPage : 시작번호, 끝번호
							
							int startPage=(int)((currentPage-1)/pageBlock)*pageBlock + 1
												(3-1)/10 = 0*10 + 1 = 1 
												(33-1)/10= 3*10 + 1 = 31
							int endPage=startPage+pageBlock-1
											1+10-1 = 10
											31+10-1 = 40
											
			4. boardSize, currentPage, count: Command Data
		--%>
		<fmt:parseNumber var="pageCount" value="${count/boardSize+(count%boardSize==0? 0:1)}" integerOnly="true"/>
		<c:set var="pageBlock" value="${3}"/>
		
		<fmt:parseNumber var="result" value="${(currentPage-1)/pageBlock}" integerOnly="true"/>
		<c:set var="startPage" value="${result*pageBlock+1}"/>
		<c:set var="endPage" value="${startPage+pageBlock-1}"/>
		
		<c:if test="${endPage > pageCount}">
			<c:set var="endPage" value="${pageCount}"/>
		</c:if>
		<%-- ${startPage}, ${endPage}--%>
		
		<c:if test="${startPage > pageBlock}">
			<a href="${root}/board/list.do?pageNumber=${startPage-pageBlock}">[이전]</a>
		</c:if>
		
		<c:forEach var="i" begin="${startPage}" end="${endPage}">
			<a href="${root}/board/list.do?pageNumber=${i}">[${i}]</a>
		</c:forEach>
		
		<c:if test="${endPage < pageCount }">
			<a href="${root}/board/list.do?pageNumber=${startPage+pageBlock}">[다음]</a>
		</c:if>
	</div>
</body>
</html>

 

ListCommand.java

package com.java.board.command;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.board.model.BoardDto;
import com.java.command.Command;

public class ListCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

	String pageNumber = request.getParameter("pageNumber");
	if (pageNumber == null)
	    pageNumber = "1";

	int currentPage = Integer.parseInt(pageNumber); // 요청 1page
	//logger.info(logMsg + "currentPage:" + currentPage);

	int boardSize = 2; // [1], [2]
	int startRow = (currentPage - 1) * boardSize + 1; // 시작번호 1 11
	int endRow = currentPage * boardSize; // 끝번호 10 20

	int count = BoardDao.getInstance().getCount();
	//logger.info(logMsg + count);
	

	ArrayList<BoardDto> boardList = null;
	if (count > 0) {
	    // startRow, endRow
	    boardList = BoardDao.getInstance().getBoardList(startRow, endRow);
	    //logger.info(logMsg + boardList.size());
	}
	
	request.setAttribute("boardList", boardList);
	request.setAttribute("boardSize", boardSize);
	request.setAttribute("currentPage", currentPage);
	request.setAttribute("count", count);

	return "/WEB-INF/views/board/list.jsp";
    }
}

 

commandURL.properties

# member
/member/register.do=com.java.member.command.RegisterCommand
/member/registerOk.do=com.java.member.command.RegisterOkCommand
/member/idCheck.do=com.java.member.command.IdCheckCommand
/member/zipcode.do=com.java.member.command.ZipcodeCommand
/member/login.do=com.java.member.command.LoginCommand
/member/loginOk.do=com.java.member.command.LoginCommandOk
/member/logout.do=com.java.member.command.LoginOutCommand
/member/main.do=com.java.member.command.mainCommand
/member/update.do=com.java.member.command.UpdateCommand
/member/updateOk.do=com.java.member.command.UpdateOkCommand
/member/delete.do=com.java.member.command.DeleteCommand
/member/deleteOk.do=com.java.member.command.DeleteOkCommand

# board
/board/write.do=com.java.board.command.WriteCommand
/board/writeOk.do=com.java.board.command.WriteOkCommand
/board/list.do=com.java.board.command.ListCommand
/board/read.do=com.java.board.command.ReadCommand
/board/delete.do=com.java.board.command.DeleteCommand
/board/deleteOk.do=com.java.board.command.DeleteOkCommand
/board/update.do=com.java.board.command.UpdateCommand
/board/updateOk.do=com.java.board.command.UpdateOkCommand

 

boardStyle.css

@charset "UTF-8";

#createform {
	width: 700px;
	height: 100px;
	margin: 100px auto;
}

#title {
	color: blue;
	text-align: right;
}

#createform .menu {
	border: solid 3px black;
	width: 700px;
	height: 30px;
	display: block;
	line-height: 20px;
	text-indent: 5px;
}

#id {
	border-right: solid 3px black;
	width: 130px;
	height: 30px;
	float: left;
	line-height: 30px;
	text-align: center;
}

#text {
	border-right: solid 3px black;
	width: 130px;
	height: 200px;
	float: left;
	line-height: 30px;
	text-align: center;
}

#createform .content {
	border: solid 3px black;
	width: 700px;
	height: 200px;
	line-height: 20px;
	text-indent: 5px;
}

 

board.js

/**
 * 
 */
function boardCheck(obj){
	//alert("OK");	
}
function replyFunc(root, boardNumber, groupNumber, sequenceNumber, sequenceLevel){
	var url = root + "/board/write.do?boardNumber=" + boardNumber +
			"&groupNumber=" + groupNumber + "&sequenceNumber=" + sequenceNumber +
			"&sequenceLevel=" + sequenceLevel;
	//alert(url);
	
	location.href = url;
}
function delFunc(root, boardNumber, pageNumber){
	var url = root+ "/board/delete.do?boardNumber=" + boardNumber + "&pageNumber=" + pageNumber;
	//alert(url);
	
	location.href = url;
	/*var value = confirm("삭제하시겠습니까?");
	
	if(value == true){
		var url = root+ "/board/deleteOk.do?boardNumber=" + boardNumber + "&pageNumber=" + pageNumber;
		alert(url);
	}else{
		alert("취소되었습니다.");
	}*/
}
function updFunc(root, boardNumber, pageNumber){
	var url = root + "/board/update.do?boardNumber=" + boardNumber + "&pageNumber=" + pageNumber;
	//alert(url);
	
	location.href = url;
}

글 읽기

 

read.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<c:set var="root" value="${pageContext.request.contextPath}" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입page</title>
<link rel="stylesheet" href="${root}/css/board/boardStyle.css" />
<script type="text/javascript" src="${root}/javascript/board/board.js?ver=2"></script>
</head>
<body>
	<div id="createform">
		<div class="menu" style="border-bottom-width: 0px;"> 
			<div id="id">글번호</div>
			${boardDto.boardNumber}
		</div>
		
		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">작성자</div>
			${boardDto.writer}
		</div>
		
		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">조회수</div>
			${boardDto.readCount}
		</div>
		
		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">작성일</div>
			<fmt:formatDate value="${boardDto.writeDate}" pattern="yyyy-MM-dd HH:mm:ss"/>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">제목</div>
			${boardDto.subject}
		</div>

		<div class="content" style="border-bottom-width: 0px;">
			<div id="text">내용</div>
			${boardDto.content}
		</div>

		<div class="menu" style="border-bottom-width: 3px; text-align: center;">
			<input type="button" value="글수정" onclick="updFunc('${root}','${boardDto.boardNumber}','${pageNumber}')"/>	
			<input type="button" value="글삭제" onclick="delFunc('${root}','${boardDto.boardNumber}','${pageNumber}')"/>	
			<input type="button" value="답글" onclick="replyFunc('${root}','${boardDto.boardNumber}','${boardDto.groupNumber}','${boardDto.sequenceNumber}','${boardDto.sequenceLevel}')"/>	
			<input type="button" value="글목록" onclick="location.href='${root}/board/list.do?pageNumber=${pageNumber}'"/>	
		</div>
	</div>
</body>
</html>

 

ReadCommand.java

package com.java.board.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.board.model.BoardDto;
import com.java.command.Command;

public class ReadCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	int boardNumber = Integer.parseInt(request.getParameter("boardNumber"));
	int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
	//logger.info(logMsg + boardNumber + "," + pageNumber);
	
	BoardDto boardDto = BoardDao.getInstance().read(boardNumber);
	//logger.info(logMsg + boardDto);
	
	request.setAttribute("pageNumber", pageNumber);
	request.setAttribute("boardDto", boardDto);
	
	return "/WEB-INF/views/board/read.jsp";
    }
}

 


글 수정하기

 

 

update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<c:set var="root" value="${pageContext.request.contextPath }" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입page</title>
<link rel="stylesheet" href="${root}/css/board/boardStyle.css" />
<script type="text/javascript" src="${root}/javascript/board/board.js"></script>
</head>
<body>
	<form id="createform" action="${root}/board/updateOk.do" method="post">
		<div id="title"><a href="${root}/board/list.do">글목록</a></div>
			
		<div class="menu" style="border-bottom-width: 0px;">
			<input type="hidden" name="boardNumber" value="${boardNumber}"/>
			<input type="hidden" name="pageNumber" value="${pageNumber}"/>
			
			<div id="id">작성자</div>
			<span>
				${boardDto.writer}
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">제목</div>
			<span> 
				<input type="text" name="subject" size="50" value="${boardDto.subject}"/>
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">이메일</div>
			<span> 
				<input type="email" name="email" size="50" value="${boardDto.email}"/>
			</span>
		</div>

		<div class="content" style="border-bottom-width: 0px;">
			<div id="text">내용</div>
			<span> 
				<textarea name="content" rows="12" cols="65" >${boardDto.content}</textarea>
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">비밀번호</div>
			<span> 
				<input type="password" name="password" size="30" value="${boardDto.password}"/>
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 3px; text-align: center;">
			<span> 
				<input type="submit" value="수정완료"/> 
				<input type="reset" value="다시작성" /> 
				<input type="button" value="목록보기" onclick="location.href='${root}/board/list.do'"/>
			</span>
		</div>
	</form>
</body>
</html>

 

UpdateCommand.java

package com.java.board.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.board.model.BoardDto;
import com.java.command.Command;

public class UpdateCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

	int boardNumber = Integer.parseInt(request.getParameter("boardNumber"));
	int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
	
	BoardDto boardDto = BoardDao.getInstance().getContentList(boardNumber);
	
	request.setAttribute("boardNumber", boardNumber);
	request.setAttribute("pageNumber", pageNumber);
	request.setAttribute("boardDto", boardDto);
	
	return "/WEB-INF/views/board/update.jsp";
    }
}

 

updateOk.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
	<c:if test="${check > 0}">
		<script type="text/javascript">
			alert("수정되었습니다.");
			location.href="${root}/board/list.do?";
		</script>
	</c:if>
	<c:if test="${check == 0}">
		<script type="text/javascript">
			alert("수정되지 않았습니다.");
			location.href="${root}/board/update.do?pageNumber=${pageNumber}";
		</script>
	</c:if>
</body>
</html>

 

UpdateOkCommand.java

package com.java.board.command;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.board.model.BoardDto;
import com.java.command.Command;

public class UpdateOkCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	request.setCharacterEncoding("utf-8");
	
	int boardNumber = Integer.parseInt(request.getParameter("boardNumber"));
	int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
	
	BoardDto boardDto = new BoardDto();
	boardDto.setWriter(request.getParameter("name"));
	boardDto.setSubject(request.getParameter("subject"));
	boardDto.setEmail(request.getParameter("email"));
	boardDto.setContent(request.getParameter("content"));
	boardDto.setPassword(request.getParameter("password"));
	boardDto.setWriteDate(new Date()); //시간
	
	int check = BoardDao.getInstance().update(boardNumber, boardDto);
	logger.info(logMsg + check); 
	
	request.setAttribute("check", check);
	request.setAttribute("pageNumber", pageNumber);
	
	return "/WEB-INF/views/board/updateOk.jsp";
    }
}

 

 


게시판 글쓰기

 

 

write.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<c:set var="root" value="${pageContext.request.contextPath }" />
<html>
<head>
<meta charset="UTF-8">
<title>회원가입page</title>
<link rel="stylesheet" href="${root}/css/board/boardStyle.css" />
<script type="text/javascript" src="${root}/javascript/board/board.js"></script>
</head>
<body>
	<form id="createform" action="${root}/board/writeOk.do" method="post"
		onsubmit="return boardCheck(this)">
		<div id="title">글목록</div>
		<div class="menu" style="border-bottom-width: 0px;">
			<input type="hidden" name="boardNumber" value="${boardNumber}" /> 
			<input type="hidden" name="groupNumber" value="${groupNumber}" /> 
			<input type="hidden" name="sequenceNumber" value="${sequenceNumber}" /> 
			<input type="hidden" name="sequenceLevel" value="${sequenceLevel}" />
			
			<div id="id">작성자</div>
			<span> 
				<input type="text" name="name" size="12" />
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">제목</div>
			<span> 
				<input type="text" name="subject" size="50" />
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">이메일</div>
			<span> 
				<input type="email" name="email" size="50" />
			</span>
		</div>

		<div class="content" style="border-bottom-width: 0px;">
			<div id="text">내용</div>
			<span> 
				<textarea name="content" rows="12" cols="65"></textarea>
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 0px;">
			<div id="id">비밀번호</div>
			<span> 
				<input type="password" name="password" size="30" />
			</span>
		</div>

		<div class="menu" style="border-bottom-width: 3px; text-align: center;">
			<span> 
				<input type="submit" value="글쓰기" /> 
				<input type="reset" value="다시작성" /> 
				<input type="button" value="목록보기" />
			</span>
		</div>
	</form>
</body>
</html>

 

writeCommand.java

package com.java.board.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.command.Command;

public class WriteCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	
	//부모글(ROOT)
	int boardNumber = 0;	//ROOT글이면 0
	int groupNumber = 1;	//그룹번호
	int sequenceNumber = 0;	//글순서
	int sequenceLevel = 0;	//글레벨
	
	//답글인경우 부모글의  DB 글번호, 그룹번호, 글순서, 글레벨
	if(request.getParameter("borderNumber")!=null) {
	    //나중에
	}
	
	logger.info(logMsg +"boardNumber:" + boardNumber); 
	logger.info(logMsg +"groupNumber:" + groupNumber); 
	logger.info(logMsg +"sequenceNumber:" + sequenceNumber); 
	logger.info(logMsg +"sequenceLevel:" + sequenceLevel); 
	
	request.setAttribute("boardNumber", boardNumber);
	request.setAttribute("groupNumber", groupNumber);
	request.setAttribute("sequenceNumber", sequenceNumber);
	request.setAttribute("sequenceLevel", sequenceLevel);
	
	return "/WEB-INF/views/board/write.jsp";
    }

}

 

writeOk.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>      
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
   <c:if test="${check>0}">
      <script type="text/javascript">
         alert("글쓰기에 성공하셨습니다.")
         location.href = "${root}/board/list.do";
      </script>
   </c:if>
   
   <c:if test="${check==0}">
      <script type="text/javascript">
         alert("글쓰기를 실패.")
         location.href = "${root}/board/write.do";
      </script>
   </c:if>
</body>
</html>

 

writeOkCommand.java

package com.java.board.command;

import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.board.model.BoardDto;
import com.java.command.Command;

public class WriteOkCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	request.setCharacterEncoding("utf-8");
	
	BoardDto boardDto = new BoardDto();
	boardDto.setBoardNumber(Integer.parseInt(request.getParameter("boardNumber")));
	boardDto.setGroupNumber(Integer.parseInt(request.getParameter("groupNumber")));
	boardDto.setSequenceNumber(Integer.parseInt(request.getParameter("sequenceNumber")));
	boardDto.setSequenceLevel(Integer.parseInt(request.getParameter("sequenceLevel")));
	
	boardDto.setWriter(request.getParameter("name"));
	boardDto.setSubject(request.getParameter("subject"));
	boardDto.setEmail(request.getParameter("email"));
	boardDto.setContent(request.getParameter("content"));
	boardDto.setPassword(request.getParameter("password"));
	boardDto.setWriteDate(new Date()); //시간
	
	int check = BoardDao.getInstance().insert(boardDto);
	logger.info(logMsg + boardDto); 
	request.setAttribute("check", check);
	
	return "/WEB-INF/views/board/writeOk.jsp";
    }
}

 


글 삭제하기

 

delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<div align="center">
		<form action="${root}/board/deleteOk.do" method="post">
			<input type="hidden" name="boardNumber" value="${boardNumber}"/>
			<input type="hidden" name="pageNumber" value="${pageNumber}"/>
			
			<div>비밀번호를 입력해주세요.</div>
			<div>
				<input type="password" name="password"/>
			</div>
			<div>
				<input type="submit" value="글삭제"/>
				<input type="button" value="목록보기" onclick="location.href='${root}/board/list.do?pageNumber=${pageNumber}'"/>
			</div>
		</form>
	</div>
</body>
</html>

 

deleteOk.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri = "http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<c:set var = "root" value = "${pageContext.request.contextPath}"/>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<c:if test="${check > 0}">
		<script type="text/javascript">
			alert("삭제되었습니다.");
			location.href="${root}/board/list.do?pageNumber=${pageNumber}";
		</script>
	</c:if>
	<c:if test="${check == 0}">
		<script type="text/javascript">
			alert("삭제되지 않았습니다.");
			location.href="${root}/board/list.do?pageNumber=${pageNumber}";
		</script>
	</c:if>
</body>
</html>

 

DeleteCommand.java

package com.java.board.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.command.Command;

public class DeleteCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	
	int boardNumber = Integer.parseInt(request.getParameter("boardNumber"));
	int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
	logger.info(logMsg + boardNumber + "\t" + pageNumber);
	
	request.setAttribute("boardNumber", boardNumber);
	request.setAttribute("pageNumber", pageNumber);
	
	return "/WEB-INF/views/board/delete.jsp";
    }
}

 

DeleteOkCommand.java

package com.java.board.command;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.java.board.model.BoardDao;
import com.java.command.Command;

public class DeleteOkCommand implements Command {

    @Override
    public String proRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
	int boardNumber = Integer.parseInt(request.getParameter("boardNumber"));
	int pageNumber = Integer.parseInt(request.getParameter("pageNumber"));
	String password = request.getParameter("password");
	logger.info(logMsg + boardNumber + "\t" + pageNumber + "\t" + password);
	
	int check = BoardDao.getInstance().delete(boardNumber, password);
	logger.info(logMsg + check);
	
	request.setAttribute("check", check);
	request.setAttribute("pageNumber", pageNumber);
	
	return "/WEB-INF/views/board/deleteOk.jsp";
    }

}