SW-PRODUCT/개발-웹닭·HTTP

@WebListener : ServletContextListener를 annotation으로 등록하기

굴돌 2015. 1. 29. 14:20



http://blog.caucho.com/2009/10/06/servlet-30-tutorial-weblistener-webservlet-webfilter-and-webinitparam/


Servlet 3.0부터 @WebListener라는 annotation이 포함되었고, 이를 통해서 web.xml에 등록 안하고 Annotation만 달아서 등록할 수 있다.

=> Tomcat 7.0.x부터 Servlet 3.0 지원

=> Java version 6, Java EE 6

=> Spring 4.0부터 Java EE 6~7을 완벽히 지원. Spring 4.0이 Servlet 2.5에서도 동작은 하지만 3.0+을 쓸것을 강력히 권고함.


물론 ServletContextListener 등등의 상속을 받은 클래스만 이 annotation이 정상 동작한다.


기존에는 이걸 매번 xml에 넣어야하는 불편함 때문에

ServletContextListener 클래스 상속받은 하나만 등록해두고

뭔가 백그라운드에서 돌아야 할 기능이 있을 경우 만들어둔 ServletContextListener에 추가하는 방식을 썼다.


아니면 @PostConstructor를 이용해서 스프링 프레임워크 준비가 끝나면 실행시키거나..


문제는 첫번째 방법을 쓰려면 매번 ServletContextListener에 등록하는게 번거롭고

(근데 생각해보니까 @PostConstructor를 쓰는것보단 여기 등록해 쓰는게 맞는 말 같다..;;..)


@PostConstructor를 이용할 경우 test case 수행할때마다 같이 시작된다는 문제점이 있다.


@WebListener를 이용하게 되면

ServletContextListener 구현 클래스가 많아진다는 번거로움은 있지만,

xml을 손보거나 특정 class에 줄줄이 달아놓을 필요도 없어지고 => 종속성 줄어들고 self describe 해짐.

test case 실행할때는 동작 안하다가 톰켓에 올라가면 동작....하겠지?...

흠...

테스트 안해봤는데 @WebListener가 spring JUnitRunner에서도 수행된다면 대략 낭패..;;


'SW-PRODUCT > 개발-웹닭·HTTP' 카테고리의 다른 글

[링크] 챠트 라이브러리 chartist  (0) 2015.03.06
Spring 랜덤값 초기화  (0) 2015.02.13
Spring validation - 2. @RequestBody  (0) 2014.12.24
Spring validation - @ResponseBody  (0) 2014.12.23
Cookie.HttpOnly  (0) 2014.11.15