059. 공동 보관소를 사용하여 서블릿이 사용할 자원을 공유하기

Yung·2022년 9월 22일
0

Java223bitcamp

목록 보기
6/26

  • DAO 객체를 ServletContext 보관소에 저장한다.
  • AppInitServlet 변경
import java.sql.Connection;
import java.sql.DriverManager;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import com.bitcamp.board.dao.MariaDBBoardDao;
import com.bitcamp.board.dao.MariaDBMemberDao;

// 이 서블릿은 다른 서블릿이 사용할 객체를 준비하는 일을 한다.
@WebServlet(value = "/init", loadOnStartup = 1) // loadOnStartup = 1 서버가 시작할떄 자동으로 시작 되게
public class AppInitServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  @Override
  public void init() throws ServletException {
    // 톰캣서버가 init(ServletConfig) 호출하면 init() 호출된다.

    System.out.println("공유 자원을 준비 중!");

    try {
      Class.forName("org.mariadb.jdbc.Driver");
      Connection con =
          DriverManager.getConnection("jdbc:mariadb://localhost:3306/studydb", "study", "1111");

      // 생성자에서 getServletContext()를 호출하면 오류 발생!!
      // 왜? 아직 ServletContext 객체가 준비되지 않았기 때문이다.
      // 그래서 생성자 다음에 호출되는 init()에서 getServletContext()를 호출해야 한다.
      ServletContext ctx = this.getServletContext();
      ctx.setAttribute("boardDao", new MariaDBBoardDao(con));
      ctx.setAttribute("memberDao", new MariaDBMemberDao(con));
    } catch (Exception e) {
      throw new ServletException(e);
    }
  }
  // 이 서블릿의 역할은 다른 서블릿이 사용할 자원을 준비하는 것이기 때문에 
  // 굳이 요청을 처리하는 메서드를 정의할 필요가 없다.
}
  • 서블릿은 DAO를 사용할 때 ServletContext에서 꺼낸다.
  BoardDao boardDao;

  @Override
  public void init() throws ServletException {
    boardDao = (BoardDao) this.getServletContext().getAttribute("boardDao");
  }

0개의 댓글