1. 보려는 page = 현재페이지 2. total 게시물 = DB 3. page 내 게시물 수 = utilities 4. pageGroup 내 page = utilites
◀ -> 이전 page group 유무 1 2 3 4 5 ->현재 page가 속한 page Group을 알아야 한다. 이를 바탕으로 시작 page와 끝 page를 알아낸다. 그후 시작~끝까지 루프를 돌려 알아낸다. ▶ -> 다음 page group의 유무(있으면 Link를 걸고, 없으면 Link를 걸면 안된다.)
* 위의 작업을 list.jsp에서 해야하는데 이 작업은 공통이기 때문에 계산을 bean(pagingDTO.java)에서 처리하고 list.jsp에서는 가져다 쓴다.
import board.util.Utilities; //totalContent -> 게시물수 - 201 //currentPage -> 보려는 page - 5 //contentPerPage -> page에 보여줄 컨텐츠 수 - 10 //pagePerPageGroup -> page내 page 수 - 5 /** * 페이징 처리위한 bean <br> * page : 게시물 묶음 * page group : page 묶음 * @author kgmyh * */ public class PagingDTO { /** * 총 데이터(게시물)의 개수 */ private int totalContent; /** * 현재 페이지 */ private int currentPage; /** * 한 페이지에 보여질 데이터(게시물)개수 */ private int contentsPerPage = Utilities.CONTENT_PER_PAGE; //5 /** * Page Group 내 Page 수. 페이지 그룹에 들어갈 페이지 개수 */ private int pagePerPagegroup = Utilities.PAGE_PER_PAGEGROUP; //10
/** * 총 데이터(게시물) 개수, 현재 페이지를 받아 member variable에 할당 * @param totalContent * @param currentPage */ public PagingDTO(int totalContent, int nowPage){ this.totalContent = totalContent; this.currentPage = nowPage; } /** * 현재 페이지 return * @return */ public int getCurrentPage() { return currentPage; } /** * 현재 페이지 setting * @param nowPage */ public void setCurrentPage(int nowPage) { this.currentPage = nowPage; }
/*************************************************************************** * 아래 메소드들을 구현하시오. ****************************************************************************/
/** * 총 페이지 수를 return한다.<br> * 1. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 => 0 이면 둘을 / 값이 총 페이지 수<br> * 2. 전체 데이터(게시물) % 한 페이지에 보여줄 데이터 개수 => 0보다 크면 둘을 / 값에 +1을 한 값이 총 페이지 수 * @return */ private int getTotalPage(){ int totalPage = 0;
if((this.totalContent%this.contentsPerPage)==0){ totalPage = this.totalContent / this.contentsPerPage; }else if((this.totalContent%this.contentsPerPage)>0){ totalPage = this.totalContent / this.contentsPerPage +1; } return totalPage; } /** * 총 페이지 그룹의 수를 return한다.<br> * 1. 총 페이지수 % Page Group 내 Page 수. => 0 이면 둘을 / 값이 총 페이지 수<br> * 2. 총 페이지수 % Page Group 내 Page 수. => 0보다 크면 둘을 / 값에 +1을 한 값이 총 페이지 수 * @return */ private int getTotalPageGroup(){
int totalPageGoup = 0; if((this.getTotalPage()%this.pagePerPagegroup)==0){ totalPageGoup = this.getTotalPage() / this.pagePerPagegroup; }else if((this.getTotalPage()%this.pagePerPagegroup)>0){ totalPageGoup = this.getTotalPage() / this.pagePerPagegroup +1; } return totalPageGoup; } /** * 현재 페이지가 속한 페이지 그룹 번호(몇 번째 페이지 그룹인지) 을 return 하는 메소드 * 1. 현재 페이지 % Page Group 내 Page 수 => 0 이면 둘을 / 값이 현재 페이지 그룹. * 2. 현재 페이지 % Page Group 내 Page 수 => 0 크면 둘을 / 값에 +1을 한 값이 현재 페이지 그룹 * @return */ private int getCurrentPageGroup(){
int currentPageGroup = 0; if((this.currentPage%this.pagePerPagegroup)==0){ currentPageGroup = this.currentPage / this.pagePerPagegroup; }else if((this.currentPage%this.pagePerPagegroup)>0){ currentPageGroup = this.currentPage / this.pagePerPagegroup +1; } return currentPageGroup; } /** * 현재 페이지가 속한 페이지 그룹의 시작 페이지 번호를 return 한다.<br> * 1. Page Group 내 Page 수*(현재 페이지 그룹 -1) + 1을 한 값이 첫 페이지이다.(페이지 그룹*페이지 그룹 개수 이 그 그룹의 마지막 번호이므로) * 2. 위의 계산 결과가 0인 경우는 첫페이지 이므로 1을 return 한다. * @return */ public int getStartPageOfPageGroup(){ int startPageNo = 0; int currentPageGroup = this.getCurrentPageGroup(); startPageNo = pagePerPagegroup*(currentPageGroup-1)+1; if(startPageNo==0){ startPageNo = 1; }
return startPageNo; } /** * 현재 페이지가 속한 페이지 그룹의 마지막 페이지 번호를 return 한다.<br> * 1. 현재 페이지 그룹 * 페이지 그룹내 페이지 수 가 마지막 번호이다. * 2. 그 그룹의 마지막 페이지 번호가 전체 페이지의 마지막 페이지 번호보다 큰 경우는 전체 페이지의 마지막 번호를 return 한다. * @return */ public int getEndPageOfPageGroup(){ int endPageNo = this.getCurrentPageGroup() * pagePerPagegroup; if(endPageNo>getTotalPage()){ //마지막 page가 총 page수 보다 크다면 endPageNo = getTotalPage(); } return endPageNo; } /** * 이전 페이지 그룹이 있는지 체크 * 현재 페이지가 속한 페이지 그룹이 1보다 크면 true * @return */ public boolean isPreviousPageGroup(){ boolean flag = false; if(this.getCurrentPageGroup()!=1){//현재 pagegroup이 1이 아니면 flag = true; } return flag; } /** * 다음 페이지 그룹이 있는지 체크 * 현재 페이지 그룹이 마지막 페이지 그룹(마지막 페이지 그룹 == 총 페이지 그룹 수) 보다 작으면 true * @return */ public boolean isNextPageGroup(){ boolean flag = false; if(this.getCurrentPageGroup()<this.getTotalPageGroup()){ flag = true; } return flag; } /* 테스트 용 메인 메소드 */ public static void main(String[] args) { PagingDTO d = new PagingDTO(201, 5);//총 201개 게시물, 현재page : 5 //page내 게시물수 - 5 //page그룹내 page수 - 10 System.out.println("총 page 수 : "+d.getTotalPage()); //41 System.out.println("총 page그룹 : "+d.getTotalPageGroup());//5 System.out.println("현 페이지 그룹 : "+d.getCurrentPageGroup());//1 System.out.println("첫 page : "+d.getStartPageOfPageGroup());//1 System.out.println("마지막 page : "+d.getEndPageOfPageGroup());//10 System.out.println("이전 page그룹 존재 ? : "+d.isPreviousPageGroup());//false System.out.println("다음 page그룹 존재 ? : "+d.isNextPageGroup());//true
create table board( no number, title varchar2(150) not null, writer varchar2(30) not null, content varchar2(4000) not null, writedate varchar2(14) not null, viewcount number not null, --답변과 관련된 속성 refamily number not null, restep number not null, relevel number not null, constraint board_pk primary key(no) )
2. 시퀀스(게시글번호)를 위해 시퀀스 번호를 생성한다.
select board_no_seq.nextval from dual;
3. 데이터 값을 담아둘 dto를 만든다.
board.dto
package board.dto;
public class BoardDTO { private int no; private String title; private String writer; private String content; private String writedate; private int viewcount; private int refamily; private int restep; private int relevel; public BoardDTO() { super(); }
public int getNo() { return no; } public void setNo(int no) { this.no = no; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getWritedate() { return writedate; } public void setWritedate(String writedate) { this.writedate = writedate; } public int getViewcount() { return viewcount; } public void setViewcount(int viewcount) { this.viewcount = viewcount; } public int getRefamily() { return refamily; } public void setRefamily(int refamily) { this.refamily = refamily; } public int getRestep() { return restep; } public void setRestep(int restep) { this.restep = restep; } public int getRelevel() { return relevel; } public void setRelevel(int relevel) { this.relevel = relevel; } @Override public String toString() { return "BoardDTO [no=" + no + ", title=" + title + ", writer=" + writer + ", content=" + content + ", writedate=" + writedate + ", viewcount=" + viewcount + ", refamily=" + refamily + ", restep=" + restep + ", relevel=" + relevel + "]"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((content == null) ? 0 : content.hashCode()); result = prime * result + no; result = prime * result + refamily; result = prime * result + relevel; result = prime * result + restep; result = prime * result + ((title == null) ? 0 : title.hashCode()); result = prime * result + viewcount; result = prime * result + ((writedate == null) ? 0 : writedate.hashCode()); result = prime * result + ((writer == null) ? 0 : writer.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; BoardDTO other = (BoardDTO) obj; if (content == null) { if (other.content != null) return false; } else if (!content.equals(other.content)) return false; if (no != other.no) return false; if (refamily != other.refamily) return false; if (relevel != other.relevel) return false; if (restep != other.restep) return false; if (title == null) { if (other.title != null) return false; } else if (!title.equals(other.title)) return false; if (viewcount != other.viewcount) return false; if (writedate == null) { if (other.writedate != null) return false; } else if (!writedate.equals(other.writedate)) return false; if (writer == null) { if (other.writer != null) return false; } else if (!writer.equals(other.writer)) return false; return true; }
}
package board.dto;
public class BoardDTO { private int no; private String title; private String writer; private String content; private String writedate; private int viewcount; private int refamily; private int restep; private int relevel; public BoardDTO() { super(); }
public class Utilities { //글목록에서 한페이지에 보여질 게시물의 개수 public static final int CONTENT_PER_PAGE = 10; //한 페이지 그룹으로 묶을 페이지의 개수 public static final int PAGE_PER_PAGEGROUP = 10; //생성자( Utilities객체의 메소드가 전부 static이어서 객체를 생성할 필요가 없어서 생성자를 private로 막았다. ) private Utilities(){
<%@ 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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body>
<c:if test="${requestScope.error_message!=null }"> 실행 도중 오류가 발생했습니다.<br> 오류 내용 ${error_message } </c:if> <a href='/${initParam.context_root }/show_content.jsp'>메인페이지로 이동</a> </body> </html>
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; }
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
public class BoardService { private static BoardService instance = new BoardService(); private BoardDAO dao; private BoardService(){ dao = BoardDAO.getInstance(); } public static BoardService getInstance(){ return instance; } public void writeContent(BoardDTO bto)throws SQLException{ /* * 1. bto에 property 설정 - no, writedate, content * no - sequence의 값 - dao.selectBoardNO(); * writedate - Utilities.getNow(); * content를 DB에 넣는 용으로 변경 Utilities.changeContentForDB(); * bdto의 refamily에 no 값을 설정 * 2. dao.insertContent(bto); * 3. 날짜 형태를 년.월.일 시:분:초 형태로 변경 - bto의 property 변경 * Utilities.changeDayTimeFormat(); */ //1 int no = dao.selectBoardNo(); String writedate = Utilities.getNow(); bto.setNo(no); bto.setWritedate(writedate); bto.setContent(Utilities.changeContentForDB(bto.getContent())); bto.setRefamily(no); //2 dao.insertContent(bto); //3 bto.setWritedate(Utilities.changeDayTimeFormat(writedate)); } //글목록 public ArrayList<BoardDTO> getBoardAllList() throws SQLException{ //1. dao로 부터 전체 글내용을 ArrayList로 조회 ArrayList<BoardDTO> list_all = dao.selectBoardAllList(); //2. list내의 BoardDTO객체들의 wrtiedate를 변경 for(int i=0;i<list_all.size();i++){ list_all.get(i).setWritedate(Utilities.changeDayFormat(list_all.get(i).getWritedate())); } return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no); } }
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no);
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no);
} public void replyContent(BoardDTO bto)throws SQLException { //1. DB에 같은 refamily의 restep들을 1씩 증가 시킨다. dao.updateRestep(bto.getRefamily(),bto.getRestep()); //2. bdto의 restep, relevel을 1 증가 시킨다. bto.setRestep(bto.getRestep()+1); bto.setRelevel(bto.getRelevel()+1); //3. insert할 글 번호를 가져온뒤 bto에 넣는다. int no = dao.selectBoardNo(); //4. BoardDTO에 no, writeDate와 content는 DB 저장용으로 변경한다. bto.setNo(no); bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //5. 새글 등록 - dao.insertContent()이용 dao.insertContent(bto); //6. 날짜 형태 show_content.jsp에서 보여주도록 년.월.일 시:분:초 로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no);
return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no);
} public void replyContent(BoardDTO bto)throws SQLException { //1. DB에 같은 refamily의 restep들을 1씩 증가 시킨다. dao.updateRestep(bto.getRefamily(),bto.getRestep()); //2. bdto의 restep, relevel을 1 증가 시킨다. bto.setRestep(bto.getRestep()+1); bto.setRelevel(bto.getRelevel()+1); //3. insert할 글 번호를 가져온뒤 bto에 넣는다. int no = dao.selectBoardNo(); //4. BoardDTO에 no, writeDate와 content는 DB 저장용으로 변경한다. bto.setNo(no); bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //5. 새글 등록 - dao.insertContent()이용 dao.insertContent(bto); //6. 날짜 형태 show_content.jsp에서 보여주도록 년.월.일 시:분:초 로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
public class BoardService { private static BoardService instance = new BoardService(); private BoardDAO dao; private BoardService(){ dao = BoardDAO.getInstance(); } public static BoardService getInstance(){ return instance; } public void writeContent(BoardDTO bto)throws SQLException{ /* * 1. bto에 property 설정 - no, writedate, content * no - sequence의 값 - dao.selectBoardNO(); * writedate - Utilities.getNow(); * content를 DB에 넣는 용으로 변경 Utilities.changeContentForDB(); * bdto의 refamily에 no 값을 설정 * 2. dao.insertContent(bto); * 3. 날짜 형태를 년.월.일 시:분:초 형태로 변경 - bto의 property 변경 * Utilities.changeDayTimeFormat(); */ //1 int no = dao.selectBoardNo(); String writedate = Utilities.getNow(); bto.setNo(no); bto.setWritedate(writedate); bto.setContent(Utilities.changeContentForDB(bto.getContent())); bto.setRefamily(no); //2 dao.insertContent(bto); //3 bto.setWritedate(Utilities.changeDayTimeFormat(writedate)); } //글목록 public ArrayList<BoardDTO> getBoardAllList() throws SQLException{ //1. dao로 부터 전체 글내용을 ArrayList로 조회 ArrayList<BoardDTO> list_all = dao.selectBoardAllList(); //2. list내의 BoardDTO객체들의 wrtiedate를 변경 for(int i=0;i<list_all.size();i++){ list_all.get(i).setWritedate(Utilities.changeDayFormat(list_all.get(i).getWritedate())); } return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{ //1. no값으로 글 조회 BoardDTO bto = dao.selectContentByNO(no); //2. content를 textarea용으로 변경(DB용으로 바뀌어 있는 것을 HTML용으로 변경) bto.setContent(Utilities.changeContentForTextArea(bto.getContent())); System.out.println("가져올때-----------\n"+bto.getContent()); return bto; } public void modifyContent(BoardDTO bto)throws SQLException { //1. property변경 - content, writedate bto.setWritedate(Utilities.getNow()); bto.setContent(Utilities.changeContentForDB(bto.getContent())); //2. 수정처리 dao.updateContent(bto); //3. 날짜 포멧 변경 bto.setWritedate(Utilities.changeDayTimeFormat(Utilities.getNow()));
}
public void deleteContentByNO(int no)throws SQLException{ dao.deleteContentByNO(no);
public class BoardService { private static BoardService instance = new BoardService(); private BoardDAO dao; private BoardService(){ dao = BoardDAO.getInstance(); } public static BoardService getInstance(){ return instance; } public void writeContent(BoardDTO bto)throws SQLException{ /* * 1. bto에 property 설정 - no, writedate, content * no - sequence의 값 - dao.selectBoardNO(); * writedate - Utilities.getNow(); * content를 DB에 넣는 용으로 변경 Utilities.changeContentForDB(); * bdto의 refamily에 no 값을 설정 * 2. dao.insertContent(bto); * 3. 날짜 형태를 년.월.일 시:분:초 형태로 변경 - bto의 property 변경 * Utilities.changeDayTimeFormat(); */ //1 int no = dao.selectBoardNo(); String writedate = Utilities.getNow(); bto.setNo(no); bto.setWritedate(writedate); bto.setContent(Utilities.changeContentForDB(bto.getContent())); bto.setRefamily(no); //2 dao.insertContent(bto); //3 bto.setWritedate(Utilities.changeDayTimeFormat(writedate)); } //글목록 public ArrayList<BoardDTO> getBoardAllList() throws SQLException{ //1. dao로 부터 전체 글내용을 ArrayList로 조회 ArrayList<BoardDTO> list_all = dao.selectBoardAllList(); //2. list내의 BoardDTO객체들의 wrtiedate를 변경 for(int i=0;i<list_all.size();i++){ list_all.get(i).setWritedate(Utilities.changeDayFormat(list_all.get(i).getWritedate())); } return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{
public class BoardService { private static BoardService instance = new BoardService(); private BoardDAO dao; private BoardService(){ dao = BoardDAO.getInstance(); } public static BoardService getInstance(){ return instance; } public void writeContent(BoardDTO bto)throws SQLException{ /* * 1. bto에 property 설정 - no, writedate, content * no - sequence의 값 - dao.selectBoardNO(); * writedate - Utilities.getNow(); * content를 DB에 넣는 용으로 변경 Utilities.changeContentForDB(); * bdto의 refamily에 no 값을 설정 * 2. dao.insertContent(bto); * 3. 날짜 형태를 년.월.일 시:분:초 형태로 변경 - bto의 property 변경 * Utilities.changeDayTimeFormat(); */ //1 int no = dao.selectBoardNo(); String writedate = Utilities.getNow(); bto.setNo(no); bto.setWritedate(writedate); bto.setContent(Utilities.changeContentForDB(bto.getContent())); bto.setRefamily(no); //2 dao.insertContent(bto); //3 bto.setWritedate(Utilities.changeDayTimeFormat(writedate)); } //글목록 public ArrayList<BoardDTO> getBoardAllList() throws SQLException{ //1. dao로 부터 전체 글내용을 ArrayList로 조회 ArrayList<BoardDTO> list_all = dao.selectBoardAllList(); //2. list내의 BoardDTO객체들의 wrtiedate를 변경 for(int i=0;i<list_all.size();i++){ list_all.get(i).setWritedate(Utilities.changeDayFormat(list_all.get(i).getWritedate())); } return list_all; } public BoardDTO getContentByNO(int no) throws SQLException{
//1.조회수 증가 dao.updateViewCount(no); //2. no로 글 정보 조회 BoardDTO bto = dao.selectContentByNO(no); //2-1 writedate를 yyy.MM.dd HH:mm:ss 형식으로 변경 bto.setWritedate(Utilities.changeDayTimeFormat(bto.getWritedate()));
return bto; } public BoardDTO getContentByNOForForm(int no)throws SQLException{
public class WriteContentController implements Controller{
//controller에서는 클라이언트가 보낸 값을 읽어서 비지니스 로직단에 넘겨주고, 비지니스 서비스 쪽에서 DB에서 값을 얻어오고 초기 값을 설정해 준다. @Override public ForwardDTO execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //1, client가 보낸 요청 파라미터 조회 String title = request.getParameter("title"); String writer = request.getParameter("writer"); String content = request.getParameter("content"); BoardDTO bto = new BoardDTO(title, writer, content); //2. 비지니스 로직 - Model(Business Service)로 요청 BoardService boardService = BoardService.getInstance(); ForwardDTO forwardDTO = null; try { boardService.writeContent(bto); request.setAttribute("board",bto); forwardDTO = new ForwardDTO("/show_content.jsp",false); } catch (SQLException e) { e.printStackTrace(); request.setAttribute("error_message", e.getMessage()); forwardDTO = new ForwardDTO("/error.jsp",false); }
return forwardDTO; }
}
* dto
package board.dto;
public class BoardDTO { private int no; private String title; private String writer; private String content; private String writedate; private int viewcount; private int refamily; private int restep; private int relevel; public BoardDTO() { super(); }
public class Utilities { //글목록에서 한페이지에 보여질 게시물의 개수 public static final int CONTENT_PER_PAGE = 10; //한 페이지 그룹으로 묶을 페이지의 개수 public static final int PAGE_PER_PAGEGROUP = 10; //생성자( Utilities객체의 메소드가 전부 static이어서 객체를 생성할 필요가 없어서 생성자를 private로 막았다. ) private Utilities(){
Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");//new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
return simpleDateFormat.format(date); } /** * 인수로 14자리 형태 일시를 받아 날짜만 yyyy.MM.dd 형태의 String으로 만들어 return * - 목록에서 작성일시를 보여줄때 사용할 메소드 * 예) 20120512100524 -> 2012.05.12 * @param dateTime * @return */ public static String changeDayFormat(String dateTime){
return dateTime.substring(0, 4)+"."+dateTime.substring(4, 6)+"."+dateTime.substring(6, 8); // SimpleDateFormat sf = new SimpleDateFormat("yyyy.MM.dd"); // String changeDay = sf.format(dateTime); //이렇게 하면 넘어오는 dateTime이 String값이어서 실행시점에 에러가 난다. sf.format(dateTime)의 dateTime은 Date객체가 들어가야 한다. // // return changeDay; } /** * 인수로 14자리 형태의 일시를 받아 yyyy.MM.dd HH:mm:ss 형태의 String으로 만들어 return * - 글 상세보기에서 사용할 메소드 * 예)20120512100524 -> 2012.05.12 10:05:24 * @param dateTime * @return */ public static String changeDayTimeFormat(String dateTime){
return dateTime.substring(0, 4)+"."+dateTime.substring(4, 6)+"."+dateTime.substring(6, 8)+" "+dateTime.substring(8, 10)+":"+dateTime.substring(10, 12)+":"+ dateTime.substring(12, 14); } /** * TextArea에서 입력 받은 글 내용을 HTML로 출력 될 때에 맞는 형식으로 변경하는 메소드 * 새글등록, 답변글등록, 글 수정시 사용 * > - > * < - < * \n - <br> * 공백 - */ public static String changeContentForDB(String content){ //변환 시 순서가 중요 String newContent = content.replaceAll(">", ">");
//3. 공통 사후 작업 if(fdto.isRedirect()){ response.sendRedirect(fdto.getUrl()); }else{ RequestDispatcher rdp = request.getRequestDispatcher(fdto.getUrl()); rdp.forward(request, response); } }
public class BoardDTO { private int no; private String title; private String writer; private String content; private String writedate; private int viewcount; private int refamily; private int restep; private int relevel; public BoardDTO() { super(); }
public class Utilities { //글목록에서 한페이지에 보여질 게시물의 개수 public static final int CONTENT_PER_PAGE = 10; //한 페이지 그룹으로 묶을 페이지의 개수 public static final int PAGE_PER_PAGEGROUP = 10; //생성자( Utilities객체의 메소드가 전부 static이어서 객체를 생성할 필요가 없어서 생성자를 private로 막았다. ) private Utilities(){