Skip to content

Commit 95925d0

Browse files
committed
프로젝트의 마지막 커밋입니다.
1 parent b9bc9b7 commit 95925d0

File tree

9 files changed

+239
-21
lines changed

9 files changed

+239
-21
lines changed

20180910_chap15_MVC/WebContent/board/board_reply.jsp

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
</tr>
4040
<tr>
4141
<td colspan=2>
42-
<input type="submit" value="수정완료"/>
42+
<input type="submit" value="답변쓰기"/>
4343
<input type="reset" value="다시쓰기"/>
4444
</td>
4545
</tr>

20180910_chap15_MVC/WebContent/board/notice/notice_detail.jsp

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
</tr>
3737
<tr>
3838
<td>내용</td>
39-
<td><textarea readonly>${notice.notice_content}</textarea></td>
39+
<td><textarea readonly style="width: 350px; height: 200px;">${notice.notice_content}</textarea></td>
4040
</tr>
4141
<tr>
4242
<td>작성일</td>
@@ -45,7 +45,7 @@
4545
<tr>
4646
<td colspan="2">
4747
<a href="noticeUpdateForm.do?notice_num=${notice.notice_num}">수정</a>
48-
<a href="noticeDelete.do?notice_num${notice.notice_num}">삭제</a>
48+
<a href="noticeDelete.do?notice_num=${notice.notice_num}">삭제</a>
4949
</td>
5050
</tr>
5151
</table>

20180910_chap15_MVC/WebContent/board/notice/notice_list.jsp

+24-2
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,26 @@
66
<head>
77
<meta charset="UTF-8">
88
<title>Insert title here</title>
9+
<style type="text/css">
10+
table {
11+
border-collapse: collapse;
12+
border: 1px soild #CCC;
13+
width: 500px;
14+
margin: 50px auto;
15+
}
16+
table th, table td {
17+
border: 1px solid #333;
18+
text-align: center;
19+
height: 35px;
20+
}
21+
table td:nth-child(2) {
22+
text-align: left;
23+
padding-left: 10px;
24+
}
25+
article {
26+
text-align: center;
27+
}
28+
</style>
929
</head>
1030
<body>
1131
<jsp:include page="../../common/header.jsp"/>
@@ -15,25 +35,27 @@
1535
</c:if>
1636
<table>
1737
<tr>
18-
<td colspan="4">
38+
<td colspan="5">
1939
<form action="noticeSearch.do" method="GET">
2040
<select name="searchName">
2141
<option value="author">작성자</option>
2242
<option value="title">제목</option>
2343
</select>
24-
<input type="text" name="searchValue" />
44+
<input type="text" name="searchValue" value="${searchValue}" />
2545
<input type="submit" value="검색" />
2646
</form>
2747
</td>
2848
</tr>
2949
<tr>
50+
<th>행번호</th>
3051
<th>글번호</th>
3152
<th>제목</th>
3253
<th>작성자</th>
3354
<th>작성일</th>
3455
</tr>
3556
<c:forEach var="notice" items="${noticeList}">
3657
<tr>
58+
<td>${notice.rnum}</td>
3759
<td>${notice.notice_num}</td>
3860
<td>
3961
<a href="noticeDetail.do?notice_num=${notice.notice_num}">

20180910_chap15_MVC/WebContent/board/notice/notice_update.jsp

+7-5
Original file line numberDiff line numberDiff line change
@@ -11,19 +11,21 @@
1111
<h1>공지글 수정</h1>
1212
<form action="noticeUpdate.do" method="post">
1313
<input type="hidden" name="notice_author" value="${member.name}"/>
14+
<input type="hidden" name="notice_num" value="${notice.notice_num}"/>
1415
카테고리
15-
<select name="notice_name">
16-
<option value="공지" selected>공지</option>
16+
<select name="notice_category">
17+
<option value="${notice.notice_category}">${notice.notice_category}</option>
18+
<option value="공지">공지</option>
1719
<option value="알림">알림</option>
1820
<option value="당첨">당첨</option>
1921
<option value="이벤트">이벤트</option>
2022
<option value="우수공략">우수공략</option>
2123
</select>
2224
제목 :
23-
<input type="text" name="notice_title" /><br/>
25+
<input type="text" name="notice_title" value="${notice.notice_title}" /><br/>
2426
content :
25-
<textarea name="notice_content"></textarea><br/>
26-
<input type="submit" value="작성완료"/>
27+
<textarea name="notice_content" style="width: 350px; height: 200px;">${notice.notice_content}</textarea><br/>
28+
<input type="submit" value="수정완료"/>
2729
</form>
2830
</body>
2931
</html>

20180910_chap15_MVC/WebContent/common/page.jsp

+8-8
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,25 @@
66
text-decoration: none;
77
}
88
</style>
9-
<a href="notice.do?page=1">[처음]</a>&nbsp;
9+
<a href="${link}.do?page=1&searchName=${searchName}&searchValue=${searchValue}">[처음]</a>&nbsp;
1010
<c:choose>
11-
<c:when test="${pageInfo.page <= 1}">[이전] &nbsp;</c:when>
12-
<c:otherwise><a href="notice.do?page=${pageInfo.page - 1}">[이전]</a></c:otherwise>
11+
<c:when test="${pageInfo.page <= 1}">[이전]&nbsp;</c:when>
12+
<c:otherwise><a href="${link}.do?page=${pageInfo.page - 1}&searchName=${searchName}&searchValue=${searchValue}">[이전]</a></c:otherwise>
1313
</c:choose>
1414

1515
<c:forEach var="i" begin="${pageInfo.startPage}" end="${pageInfo.endPage}">
1616
<c:choose>
1717
<c:when test="${pageInfo.page eq i}">
18-
<a href="notice.do?page=${i}"><span style="color: RED;">[${i}]</span></a>
18+
<a href="${link}.do?page=${i}&searchName=${searchName}&searchValue=${searchValue}"><span style="color: RED;">[${i}]</span></a>
1919
</c:when>
2020
<c:otherwise>
21-
<a href="notice.do?page=${i}"><span style="color: #CCC;">[${i}]</span></a>
21+
<a href="${link}.do?page=${i}&searchName=${searchName}&searchValue=${searchValue}"><span style="color: #CCC;">[${i}]</span></a>
2222
</c:otherwise>
2323
</c:choose>
2424
</c:forEach>
2525

2626
<c:choose>
27-
<c:when test="${pageInfo.page >= pageInfo.maxPage}">[다음]</c:when>
28-
<c:otherwise><a href="notice.do?page=${pageInfo.page + 1}">[다음]</a></c:otherwise>
27+
<c:when test="${pageInfo.page >= pageInfo.maxPage}">&nbsp;[다음]</c:when>
28+
<c:otherwise><a href="${link}.do?page=${pageInfo.page + 1}&searchName=${searchName}&searchValue=${searchValue}">[다음]</a></c:otherwise>
2929
</c:choose>
30-
&nbsp;<a href="notice.do?page=${pageInfo.maxPage}">[마지막]</a>
30+
&nbsp;<a href="${link}.do?page=${pageInfo.maxPage}&searchName=${searchName}&searchValue=${searchValue}">[마지막]</a>

20180910_chap15_MVC/src/controller/NoticeController.java

+21-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ private void doProcess(HttpServletRequest request, HttpServletResponse response)
3434
System.out.println(command);
3535

3636
String nextPage = null;
37+
3738
boolean success = false;
39+
3840
String suc = "/board/notice/notice_success.jsp";
3941
String fail = "/board/notice/notice_fail.jsp";
4042

@@ -60,12 +62,30 @@ private void doProcess(HttpServletRequest request, HttpServletResponse response)
6062
nextPage = "/board/notice/notice_detail.jsp";
6163

6264
} else if(command.equals("/noticeUpdateForm.do")) { // OK
63-
System.out.println("공지사항 수정 요청");
65+
System.out.println("공지사항 수정창 요청");
66+
ns.noticeDetail(request);
67+
6468
nextPage = "/board/notice/notice_update.jsp";
6569

70+
} else if(command.equals("/noticeUpdate.do")) { // OK
71+
System.out.println("공지사항 수정 요청");
72+
success = ns.noticeUpdate(request);
73+
74+
if(success) { nextPage = suc; }
75+
else { nextPage = fail; }
76+
} else if(command.equals("/noticeDelete.do")) { // OK
77+
System.out.println("공지사항 삭제 요청");
78+
success = ns.noticeDelete(request);
79+
80+
if(success) { nextPage = suc; }
81+
else { nextPage = fail; }
6682
} else if(command.equals("/noticeSearch.do")) {
83+
// 2018/09/13일 오늘 JSP과정이 마무리되고 내일은 스프링과정으로 넘어간다.
84+
// 마지막 작성입니다. 이프로젝트에서 클라이맥스입니다.
6785
System.out.println("공지사항 검색 요청");
86+
ns.search(request);
6887

88+
nextPage = "/board/notice/notice_list.jsp";
6989
}
7090

7191
if (nextPage != null) {

20180910_chap15_MVC/src/dao/MemberDao.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ public MemberVo getMemberVo(String value) {
9292
MemberVo member = new MemberVo();
9393
try {
9494
conn = JdbcUtil.getConnection();
95-
String sql = "SELECT * FROM test_member WHERE id =?";
95+
String sql = "SELECT * FROM test_member WHERE id = ?";
9696
pstmt = conn.prepareStatement(sql);
9797
pstmt.setString(1, value);
9898
rs = pstmt.executeQuery();

20180910_chap15_MVC/src/dao/NoticeDao.java

+134
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,138 @@ public NoticeVo getNoticeVo(int notice_num) {
127127
finally { JdbcUtil.close(rs); JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
128128
return noticeVo;
129129
}
130+
131+
public boolean noticeUpdate(NoticeVo noticeVo) {
132+
conn = JdbcUtil.getConnection();
133+
boolean success = false;
134+
String sql = "";
135+
136+
try {
137+
sql = "UPDATE notice_board SET notice_category = ?, notice_author = ?, "
138+
+ "notice_title = ?, notice_content = ?, notice_date = sysdate "
139+
+ "WHERE notice_num = ?";
140+
pstmt = conn.prepareStatement(sql);
141+
pstmt.setString(1, noticeVo.getNotice_category());
142+
pstmt.setString(2, noticeVo.getNotice_author());
143+
pstmt.setString(3, noticeVo.getNotice_title());
144+
pstmt.setString(4, noticeVo.getNotice_content());
145+
pstmt.setInt(5, noticeVo.getNotice_num());
146+
int result = pstmt.executeUpdate();
147+
148+
if(result != 0) { success = true; }
149+
}
150+
catch (SQLException e) { e.printStackTrace(); }
151+
finally { JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
152+
return success;
153+
}
154+
155+
public boolean noticeDelete(int notice_num) {
156+
conn = JdbcUtil.getConnection();
157+
boolean success = false;
158+
String sql = "";
159+
160+
try {
161+
sql = "DELETE FROM notice_board WHERE notice_num = ?";
162+
pstmt = conn.prepareStatement(sql);
163+
pstmt.setInt(1, notice_num);
164+
int result = pstmt.executeUpdate();
165+
166+
if(result != 0) { success = true; }
167+
}
168+
catch (SQLException e) { e.printStackTrace(); }
169+
finally { JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
170+
return success;
171+
}
172+
173+
public ArrayList<NoticeVo> search(String searchName, String searchValue) {
174+
ArrayList<NoticeVo> noticeList = new ArrayList<>();
175+
176+
conn = JdbcUtil.getConnection();
177+
String sql = "";
178+
179+
try {
180+
sql = "SELECT * FROM notice_board WHERE ";
181+
if(searchName.equals("author")) { sql += "notice_author LIKE ?"; }
182+
else { sql += "notice_title LIKE ?"; }
183+
sql += " ORDER BY notice_num DESC";
184+
pstmt = conn.prepareStatement(sql);
185+
pstmt.setString(1, "%" + searchValue + "%");
186+
rs = pstmt.executeQuery();
187+
188+
while (rs.next()) {
189+
NoticeVo noticeVo = new NoticeVo();
190+
noticeVo.setNotice_num(rs.getInt("notice_num"));
191+
noticeVo.setNotice_category(rs.getString("notice_category"));
192+
noticeVo.setNotice_author(rs.getString("notice_author"));
193+
noticeVo.setNotice_title(rs.getString("notice_title"));
194+
noticeVo.setNotice_content(rs.getString("notice_content"));
195+
noticeVo.setNotice_date(rs.getTimestamp("notice_date"));
196+
noticeList.add(noticeVo);
197+
}
198+
}
199+
catch (SQLException e) { e.printStackTrace(); }
200+
finally { JdbcUtil.close(rs); JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
201+
return noticeList;
202+
}
203+
204+
public int getSearchListCount(String searchName, String searchValue) {
205+
conn = JdbcUtil.getConnection();
206+
String sql = "";
207+
208+
int listCount = 0;
209+
210+
try {
211+
sql = "SELECT COUNT(*) FROM notice_board WHERE ";
212+
if(searchName.equals("author")) { sql += "notice_author LIKE ?"; }
213+
else { sql += "notice_title LIKE ?"; }
214+
pstmt = conn.prepareStatement(sql);
215+
pstmt.setString(1, "%" + searchValue + "%");
216+
rs = pstmt.executeQuery();
217+
218+
while (rs.next()) { listCount = rs.getInt(1); }
219+
}
220+
catch (SQLException e) { e.printStackTrace(); }
221+
finally { JdbcUtil.close(rs); JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
222+
return listCount;
223+
}
224+
225+
public ArrayList<NoticeVo> searchPage(String searchName, String searchValue, OraclePageMaker pageInfo) {
226+
ArrayList<NoticeVo> noticeList = new ArrayList<>();
227+
228+
conn = JdbcUtil.getConnection();
229+
String sql = "";
230+
231+
int startRow = pageInfo.getStartRow();
232+
int endRow = pageInfo.getEndRow();
233+
234+
try {
235+
sql += "SELECT * FROM ";
236+
sql += "(SELECT ROWNUM AS r, A.* FROM ";
237+
sql += "(SELECT ROWNUM AS rnum, TEMP.* FROM ";
238+
sql += "(SELECT * FROM notice_board WHERE ";
239+
if(searchName.equals("author")) { sql += "notice_author LIKE ?"; }
240+
else { sql += "notice_title LIKE ?"; }
241+
sql += " ORDER BY notice_num ASC) TEMP ORDER BY rnum DESC) A) WHERE r BETWEEN ? AND ?";
242+
pstmt = conn.prepareStatement(sql);
243+
pstmt.setString(1, "%" + searchValue + "%");
244+
pstmt.setInt(2, startRow);
245+
pstmt.setInt(3, endRow);
246+
rs = pstmt.executeQuery();
247+
248+
while (rs.next()) {
249+
NoticeVo noticeVo = new NoticeVo();
250+
noticeVo.setRnum(rs.getInt("rnum"));
251+
noticeVo.setNotice_num(rs.getInt("notice_num"));
252+
noticeVo.setNotice_category(rs.getString("notice_category"));
253+
noticeVo.setNotice_author(rs.getString("notice_author"));
254+
noticeVo.setNotice_title(rs.getString("notice_title"));
255+
noticeVo.setNotice_content(rs.getString("notice_content"));
256+
noticeVo.setNotice_date(rs.getTimestamp("notice_date"));
257+
noticeList.add(noticeVo);
258+
}
259+
}
260+
catch (SQLException e) { e.printStackTrace(); }
261+
finally { JdbcUtil.close(rs); JdbcUtil.close(pstmt); JdbcUtil.close(conn); }
262+
return noticeList;
263+
}
130264
}

20180910_chap15_MVC/src/service/NoticeService.java

+41-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,8 @@ public void noticeList(HttpServletRequest request) {
3333
OraclePageMaker pageInfo = new OraclePageMaker(page, listCount);
3434

3535
ArrayList<NoticeVo> noticeList = dao.getNoticeList(pageInfo);
36-
36+
37+
request.setAttribute("link", "notice");
3738
request.setAttribute("pageInfo", pageInfo);
3839
request.setAttribute("noticeList", noticeList);
3940
}
@@ -44,9 +45,48 @@ public void noticeDetail(HttpServletRequest request) {
4445

4546
NoticeVo noticeVo = dao.getNoticeVo(notice_num);
4647
request.setAttribute("notice", noticeVo);
48+
}
49+
50+
public boolean noticeUpdate(HttpServletRequest request) {
51+
NoticeVo noticeVo = new NoticeVo(request);
52+
NoticeDao dao = NoticeDao.getInstance();
53+
54+
boolean success = dao.noticeUpdate(noticeVo);
55+
return success;
56+
}
57+
58+
public boolean noticeDelete(HttpServletRequest request) {
59+
NoticeDao dao = NoticeDao.getInstance();
60+
int notice_num = Integer.parseInt(request.getParameter("notice_num"));
61+
62+
boolean success = dao.noticeDelete(notice_num);
63+
return success;
64+
}
65+
66+
public void search(HttpServletRequest request) {
67+
NoticeDao dao = NoticeDao.getInstance();
68+
String searchName = request.getParameter("searchName");
69+
String searchValue = request.getParameter("searchValue");
70+
int page = 1;
4771

72+
if(request.getParameter("page") != null) {
73+
page = Integer.parseInt(request.getParameter("page"));
74+
}
75+
76+
int listCount = dao.getSearchListCount(searchName, searchValue);
77+
System.out.println("listCount : " + listCount);
78+
79+
OraclePageMaker pageInfo = new OraclePageMaker(page, listCount);
80+
pageInfo.setPerPage(5);
81+
pageInfo.setPageCount(5);
4882

83+
ArrayList<NoticeVo> noticeList = dao.searchPage(searchName, searchValue, pageInfo);
4984

85+
request.setAttribute("link", "noticeSearch");
86+
request.setAttribute("searchName", searchName);
87+
request.setAttribute("searchValue", searchValue);
5088

89+
request.setAttribute("pageInfo", pageInfo);
90+
request.setAttribute("noticeList", noticeList);
5191
}
5292
}

0 commit comments

Comments
 (0)