[java] Guice를 이용한 서블릿 에러 페이지(Error Page) 처리

서블릿 애플리케이션에서 에러 페이지를 처리하는 방법은 다양합니다. 이번에는 Guice를 사용하여 서블릿 에러 페이지를 처리하는 방법에 대해 알아보겠습니다.

1. Guice 설정 준비하기

먼저 Guice를 프로젝트에 추가해야 합니다. Maven을 사용한다면 pom.xml에 다음 의존성을 추가합니다.

<dependencies>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.2.3</version>
    </dependency>
</dependencies>

2. ErrorHandler 클래스 생성하기

에러 핸들링을 담당할 ErrorHandler 클래스를 생성합니다. 이 클래스는 ServletContextListener를 구현하도록 해야합니다.

import com.google.inject.Inject;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class ErrorHandler implements ServletContextListener {

    private final ErrorPageHandler errorPageHandler;

    @Inject
    public ErrorHandler(ErrorPageHandler errorPageHandler) {
        this.errorPageHandler = errorPageHandler;
    }

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        sce.getServletContext().setAttribute("org.eclipse.jetty.server.error_handler", errorPageHandler);
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
}

ErrorPageHandler는 Guice와 함께 사용할 에러 페이지 핸들러입니다.

3. ErrorPageHandler 클래스 생성하기

다음으로 ErrorPageHandler 클래스를 생성합니다. 이 클래스는 ErrorHandler에서 사용될 것입니다.

import com.google.inject.Singleton;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Singleton
public class ErrorPageHandler extends org.eclipse.jetty.server.handler.ErrorHandler {

    @Override
    protected void handleErrorPage(HttpServletRequest request, HttpServletResponse response, int code, String message) throws IOException {
        response.setContentType("text/html");
        response.setStatus(HttpServletResponse.SC_NOT_FOUND);

        RequestDispatcher dispatcher = request.getRequestDispatcher("/error/" + code);
        dispatcher.forward(request, response);
    }
}

handleErrorPage 메서드에서는 요청에 따라 적절한 에러 페이지로 포워딩합니다.

4. Guice 설정 파일 작성하기

마지막으로 Guice 설정 파일을 작성해보겠습니다. ServletModule을 상속한 클래스를 만들고, configureServlets 메서드에서 ErrorHandlerErrorPageHandler를 바인딩합니다.

import com.google.inject.Singleton;
import com.google.inject.servlet.ServletModule;

public class AppModule extends ServletModule {

    @Override
    protected void configureServlets() {
        bind(ErrorHandler.class).in(Singleton.class);
        bind(ErrorPageHandler.class).in(Singleton.class);
    }
}

5. 웹 프로젝트에 Guice 설정 적용하기

웹 프로젝트의 web.xml에 Guice의 GuiceServletContextListener를 추가하여 Guice 설정을 적용합니다.

<listener>
    <listener-class>com.google.inject.servlet.GuiceServletContextListener</listener-class>
</listener>

마무리

이제 Guice를 이용하여 서블릿 에러 페이지를 처리하는 방법을 알아보았습니다. Guice를 사용하면 의존성 주입을 편리하게 처리할 수 있으며, 서블릿 애플리케이션의 에러 핸들링을 간편하게 구현할 수 있습니다.

참고문서: Guice User Guide