본문 바로가기
프로젝트/자바 빈과 JSP만을 사용한 게시판 만들기

13장 Dao와 Vo

by IT여행자 2020. 5. 10.
728x90

본 포스팅에서 사용되는 자바 클래스들의 종류와 용도입니다.

 

클래스명 설명
BoardDao.java BoardController로 부터 요청사항을 전달받아 처리한 후 그 결과를 다시 BoardController에게 전달하는 클래스.
Page.java 게시물 목록을 볼 때 페이징 처리를 하기 위한 클래스
BoardVo.java 게시물 한 건에 대한 데이터 저장 클래스
AttVo.java 첨부파일 한 건에 대한 데이터 저장 클래스
DBConn.java 오라클 데이터베이스를 연결하기 위한 클래스
FileUpload.java 첨부파일을 업로드 하기위한 클래스
BoardController 사용자의 요청정보를 전달받아 BoardDao에 전달하고 처리된 결과를 BoardDao에게서 리턴받아 사용자에게 전달하는 클래스

각 클래스에 대한 필드와 메서드는 아래와 같습니다. 메서드의 내용은 앞으로 진행할 각 장에서 자세히 설명드리도록 하겠습니다.

 

BoardDao.java

 

BoardController로부터 요청받아 실제로 데이터베이스와 연동하여 CRUD를 처리하는 클래스.(CRUD:Create, Read, Update, Delete)

package bean;

import java.io.File;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class BoardDao {
	public BoardDao() {
	}
	
	//로그인/로그아웃 처리
	public boolean loginCheck(String mid, String pwd) {
	}
	
    // 게시판 저장 처리
	public String register(HttpServletRequest req) {
		String msg = "게시물이 저장되었습니다.";
		return msg;
	}
	
    // 게시판 답글 처리
	public String repl(HttpServletRequest req) {
		String msg = "댓글이 작성되었습니다.";
		return msg;
	}
	
    // 검색된 전체 행수 
	public Page getTotListSize(Page p) {
		
	}
	
    // 검색 처리
	public List<BoardVo> select(Page p) {
		List<BoardVo> list = new ArrayList<BoardVo>();
		return list;
	}

	// 상세보기 처리
	public BoardVo view(int serail, char mode) {
		String msg = ""; 
		BoardVo respVo = new BoardVo();
		List<AttVo> attList = null;
		return respVo;
	}
	
    // 수정된 내용 저장 처리
	public String modifyR(HttpServletRequest req) {
		String msg = "수정되었습니다.";
		return msg;
	}
	
	// 삭제 처리
	public String delete(int serial) {
		String msg = "삭제 되었습니다.";
		return msg;
	}
	
	
	// 첨부 파일 삭제
	public void deleteFile(List<AttVo> list) throws Exception{
	}
	
	// BoardVo 정보 생성
	public BoardVo setVo(ResultSet rs, char mode) throws Exception {
		BoardVo vo = new BoardVo();
		return vo;
	}
	
	// 첨부파일 정보 생성
	public AttVo setAttach(ResultSet rs) throws Exception {
		AttVo att = new AttVo();
		return att;
	}

}

 

Page.java

 

게시판 조회부분에서 페이징 처리를 하기 위한 전체 정보를 갖고 있는 클래스입니다. nowPage를 기준으로 pageCompute()에서 모든 변수의 값을 계산합니다.

package bean;

public class Page {
	int totListSize; //검색된 결과의 전체 건수
	int totPage;
	int listSize=20;
	int blockSize=5;
	int startNo;
	int endNo;
	int startPage;
	int endPage;
	
	int nowPage=1;
	String findStr ="";
	
	public Page() {}
	public Page(int tot, int now) {
		this.totListSize = tot;
		this.nowPage = now;
		pageCompute();
	}
	
	//페이지와 관련된 모든 변수 계산
	public void pageCompute() {
		totPage = (int)Math.ceil(totListSize/(double)listSize);
		endNo = nowPage * listSize;
		startNo = endNo-listSize+1;
		
		if(endNo>totListSize) endNo = totListSize;
		
		endPage = (int)Math.ceil(nowPage/(double)blockSize) * blockSize;
		startPage = endPage-blockSize+1;
		
		if(endPage>totPage) endPage = totPage;
		
	}
	
	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 getTotListSize() { return totListSize; }
	public void setTotListSize(int totListSize) { this.totListSize = totListSize; }
	public int getTotPage() { return totPage; }
	public void setTotPage(int totPage) { this.totPage = totPage; }
	public int getListSize() { return listSize; }
	public void setListSize(int listSize) { this.listSize = listSize; }
	public int getNowPage() { return nowPage; }
	public void setNowPage(int nowPage) { this.nowPage = nowPage; }
	public int getStartNo() { return startNo; }
	public void setStartNo(int startNo) { this.startNo = startNo; }
	public int getEndNo() { return endNo; }
	public void setEndNo(int endNo) { this.endNo = endNo; }
	public String getFindStr() { return findStr; }
	public void setFindStr(String findStr) { this.findStr = findStr; }
	public int getBlockSize() { return blockSize; }
	public void setBlockSize(int blockSize) { this.blockSize = blockSize; }

}

 

BoardVo.java

 

게시판 한건의 정보와 첨부파일들을 기억하는 클래스.

package bean;

import java.util.List;

public class BoardVo {
	// 데이블과 관련된 필드
	private int serial;
	private String worker = "";
	private String pwd = "";
	private String subject = "";
	private String content = "";
	private String mdate;
	private int hit;
	private int attCnt;
	
	List<AttVo> attList;

	public BoardVo() {
	}

	public int getSerial() { return serial; }  
	public void setSerial(int serial) { this.serial = serial; }  
	public String getContent() { return content; }  
	public void setContent(String content) { this.content = content; }  
	public String getMdate() { return mdate; }  
	public void setMdate(String mdate) { this.mdate = mdate; }  
	public String getWorker() { return worker; }  
	public void setWorker(String worker) { this.worker = worker; }  
	public String getPwd() { return pwd; }  
	public void setPwd(String pwd) { this.pwd = pwd; }  
	public String getSubject() { return subject; }  
	public void setSubject(String subject) { this.subject = subject; }  
	public int getHit() { return hit; }  
	public void setHit(int hit) { this.hit = hit; }  
	public List<AttVo> getAttList() { return attList; }  
	public void setAttList(List<AttVo> attList) { this.attList = attList; }
	public int getAttCnt() { return attCnt; }  
	public void setAttCnt(int attCnt) { this.attCnt = attCnt; }

}

AttVo.java

 

첨부파일 한건에 대한 정보를 저장하는 클래스.

package bean;

public class AttVo {
	int serial; // 자신의 순번
	int pSerial; // 본문글 번호
	String attFile; // 저장된 파일명
	String oriAttFile; // 사용자가 업로드한 파일명
	
	public int getSerial() { return serial; }
	public void setSerial(int serial) { this.serial = serial; }
	public int getpSerial() { return pSerial; }
	public void setpSerial(int pSerial) { this.pSerial = pSerial; }
	public String getAttFile() { return attFile; } 
	public void setAttFile(String attFile) { this.attFile = attFile; } 
	public String getOriAttFile() { return oriAttFile; } 
	public void setOriAttFile(String oriAttFile) { this.oriAttFile = oriAttFile; }
	
}

 

DBConn.java

 

오라클 데이터베이스와 연결하기 위한 클래스입니다. 연결 정보(driver, path, user, pwd)를 가지고 최종적으로 Connectioin 객체를 반환합니다.

 

package bean;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBConn {
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String path = "jdbc:oracle:thin:@127.0.0.1:1521:xe";
	private String user = "";
	private String pwd = "";

	private Connection conn;// DB의 연결 정보를 기억

	public DBConn() {
		this("jobtc", "1234");
	}

	public DBConn(String user, String pwd) {
		this.user = user;
		this.pwd = pwd;
		try {
			// 드라이버 로딩
			Class.forName(driver).newInstance();
			// DB 연결
			conn = DriverManager.getConnection(path, user, pwd);

		} catch (Exception ex) {
			ex.printStackTrace();
		}

	}

	public Connection getConn() {
		return conn;
	}
}

 

FileUpload.java

 

입력, 수정, 댓글 처리 부분에서 필수로 사용되어야 하는 클래스.

package bean;

import java.io.File;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class FileUpload {
	
	public FileUpload(HttpServletRequest req) {
    	//<form/> 정보 가져옴.
	}
	public boolean uploadFormCheck() {
    	// <form/>이 ectype='multipart/form-data'인지 체크
	}
	public HttpServletRequest uploading() {
	// 파일 업로드 및 처리 결과 저장
	}
}

 

BoardController.java

 

사용자 요청정보를 가장 먼저 받아들여 BoardDao의 적당한 메서드를 호출하고 그 결과를 다시 사용자에게 되돌려 주는 클래스.

package bean;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class BoardController {
	HttpServletRequest req;
	HttpServletResponse resp;
	BoardDao dao;
	
	public BoardController(HttpServletRequest req, HttpServletResponse resp) {
		
	}
	
	//login.jsp페이지에서 호출됨
	public void loginCheck() {
		// form 정보를 가져옴.
		String loginFlag = req.getParameter("loginFlag");
		String mid = req.getParameter("mid");
		String pwd = req.getParameter("pwd");

		// 요청 객체로 부터 세션을 가져옴.
		HttpSession session = req.getSession();
		
		if(loginFlag.equals("login")){
			boolean b = dao.loginCheck(mid, pwd);
			if(b) {
				//세션에 아이디 저장
				session.setAttribute("session_id", mid);
			}
			
		}else if(loginFlag.equals("logout")){
			// 세션에서 session_id 속성 제거
			session.removeAttribute("session_id");
		}
	}
	
	public void select() {
    // 조회 요청 처리
	}
	
	
	public void view() {
    // 상세보기 처리
	}
	
	public void register() {
	// 게시판 저장 처리	
	}
	
	public void modify() {
	// 수정 화면 처리		
	}
	
	public void modifyR() {
    // 수정 내용 저장 처리
	}
	
	public void deleteR() {
    // 삭제 처리
	}

	public void replR() {
    // 답글 처리
	}
	
	public Page getPage() {
		Page p = new Page();
        // 페이지 정보 처리
		return p;
	}
	
}

 

대부분의 메서드안의 내용은 이직 기술하지 않았습니다. 각 메서드의 내용은 앞으로 진행되는 각 단원에서 설명하도록 하겠습니다.