인터페이스를 구현하는 클래스는 반드시 인터페이스에 선언된 모든 메서드를 구현해야 된다. 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);
}
}
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 누르면 구현할 수 있는 메서드들이 나온다.