728x90
MVC, JSTL
수정, 삭제
public class BoardController extends HttpServlet{
RequestDispatcher dispatcher = null;
BoardService boardService = null;
(...생략...)
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("BoardController doProcess()");
String sPath = request.getServletPath();
(...생략...)
if(sPath.equals("/delete.bo")) {
request.setCharacterEncoding("utf-8");
System.out.println("가상주소 비교 /delete.bo 일치");
//delete.bo?num=
//request에서 "num"가져오기
int num = Integer.parseInt(request.getParameter("num"));
//BoardService 객체 생성
boardService = new BoardService();
boardService.deleteBoard(num);
//list.bo 글목록 주소 변경하면서 이동
response.sendRedirect("list.bo");
}
}//doProcess()
}//BoardController 클래스
public class BoardService {
BoardDAO boardDAO = null;
(...생략...)
public void deleteBoard(int num) {
System.out.println("BoardService deleteBoard()");
try {
boardDAO = new BoardDAO();
boardDAO.deleteBoard(num);
} catch (Exception e) {
e.printStackTrace();
}
}
}//BoardService클래스
<%@ 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>board/update.jsp</title>
</head>
<body>
<h1>board/update.jsp</h1>
<h1>게시판 글수정</h1>
<%
// // update.jsp?num=1
// // 서버에 request에 "num" 요청 파라미터값을 저장 => 가져와서 변수 int num 저장
// int num = Integer.parseInt(request.getParameter("num"));
// // BoardDAO 객체생성
// BoardDAO boardDAO = new BoardDAO();
// // BoardDTO boardDTO = getBoard(num) 메서드 호출
// BoardDTO boardDTO = boardDAO.getBoard(num);
%>
<c:set var="boardDTO" value="${requestScope.boardDTO }"/>
<form action="updatePro.bo" method="post">
<input type="hidden" name="num" value="${boardDTO.num}">
<table border="1">
<tr><td>글쓴이</td>
<td><input type="text" name="name" value="${boardDTO.name }" readonly></td></tr>
<tr><td>글제목</td>
<td><input type="text" name="subject" value="${boardDTO.subject}"></td></tr>
<tr><td>글내용</td>
<td><textarea name="content" rows="10" cols="20">${boardDTO.content}</textarea></td></tr>
<tr><td colspan="2"><input type="submit" value="글수정"></td></tr>
</table>
</form>
</body>
</html>
<%@ 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>board/delete.jsp</title>
</head>
<body>
<h1>board/delete.jsp</h1>
<h1>게시판 글삭제</h1>
<%
// delete.jsp?num=1
// 서버에 request에 "num" 요청 파라미터값을 저장 => 가져와서 변수 int num 저장
// int num = Integer.parseInt(request.getParameter("num"));
// BoardDAO 객체생성
// BoardDAO boardDAO = new BoardDAO();
// 리턴할형없음 deleteBoard(int num) 메서드 정의
// deleteBoard(num) 메서드 호출
// boardDAO.deleteBoard(num);
// list.jsp 글목록으로 이동
// response.sendRedirect("list.jsp");
%>
</body>
</html>
페이징 알고리즘
게시판 자르기(5개, 10개, 20개,..)
PageDTO : 페이징 관련 자료를 담는 그릇
package com.mystroy001.mvcproject.domain;
public class PageDTO {
private int pageSize; //글의 개수
private int currentPage;
private String pageNum;
private int startRow; //시작하는 행 번호
private int endRow; //끝나는 행 번호
private int pageBlock; //한 화면에 보여줄 페이지 개수
private int startPage;
private int endPage;
private int count; //전체 글의 개수
private int pageCount; //전체 페이지 개수
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getCurrentPage() {
return currentPage;
}
public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}
public String getPageNum() {
return pageNum;
}
public void setPageNum(String pageNum) {
this.pageNum = pageNum;
}
public int getStartRow() {
return startRow;
}
public void setStartRow(int startRow) {
this.startRow = startRow;
}
public int getEndRow() {
return endRow;
}
public void setEndRow(int endRow) {
this.endRow = endRow;
}
public int getPageBlock() {
return pageBlock;
}
public void setPageBlock(int pageBlock) {
this.pageBlock = pageBlock;
}
public int getStartPage() {
return startPage;
}
public void setStartPage(int startPage) {
this.startPage = startPage;
}
public int getEndPage() {
return endPage;
}
public void setEndPage(int endPage) {
this.endPage = endPage;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
public int getPageCount() {
return pageCount;
}
public void setPageCount(int pageCount) {
this.pageCount = pageCount;
}
}
BoardController
(...생략...)
if(sPath.equals("/list.bo")) {
System.out.println("가상주소 비교 /list.bo 일치");
//http://localhost:8080/MVCProject/list.bo
//모든 게시판 1페이지
//http://localhost:8080/MVCProject/list.bo?pageNum=2
//한 페이지에 보여줄 글 개수 설정 10
int pageSize = 10;
//현 페이지 번호 가져오기
String pageNum = request.getParameter("pageNum");
//현 페이지 번호가 없으면(null이면) "1"페이지로 설정
if(pageNum==null) {
pageNum = "1";
}
//페이지 번호를 정수형으로 변경해서 계산
int currentPage = Integer.parseInt(pageNum);
//PageDTO 객체 생성
//pageSize, pageNum, currentPage 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
// BoardService 객체생성
boardService = new BoardService();
// ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardService.getBoardList();
ArrayList<BoardDTO> boardList = boardService.getBoardList(pageDTO);
// request 에 "boardList", boardList 담아서
request.setAttribute("boardList", boardList);
// board/list.jsp 주소변경없이 이동
dispatcher =request.getRequestDispatcher("board/list.jsp");
dispatcher.forward(request, response);
}//
(...생략...)
BoardService
(...생략...)
public ArrayList<BoardDTO> getBoardList(PageDTO pageDTO) {
System.out.println("BoardService getBoardList()");
ArrayList<BoardDTO> boardList = null;
try {
int pageSize = pageDTO.getPageSize();
int currentPage = pageDTO.getCurrentPage();
//시작하는 행 번호 구하기
//currentPage pageSize로 startRow가 나오게
// 1 10 => 0*10+1 => 0+1 => 1
// 2 10 => 1*10+1 => 10+1 => 11
// 3 10 => 2*10+1 => 20+1 => 21
int startRow = (currentPage-1)* pageSize + 1;
//끝나는 행 번호 구하기(오라클에서 필요함)
//startRow pageSize로 endRow가 나오게
// 1 10 => 1+10-1 => 10
// 11 10 => 11+10-1 => 20
// 21 10 => 21+10-1 => 30
int endRow = startRow -1 + pageSize;
//pageDTO 주소에 저장
pageDTO.setStartRow(startRow);
pageDTO.setEndRow(endRow);
// BoardDAO 객체생성
boardDAO = new BoardDAO();
// boardList = getBoardList() 메서드 호출
// boardList = boardDAO.getBoardList();
boardList = boardDAO.getBoardList(pageDTO);
} catch (Exception e) {
e.printStackTrace();
}
return boardList;
}
(...생략...)
BoardDAO
(...생략...)
public ArrayList<BoardDTO> getBoardList(PageDTO pageDTO) {
System.out.println("BoardDAO getBoardList()");
ArrayList<BoardDTO> boardList = new ArrayList<BoardDTO>();
try {
//1,2 단계 디비연결 메서드 호출
con = getConnection();
// 3단계 : 연결정보를 이용해서 sql구문을 만들고 실행할수 있는 객체생성
// select * from board order by num desc limit 시작행 -1, 글 개수
//limit 키워드 => 개수 제한 limit 시작위치, 반환개수
String sql = "select * from board order by num desc limit ?, ?";
pstmt = con.prepareStatement(sql);
pstmt.setInt(1, pageDTO.getStartRow()-1); //시작행 - 1
pstmt.setInt(2, pageDTO.getPageSize());//글 개수
// 4단계 : sql구문 실행 => 실행 후 결과 저장(select)=> ResultSet 내장객체 저장
rs = pstmt.executeQuery();
// 5단계 : 결과를 이용해서 출력, 다른곳에 저장(select)
// while 커서를 다음행 이동 => 리턴값 데이터 있으면 true
// => BoardDTO 객체생성=>set(디비열 데이터)
// => boardList 배열 한칸에 BoardDTO의 주소 저장
while(rs.next()) {
BoardDTO boardDTO = new BoardDTO();
boardDTO.setNum(rs.getInt("num"));
boardDTO.setName(rs.getString("name"));
boardDTO.setSubject(rs.getString("subject"));
boardDTO.setContent(rs.getString("content"));
boardDTO.setReadcount(rs.getInt("readcount"));
boardDTO.setDate(rs.getTimestamp("date"));
// => boardList 배열 한칸에 BoardDTO의 주소 저장
boardList.add(boardDTO);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
//마무리
dbClose();
}
return boardList;
}
(...생략...)
수동으로 게시판 번호 넣어주기
<%@ 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>board/list.jsp</title>
</head>
<body>
<%
// // BoardDAO 객체생성
// BoardDAO boardDAO = new BoardDAO();
// // ArrayList<BoardDTO> 리턴할형 getBoardList() 메서드 정의
// // ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardDAO.getBoardList();
%>
<h1><a href="write.bo">글쓰기</a></h1>
<h1>board/list.jsp</h1>
<h1>게시판 글목록</h1>
<table border="1">
<tr><td>글번호</td><td>글쓴이</td><td>제목</td>
<td>조회수</td><td>작성일</td></tr>
<%
// for(int i=0; i<boardList.size(); i++){
// BoardDTO boardDTO = boardList.get(i);
%>
<%-- <tr><td><%=boardDTO.getNum() %></td> --%>
<%-- <td><%=boardDTO.getName() %></td> --%>
<%-- <td><a href="content.jsp?num=<%=boardDTO.getNum() %>"><%=boardDTO.getSubject() %></a></td> --%>
<%-- <td><%=boardDTO.getReadcount() %></td> --%>
<%-- <td><%=boardDTO.getDate() %></td> --%>
<!-- </tr> -->
<%
// }
%>
<c:set var="boardList" value="${requestScope.boardList}"/>
<c:forEach var="boardDTO" items="${boardList }">
<tr><td>${boardDTO.num}</td>
<td>${boardDTO.name}</td>
<td><a href="content.bo?num=${boardDTO.num}">
${boardDTO.subject}</a></td>
<td>${boardDTO.readcount}</td>
<td>${boardDTO.date}</td>
</tr>
</c:forEach>
<a href="main.me">메인으로 이동</a><br>
</table>
<a href="list.bo?pageNum=1">1</a>
<a href="list.bo?pageNum=2">2</a>
<a href="list.bo?pageNum=3">3</a>
</body>
</html>
BoardDAO
public int getBoardCount() {
System.out.println("BoardDAO getBoardCount()");
int count = 0;
try {
con = getConnection();
String sql = "select count(*) from board ";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
if(rs.next()) {
count=rs.getInt("count(*)");
}
} catch (Exception e) {
e.printStackTrace();
}finally {
dbClose();
}
return count;
}
BoardService
public int getBoardCount() {
System.out.println("BoardService getBoardCount()");
int count = 0;
try {
//BoardDAO 객체 생성
boardDAO = new BoardDAO();
//count = getBoardCount()메소드 호출 count(*)
count = boardDAO.getBoardCount();
} catch (Exception e) {
e.printStackTrace();
}
return count;
}
BoardController
if(sPath.equals("/list.bo")) {
System.out.println("가상주소 비교 /list.bo 일치");
//http://localhost:8080/MVCProject/list.bo
//모든 게시판 1페이지
//http://localhost:8080/MVCProject/list.bo?pageNum=2
//한 페이지에 보여줄 글 개수 설정 10
int pageSize = 10;
//현 페이지 번호 가져오기
String pageNum = request.getParameter("pageNum");
//현 페이지 번호가 없으면(null이면) "1"페이지로 설정
if(pageNum==null) {
pageNum = "1";
}
//페이지 번호를 정수형으로 변경해서 계산
int currentPage = Integer.parseInt(pageNum);
//PageDTO 객체 생성
//pageSize, pageNum, currentPage 저장
PageDTO pageDTO = new PageDTO();
pageDTO.setPageSize(pageSize);
pageDTO.setPageNum(pageNum);
pageDTO.setCurrentPage(currentPage);
// BoardService 객체생성
boardService = new BoardService();
// ArrayList<BoardDTO> boardList = getBoardList() 메서드 호출
// ArrayList<BoardDTO> boardList = boardService.getBoardList();
ArrayList<BoardDTO> boardList = boardService.getBoardList(pageDTO);
//페이징 작업
//전체 글 개수 구하기
//int count = getBoardCount() 메소드 호출
int count = boardService.getBoardCount();
//pageDTO에 값을 저장
pageDTO.setCount(count);
//request에 "pageDTO" 저장
request.setAttribute("pageDTO", pageDTO);
// request 에 "boardList", boardList 담아서
request.setAttribute("boardList", boardList);
// board/list.jsp 주소변경없이 이동
dispatcher =request.getRequestDispatcher("board/list.jsp");
dispatcher.forward(request, response);
}//
728x90
'KDT > WEB' 카테고리의 다른 글
240122 WEB - SPRING2(환경설정, 가상주소매핑) (0) | 2024.01.22 |
---|---|
240118 WEB - JSP25(MVC, JSTL, 페이지), SPRING 1(설치, 환경설정) (0) | 2024.01.18 |
240115 WEB - JSP23(MVC, JSTL) (0) | 2024.01.15 |
240112 WEB - JSP22(MVC, JSTL) (0) | 2024.01.12 |
240111 WEB - JSP21(MVC, JSTL) (0) | 2024.01.11 |