포스트

06. InitFilter 클래스 만들기

1) 개요

  • 최상위 경로를 나타내는 ${contextPath}를 사용하기 위해 설정 필요

2) 클래스 작성

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
@WebFilter(filterName="initFilter", urlPatterns="/*")
public class InitFilter extends HttpFilter implements Filter {

  /* print 구문 사용하지 않고 -> Logger 사용 */
  // Logger 객체 생성 (해당 클래스에 대한 log를 출력하는 객체)

  private Logger logger = LoggerFactory.getLogger(InitFilter.class);

  public void init(FilterConfig fConfig) throws ServletException {
    // logger를 이용해서 출력하는 방법
    // trace - debug - info - warn - error

    // debug : 개발의 흐름 파악 (이게 실행이 되었는지, 파라미터가 현재 무엇인지 확인할 때)
    // info : 메소드 실행

    // 이 필터가 생성이 되었다 라는 정보를 출력하고 싶다! info가 제일 적절함
    logger.info("초기화 필터 생성");
  }

  // 필터가 파괴될 때 실행 (서버는 켜져있는데 백엔드 코드가 수정되었을 때)
  public void destroy() {
    logger.info("초기화 필터 파괴");
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    // application 내장 객체 얻어오기
    ServletContext application = request.getServletContext();

    // 최상위 주소 얻어오기
    String contextPath =  ( (HttpServletRequest)request ).getContextPath();
                  // 다운캐스팅

    // 세팅
    application.setAttribute("contextPath", contextPath);

    chain.doFilter(request, response);
  }
}