[스프링 3.1] web.xml이 없는 자바 웹 애플리케이션

Spring 3.1부터 Servlet 3.0을 지원하는데, Servelt 3.0 부터 web.xml 없이 자바 웹 애플리케이션을 배포하는 것이 가능합니다. 따라서 정확히는 스프링 3.1 없이도 web.xml 없는 자바 웹 애플리케이션을 만들 수 있습니다.

그런데.. 조금 귀찮은 부분이 있거든요; 그런 귀찮은 작업을 스프링이 대신 해주고 개발자는 서블릿이나 필터만 등록할 수 있게 해줍니다.

귀찮은 작업엔 뭐가 있냐면… 일단 자바 SPI를 사용하는 방식이기 때문에, META-INF/services 디렉토리에 javax.servlet.ServletContainerInitializer라는 이름의 파일을 만들어 줘야 합니다.

그리고 ServletContainerInitializer의 구현체를 만들고 그 위에 @HandlerTypes라는 애노테이션을 붙이면서 @HandlerTypes 애노테이션 안에.. ServletContainerInitializer의 onStart 메서드의 첫번째 매개변수로 받을 클래스 타입을 명시해 줘야 합니다. 그 타입을 A라고 해보죠.

그럼 이제 A 타입의 구현체를 만들거나, 상속 받은 클래스가 onStart 메서드의 첫번째 매개변수로 전달 됩니다.

귀찮죠;; 그래서 스프링이 다 해뒀고, 우리는 그냥 WebApplicationInitializer 인터페이스만 구현하면 됩니다.

이렇게요. 이게 web.xml을 대신한다고 보면 됩니다.

나머지 XML은 스프링 빈 설정 파일이 있는데, 스프링 3.0부터 이미 자바로 빈 설정을 할 수 있었습니다. 그런데, 이번 스프링 3.1은 그 기능을 대폭 강화하여 XML 네임스페이스에 해당하는 빈 설정도 자바 설정으로 가능하게 해줍니다. 물론 전부는 아니구요. 일부만요… (그래서 사실 스프링 자바 설정을 그리 많이 사용될 것 같진 않다고 생각합니다.)

자바 설정도 xml 처럼 웹용 설정과 비웹용 설정으로 나눠서 설정할 수 있습니다. 이건 Root ACWAC에서 사용할 비웹용 설정이고…

이건 웹용 빈을 설정한 Child ACWAC입니다.

전체 앱은 Github에 올려두었습니다.

https://github.com/keesun/swagger-noxml-mvc

자세한 내용은 이번주 토요일 봄싹 스웨거 책걸이때 말씀드리겠습니다.

8 thoughts on “[스프링 3.1] web.xml이 없는 자바 웹 애플리케이션”

  1. 정말 찾고 싶은 자료입니다..ㅠㅠ!!
    궁금한거 있으면 물어볼수 잇을까요?

      1. 톰캣 7, 스프링3.1 써서 해볼려고 예제를 따라했는데요.. 톰캣 context.xml 부분에서 web.xml 설정해주는 부분에다가 WebConfig 경로를 넣어주면 되나요?(class파일 경로로 넣어줘야되요?)
        저는 안되서요.ㅠ 초보적인 질문이지만 2일쨰 고민하다가 글 남겨요.ㅠ

        1. 흠.. 톰캣에 별다른 설정을 해본적이 없어서 잘 모르겠는데요. 톰캣 context.xml에 설정을 추가한다면 아마도 웹 루트 디렉토리를 설정해주는 걸텐데요. 지금 위의 예제 프로젝트 기준으로 web 디렉토리를 경로로 잡아주면 되지 않을까요? web/WEB-INF/classes 이나 /lib 밑에 클래스에서 톰캣이 알아서 설정 파일 읽어서 동작하겠죠?

Leave a Reply

Your email address will not be published. Required fields are marked *