글을 정리하다보니 궁금증이 생겼다.
ROOT-Context는 내가 임의로 만든 설정 파일로 여러개 등록이 가능하다.
그럼 Servlet-Context는 내가 임의로 만든 컨텍스트를 여러개 등록할 수 있을까?
정답은 가능하다.
web.xml의 서블릿 등록 구조를 보자.
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
위의 구조에서 servlet-class는 간단히 말해 어떤 종류의 Servlet 클래스를 사용할 것인지를 말한다.
그리고 init-param의 contextConfigLocation은 설정 파일을 로딩하는 태그이다.
즉 다시말해, servlet-class라는 Servlet을 사용하며,
init-param에서 설정 파일을 로딩하고,
url-pattern으로 매핑되는 Servlet이라는 뜻이다.
그러므로 임의로 설정할 수 있는 값은 servlet class, 설정 파일, 매핑 URL이다.
설정 파일과 매핑 URL은 얼마든지 변경할 수 있다.
하지만 servlet-class? 이건 뭘로 바꿔야 할까?
우선 항상 쓰던 DispatcherServlet이 어떤 것을 상속/구현하는지 찾아본 결과, 다음과 같았다.
- Spring
FrameworkServlet
HttpServletBean
- Java
HttpServlet
GenericServlet
HttpServletBean은 사실 HttpServlet을 Bean으로 다루기 위한 클래스라 servlet-class에선 제외하고,
GenericServlet은 Web으로서의 기능이 빠져있기에 제외하였다.
servlet-class로서 기능할 수 있는 것들은 FrameworkServlet과 HttpServlet이었다.
결론을 말하자면, 둘다 가능은 하다.
다만 당연하게도 DispatcherServlet과 같은 기능은 불가능하다.
어떠한 연유에선지 doService() 메소드를 반드시 오버라이드하게 되어있다.
public class testServlet extends FrameworkServlet {
@Override
protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
//
}
}
왜 그런지 파고들기엔 가볍게 알아보자는 의도를 너무 벗어난 것 같아 그만두었다
나중에 한번 시도해봐야 겠다 : )