WEB

Servlet 구조 분석(2) - GenericServlet

긍.응.성 2020. 4. 18. 15:39
반응형

Servlet 구조 분석(1) - Servlet, ServletConfig, ServletContext에 이어 Servlet의 구현체인 GenercServlet에 대해 분석해보았습니다.

 

Servlet 구조 분석(1) - Servlet, ServletConfig, ServletContext

Spring MVC는 Servlet위에 구현되어 있습니다. Servlet에 대한 이해가 없다면 그만큼 Spring에서 제공하는 기능을 뒤에서 어떻게 동작하는지 모르게 된다고 생각하였기에 docs를 보며 구조를 분석하여 보았습니다...

ckddn9496.tistory.com

4. abstract class GenericServlet

Servlet을 상속하고 있으며 프로토콜에 독립적으로 사용될 수 있는 Servlet구현체입니다.
웹을 위한 HTTP 서블릿을 사용하고 싶다면 HttpServlet을 사용하면 된다.
Oracle에서 제공하는 docs에서는 반복해서 GenericServlet보다 HttpServlet을 더 추천하는 것 느낌인데, 그만큼 HTTP Protocol을 사용하는 서비스가 대다수이기 때문이라 생각한다.

GenericServlet은 기존의 Servlet인터페이스를 이용하는 것보다 더 쉽게 작성하여 사용할 수 있는데 간단한 버전으로 Lifecycle에 관련된 init()과 destory() 메서드와 ServletConfig를 제공하고 있기 때문이다. 또한 ServletContext 내부 메서드인 log 또한 제공하고 있다.

결국 GenericServlet를 사용하기 위해서는 service() 메서드만 구현하면 된다.

package javax.servlet;
...
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    ...
    private transient ServletConfig config;

    public GenericServlet() {} // 생성자는 아무것도 하지 않는다

    public void destroy() {} // empty

    ...

    public void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    public void init() throws ServletException {
    }

    public void log(String msg) {
        this.getServletContext().log(this.getServletName() + ": " + msg);
    }
    // 기존의 Servlet interface를 상속받았다면 직접 구현해야할 메서드 init(), destroy() 등은 이미 구현되어있다

    public abstract void service(ServletRequest response, ServletResponse reqest) throws ServletException, IOException;
    // 사용자는 service함수만 구현하면 Servlet을 생성하여 사용할 수 있다.
    // 기능은 Servlet interface의 service() 와 같다.
    ...
}


※ 참고자료

반응형