[Java] Servlet, GenericServlet, HttpServlet 구현하기

민지·2023년 8월 11일
0

Java

목록 보기
12/20
post-custom-banner

서블릿 인터페이스

인터페이스를 구현하는 클래스는 반드시 인터페이스에 선언된 모든 메서드를 구현해야 된다. init(), service(), destroy(), getServiceConfig(), getServiceInfo()를 모두 구현해야 한다. 빈 메서드라도 구현해야 한다. init()의 경우 서블릿이 생성될 때 딱 한번 호출된다.

@WebServlet("/calculate")
public class CalculatorServlet implements Servlet {
    private static final Logger log = LoggerFactory.getLogger(CalculatorServlet.class);

    @Override
    public void init(ServletConfig config) throws ServletException {
        log.info("init");
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        log.info("service");
        int operand1 = Integer.parseInt(request.getParameter("operand1"));
        String operator = request.getParameter("operator");
        int operand2 = Integer.parseInt(request.getParameter("operand2"));

        int result = Calculator.calculate(new PositiveNumber(operand1), operator, new PositiveNumber(operand2));

        PrintWriter writer = response.getWriter();
        writer.println(result);
    }

    @Override
    public void destroy() {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public String getServletInfo() {
        return null;
    }
}

제너릭 서블릿 추상클래스

GenericServlet은 추상 클래스이므로 service()를 반드시 override 해야 한다. 나머지 메서드는 상황에 따라 구현하지 않아도 된다. service()는 클라이언트가 요청 할 때마다 호출되는 메소드로 실질적인 서비스 작업을 수행한다.

@WebServlet("/calculate")
public class CalculatorServlet extends GenericServlet {
    private static final Logger log = LoggerFactory.getLogger(CalculatorServlet.class);

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
        log.info("service");
        int operand1 = Integer.parseInt(request.getParameter("operand1"));
        String operator = request.getParameter("operator");
        int operand2 = Integer.parseInt(request.getParameter("operand2"));

        int result = Calculator.calculate(new PositiveNumber(operand1), operator, new PositiveNumber(operand2));

        PrintWriter writer = response.getWriter();
        writer.println(result);
    }
}

HTTP 서블릿 추상클래스

HttpServlet은 GenericServlet 클래스의 하위 클래스이다. GenericServlet과는 다르게 Service()메서드를 구현하는 것이 아닌 doGet() 이나 doPost()를 구현한다.

@WebServlet("/calculate")
public class CalculatorServlet extends HttpServlet {
    private static final Logger log = LoggerFactory.getLogger(CalculatorServlet.class);

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        log.info("service");
        int operand1 = Integer.parseInt(request.getParameter("operand1"));
        String operator = request.getParameter("operator");
        int operand2 = Integer.parseInt(request.getParameter("operand2"));

        int result = Calculator.calculate(new PositiveNumber(operand1), operator, new PositiveNumber(operand2));

        PrintWriter writer = response.getWriter();
        writer.println(result);
    }
}

Alt + Insert (자동 완성) 단축키로 Override Methods 누르면 구현할 수 있는 메서드들이 나온다.

profile
개발일지
post-custom-banner

0개의 댓글