<%@ 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클래스에 추가로 작성해준다. 이미 작성한 코드들은 따로 쓰진 않겠다. 아래 메서드는 테이블에 있는 모든 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;
}
게시글리스트를 뽑는 클래스이므로 이름은 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로 뷰에게 전달해준다.
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인터페이스를 만들었으니깐.