Servlet 인터페이스 사용시
@WebServlet("/calculate")
public class CalculatorServlet implements Servlet {
private static final Logger log = LoggerFactory.getLogger(CalculatorServlet.class);
private ServletConfig servletConfig;
@Override
public void init(ServletConfig servletConfig) throws ServletException {
log.info("init");
this.servletConfig = servletConfig;
}
@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 ServletConfig getServletConfig() {
return this.servletConfig;
}
@Override
public String getServletInfo() {
return "";
}
@Override
public void destroy() {
}
}
사용하지 않는 메서드도 구현을 필수적으로 해줘야하는게 단점이다.
GenericServlet 사용시
@WebServlet("/calculate")
public class CalculatorGenericServlet extends GenericServlet {
private static final Logger log = LoggerFactory.getLogger(CalculatorGenericServlet.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);
}
}
service 메서드만 재정의 해줘도 사용이 가능하다.
HttpServlet 사용시
@WebServlet("/calculate")
public class CalculatorHttpServlet extends HttpServlet {
private static final Logger log = LoggerFactory.getLogger(CalculatorHttpServlet.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);
}
}
doGet, doPost, doPut, doDelete과 같이 각 해당하는 요청을 재정의 해서 사용할수 있다.
각 서블릿은 해당 요청
GET http://localhost:8080/calculate?operand1=20&operator=%2b&operand2=10
요청시 주의 할 점
예약어나 아스키코드에 포함되지 않는 문자(한글)은 URL인코딩 하여 사용해야함
-, *, /는 상관없으나 + 사용시 예약어이기 때문에 500에러 발생
+를 %2b로 바꾸어서 사용
한글은 %16진수2자리%16진수2자리%16진수2자리 방식
%EC%A0%95
'Spring Boot' 카테고리의 다른 글
| spring 필터링 (0) | 2025.04.07 |
|---|---|
| 스프링 내장 톰캣 연결방법 및 서블릿 (0) | 2024.12.01 |