[컴][웹] Tomcat 의 Valve 와 Servlet Filter

valve 와 filter 의 차이 / 밸브와 필터의 차이


아래내용은 대부분 ref. 1 의 내용을 번역한 것이다.


Tomcat Valves and Servlet filters


client 와 server 사이의 통신에서 server 쪽에서 client 로 response 할 때나, client 에서 server 쪽으로 request 가 들어올 때, 모든 request 에 똑같이 적용하고 싶은 것들이나, 모든 response 에 똑같이 적용하고 싶은 것들이 있을 수 있다. 이런 것들을 처리하고 싶은 요구들이 있어서 valve 나 filter 등이 생겨났다.

valve 와 servlet filter 는 비슷한 기술이다. 둘 다 web application 의 request 를 intercepting 하기 위한 목적으로 만들어졌다.

차이는 tomacat Valve 는 tomcat 에서만 쓸 수 있는 기술이고, servlet filter 는 tomcat 이외의 다른 server 에서도 사용할 수 있는 기술이다.





Tomcat Valve

tomcat 4 에 도입됐는데, tomcat의 container level 에서 http request, response 의 pre-processing 을 가능하게 해주는 기술이다.

valve 들은 java class 의 instance 를 특정 Catalina container 와 연관되게 해준다.

configured valve class 는 container 로 오는 모든 request 에 preprocessor 처럼 동작한다.

이 설정(configuration)은 named-class 가 각각의 request 에 대한 pre-processor로 동작하게 해주는데, 이 named-class 를 valve 라 부른다.

org.apache.catalina.Valve interface 를 상속받아서 만든다. 좀 더 구현을 쉽게 하게 하기 위해서 org.apache.catalina.valves.ValveBase 라는 abstract class 도 지원한다.

Valve 는 어느 Catalina container(Engine, Host, Context  같은)에도 묶을 수 있다. Context 에 묶으면 특정 web application 에만 관여하는 valve 가 되는 것이고, Host 에 묶으면 특정 host 로 오는 모든 web application 에 관여하는 valve 가 되는 식이다.


Servlet Filter

servlet filter 는 servlet 의 component 이다.

valve 처럼 HTTP request, response 를 수정할 수 있다.(header 도 바꾸고 content 도 바꿀 수 있다.)
각각의 web application 의 web deployment descriptor 에서 설정 할 수 있다. 하나의 web application 에 여러개의 filter 들을 설정할 수 있다. 이 경우에 servlet conatiner 가 fileter 들을 모아서 연결하고 순서대로 실행되도록 한다.

javax.servlet.Filter interface 를 상속해서 만들어야 한다. 이렇게 만들면, servlet container 에서 이 filter 를 호출 할 수 있다.


References

  1. Chapter 8, Apache Tomcat 7, Apress, Aleksa Vukotic and James Goodwill

댓글 없음:

댓글 쓰기