시작 페이지(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";
}
}
'Coding > JSP' 카테고리의 다른 글
[JSTL] functions (0) | 2022.04.09 |
---|---|
[MVC] FrontController 패턴 (0) | 2022.04.09 |
로그메시지/ 플러그인 다운 (0) | 2022.04.08 |
[MVC/DB연동] 회원가입 페이지 (아이디 중복체크, 유효성검사, 우편번호 검색 기능) (1) (0) | 2022.04.08 |
[MVC/DB연동] 파일업로드 기능 (0) | 2022.04.08 |