부록1) 서블릿은 어떻게 등록할까?

Dev StoryTeller·2021년 2월 14일
0

글을 정리하다보니 궁금증이 생겼다.
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-paramcontextConfigLocation은 설정 파일을 로딩하는 태그이다.

즉 다시말해, 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에선 제외하고,
GenericServletWeb으로서의 기능이 빠져있기에 제외하였다.

servlet-class로서 기능할 수 있는 것들은 FrameworkServletHttpServlet이었다.

결론을 말하자면, 둘다 가능은 하다.
다만 당연하게도 DispatcherServlet과 같은 기능은 불가능하다.


?!) FrameworkSerlvet 사용

어떠한 연유에선지 doService() 메소드를 반드시 오버라이드하게 되어있다.

public class testServlet extends FrameworkServlet {
    @Override
    protected void doService(HttpServletRequest request, HttpServletResponse response) throws Exception {
        //
    }
}

왜 그런지 파고들기엔 가볍게 알아보자는 의도를 너무 벗어난 것 같아 그만두었다
나중에 한번 시도해봐야 겠다 : )

profile
개발을 이야기하는 개발자입니다.

0개의 댓글