게시판 만들기 7

msriver·2020년 6월 2일
1

JSP&Servlet

목록 보기
8/13

🆗 현재까지 한것

  • DB에 게시글 데이터를 담아 사용하기 위해 board 테이블을 생성 및 샘플데이타 추가
  • DBCP 추가
  • DTO 만들기(=VO클래스=자바빈클래스)
  • jstl라이브러리 추가
  • BoardDAO클래스 생성, DBManager클래스 생성
  • Action인터페이스 생성, ActionFactory클래스 생성, BoardServlet생성

💡 진행방향

  • 지금부터 게시판 형태를 직접 눈으로 확인 할 수 있을것 같다.
  • 게시글의 전체 리스트를 불러오는 작업을 하려 한다.
  • 시작을 알리는 index.jsp 페이지를 하나 만든다. 웹 어플리케이션 실행시 자동으로 나오는 페이지이다. 이것은 web.xml파일에 welcome-file-list 태그안에 등록되어 있다.
  • 작업순서는 뒷단부터 시작한다. 즉 DB단부터 모델, 컨트롤러, 뷰 순서로 작업을 진행하겠다.
  • 먼저 DAO에 메서드를 등록하고, 해당 Action클래스를 만들어 ActionFactory에 등록시킨다. 이후 jsp페이지를 작성

index.jsp 생성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="BoardServlet?command=board_list">게시판 이동!</a>
</body>
</html>

모든 요청은 Servlet으로 가도록 한다. a태그의 href속성에도 Servlet으로 요청을 보내고 있다. command파라미터로 어떤 로직을 처리할 것인지 정한다.


DAO클래스에 메서드 작성

아래 메서드를 DAO클래스에 추가로 작성해준다. 이미 작성한 코드들은 따로 쓰진 않겠다. 아래 메서드는 테이블에 있는 모든 row를 가져오는데 VO클래스 하나당 하나의 로우를 담을 수 있으므로 ArrayList에 BoardVO클래스의 객체들을 담아 반환한다.

public List<BoardVO> selectAllBoards () {
		String sql = "select * from board order by num desc";
		
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		List<BoardVO> list = new ArrayList<BoardVO>();
		
		try {
			conn = DBManager.getConnection();
			stmt = conn.createStatement();
			rs = stmt.executeQuery(sql);
			while(rs.next()) {
				BoardVO bVo = new BoardVO();
				bVo.setNum(rs.getInt("num"));
				bVo.setPass(rs.getString("pass"));
				bVo.setName(rs.getString("name"));
				bVo.setEmail(rs.getString("email"));
				bVo.setTitle(rs.getString("title"));
				bVo.setContent(rs.getString("content"));
				bVo.setReadCount(rs.getInt("readcount"));
				bVo.setWriteDate(rs.getTimestamp("writedate"));
				list.add(bVo);
			}
		} catch(Exception e) {
			e.printStackTrace();
		} finally {
			DBManager.close(conn, stmt, rs);
		}
		return list;
	}

Action 클래스 만들기

게시글리스트를 뽑는 클래스이므로 이름은 BoardListAction.java로 하겠다.

package com.msriver.action;

import java.io.IOException;
import java.util.List;

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

import com.msriver.dao.BoardDAO;
import com.msriver.dto.BoardVO;

public class BoardListAction implements Action {

	@Override
	public void execute(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String url = "/board/boardList.jsp";
		
		BoardDAO bDao = BoardDAO.getInstance();
		List<BoardVO> list = bDao.selectAllBoards();
		request.setAttribute("list", list);
		
		RequestDispatcher dispatcher = request.getRequestDispatcher(url);
		dispatcher.forward(request, response);
	}

}

DAO클래스의 인스턴스를 가져오고, 그 인스턴스로 테이블의 모든 데이터를 가져오는 메서드를 실행하여 List를 반환받는다. 그리고 그걸 request내장객체에 담아 forward로 뷰에게 전달해준다.

ActionFactory클래스에 Action 등록

package com.msriver.controller;

import com.msriver.action.Action;
import com.msriver.action.BoardListAction;

public class ActionFactory {
	private ActionFactory() {};
	private static ActionFactory instance = new ActionFactory();
	
	public static ActionFactory getInstance() {
		return instance;
	}
	
	public Action getAction(String command) {
		Action action = null;
		if(command.equals("board_list")) {
			action = new BoardListAction();
		}
		return action;
	}
}

이 글에서 처음 작성한 index.jsp 파일에서 command를 board_list로 정해줬었다.
그러므로 ActionFactory에서는 이 command에 해당하는 BoardListAction 객체를 만드는 것이다. 이 getAction메서드는 BoardServlet에서 수행이 되고 그곳에 생성된 Action객체를 반환한다. 이후 Action객체는 execute메서드를 수행한다.
서블릿은 따로 건들필요가 없다. 동일하게 호출을 하도록 Action인터페이스를 만들었으니깐.

profile
NOBODY

0개의 댓글