티스토리 뷰
필터는 서블릿과 비슷한 자바 컴포넌트 입니다. 컨테이너에 전달된 요청이 서블릿을 호출하기 전에 이 필터를 거치게 됩니다.
실제로 필터를 구현한 클래스 입니다. filter 인터페이스를 구현했습니다. 이 때 init 메소드를 반드시 구현해야 합니다. 일반적으로는 config 객체를 저장합니다. 그리고 doFilter에서 실제로 필요한 코딩을 하게 됩니다. 마지막에 FilterChain 객체의 doFilter() 메소드를 호출하는데 이 부분이 다음에 실행될 필터 또는 서블릿을 호출하는 부분입니다.
배포서술자에 필터를 정으하고 매핑할 수 있습니다. 서블릿처럼 이름과 클래스 위치로 필터를 정의하고 초기화 파라미터도 지정할 수 있습니다. 필터를 url이나 servlet에 매핑시키면 해당하는 요청이 들어왔을 때 필터를 거치게 됩니다.
필터에서 서블릿의 service 메소드를 호출할 때 request, response 객체를 인자로 넘겨주게 됩니다. 알다시피 servlet의 response 객체는 OuputStreamWriter 객체를 참조하고 있고 servlet 에서는 이 객체를 통해 직접 응답을 클라이언트로 전달합니다. 문제는 필터에서 응답, 즉 response 객체에 접근하고 싶을 때 발생합니다. service 메소드가 종료된 시점에서 이미 response 가 클라이언트로 전달 된 다음이기 때문에 필터에서는 response 객체에 접근할 수가 없습니다. 이 때 사용하는 것이 바로 wrapper 클래스 입니다. 필터에서 wrapper 클래스를 만들어 진짜 response객체 대신 래퍼객체를 보내는 것입니다. 그렇게 되면 servlet에서는 실제 outputstream이 아닌 래퍼의 outputstream에 응답을 작성하게 되고 필터에서 이 응답에 접근할 수 있게 됩니다.
쿠키값을 다 소문자로 바꾸는 래퍼를 만들어 보겠습니다. responsewrapper 클래스를 확장하여 필요한 메서드만 재정의 한 것을 볼 수 있습니다. 생성자를 보면 response 객체를 파라미터로 받아옵니다. 필터 클래스에서 객체를 생성할 때 꼭 response 객체를 인자로 줘야 합니다.
'language > Servlet&JSP' 카테고리의 다른 글
[WAS] Web Application Server 구현하기 - 1. 구현 기능 (0) | 2019.04.24 |
---|---|
[WAS] Web Application Server 구현하기 - 0. 구현 이유 (0) | 2019.04.24 |
서블릿 보안(Security) (0) | 2019.03.14 |
배포(Deployment) (0) | 2019.03.14 |
custom tag 커스텀 태그 (0) | 2019.03.04 |
- Total
- Today
- Yesterday
- html
- 자바스크립트 개론
- Spring in Action
- Count
- Markov
- markov chain
- GROUP BY
- 코딩의 기술
- 디자인패턴
- DP
- was
- 크롬
- 로그
- 몰라서망신
- 클린코드
- 마르코프
- 문장 생성기
- REST API
- RESTful
- 전략패턴
- 야근
- 자바스크립트개론
- java
- 동적계획법
- 경고
- 마르코프 연쇄
- 유지보수
- restful api
- Warning
- CONVENTIONS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |