๐ป
JSP ํ๋ก๊ทธ๋๋ฐ - [MVC/DB์ฐ๋] ๊ฒ์ํ ํ์ด์ง (ํ์ด์ง ๋ฒํธ, ๋๊ธ ๋ฌ๊ธฐ, ๊ธ์ฐ๊ธฐ, ๊ธ ์์ ํ๊ธฐ, ๊ธ ์ญ์ ํ๊ธฐ) (3) ๋ณธ๋ฌธ
JSP ํ๋ก๊ทธ๋๋ฐ - [MVC/DB์ฐ๋] ๊ฒ์ํ ํ์ด์ง (ํ์ด์ง ๋ฒํธ, ๋๊ธ ๋ฌ๊ธฐ, ๊ธ์ฐ๊ธฐ, ๊ธ ์์ ํ๊ธฐ, ๊ธ ์ญ์ ํ๊ธฐ) (3)
๋ํจ๋ 2020. 7. 7. 10:14[์ด์ ]
JSP ํ๋ก๊ทธ๋๋ฐ - [MVC/DB์ฐ๋] ๊ฒ์ํ ํ์ด์ง (ํ์ด์ง ๋ฒํธ, ๋๊ธ ๋ฌ๊ธฐ, ๊ธ์ฐ๊ธฐ, ๊ธ ์์ ํ๊ธฐ, ๊ธ ์ญ๏ฟฝ
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" %> ์์ํ์ด์ง ํ์..
hyonee.tistory.com
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";
}
}