0712 - Servlet Filter / Servlet JDBC 연동

이진성·2021년 7월 12일
0

0712 - Servlet Filter

  • 1) HttpServletConfig --> Servlet 설정정보획득
  • 2) HttpServletContext --> Application Scope
  • 3) HttpServletRequest --> Request scope
  • 4) HttpSession --> Session scope

request.getSession();
request.getSession().getId();


Filter API

  • 웹 컴포넌트가 실행되기 전의 선처리 작업과 응답되기 전의 후처리 작업을 수행하는 API
  • 즉, 서블릿이 실행 전, 후에 어떤 작업을 하고자 할 때 사용된다.
    • 클라이언트가 보낸 데이터의 암호를 해제한다거나
    • 서블릿이 실행되기 전에 필요한 자원을 미리 준비하거나,
    • 서블릿이 실행될 때마다 로그를 남긴다거나 하는 작업을 '필터'를 통해 처리할 수 있다.

@WebFilter("/*")

  • @WebFilter 어노테이션이 있어야, 자동으로 DD(배치설명자, 즉, web.xml)에 필터로 등록이 된다.
  • 어노테이션 속성값으로는, 필터를 수행할 URL 패턴을 지정한다.
  • 아래와 같은경우는, '모든 URL에 대하여'의 의미를 갖는다.

중요1: 필터 클래스는 규약에 따라, 반드시 Filter 인터페이스를 구현해야 한다.
중요2: 필터 클래스의 객체는, Servlet Container가 생성하므로, 기본(=매개변수없는) 생성자를 가져야한다.

    1. Filter LifeCycle 메소드 init() : 필터객체 생성 직후에 호출된다.
    1. Filter LifeCycle 메소드 destroy() : 필터객체 파괴 직전에 호출된다.
    1. Filter LifeCycle 메소드 doFilter() : 매번, 웹브라우저에서 request문서가 올때마다, 호출됩니다.
    • 이 메소드 역시, Filter API 규약에 따라, 실행블록에서 오류 발생시, 반드시 ServletException 또는 IOException 을 던져야(throw)합니다.

Servlet JDBC 연동

  • 명시적으로 Oracle Cloud Wallet tnsnames.ora 경로를 지정
    static final String driver = "oracle.jdbc.OracleDriver";
    static final String jdbcUrl = "jdbc:oracle:thin:@db202106301639_high?TNS_ADMIN=/Users/jinsung/Desktop/opt/OracleCloudWallet/ATP";
  • 이 후 service 메소드 내에서 JDBC 드라이버 및 자원 객체를 할당 및 해제해 준다.
  • JDBC Driver Spy 연결 설정
    static final String log4jdbcDriver = "net.sf.log4jdbc.sql.jdbcapi.DriverSpy";
  • 드라이버 로딩 시에
    Class.forName(log4jdbcDriver);
  • service() 메소드 내에서...
try {
  //JDBC 드라이버 로딩 
  Class.forName(driver);
  Class.forName(log4jdbcDriver); //DriverSpy 드라이버 로딩
  
  //JDBC 연동코드 
  Connection conn = DriverManager.getConnection(jdbcUrl, user, pass);
  
  PreparedStatement pstmt = conn.prepareStatement(sql);
  
  ResultSet rs = pstmt.executeQuery();
  
  try(conn; pstmt; rs;){
    log.info("conn : " + conn);
    log.info("pstmt : " + pstmt);
    log.info("rs : " + rs);
    
    while(rs.next()) {
      int employeeID = rs.getInt("EMPLOYEE_ID");
      
      String employee = String.format(
          "%s",
          employeeID);
      
      log.info(employee);
          
    }//while
    
    
  }//try-with-resources
  
} catch (Exception e) {
  throw new IOException(e);
}//try-catch



0개의 댓글