1. 요청 Method에 따른 특화된 메소드
어떤 동작을 수행하는 서블릿 클래스는 method 방식에 따라 위와 같은 분기를 가진다.
html 파일에서 form의 메소드 형식이 GET이냐 POST이냐에 따라 각자 다른 함수를 수행한다.
단, 필요에 따라 service 함수를 사용하여 GET/POST 방식 구분없이 같은 동작을 수행시키거나,
방식에 따라 다른 처리를 하더라도 초반 같은 동작을 수행하도록 할 수 있다.
- doGet : method가 GET 방식일 때 수행
- doPost : method가 POST 방식일 때 수행
2. 코드 분석
@WebServlet("/calculator")
public class Calculator extends HttpServlet{
@Override
protected void service(HttpServletRequest req
, HttpServletResponse resp) throws ServletException, IOException {
//html에서 소문자로 method 형식을 입력했어도 여기서는 반드시 대문자로 GET/POST 비교해줘야한다.
if(req.getMethod().equals("GET")) {
System.out.println("GET 요청옴");
}
else if(req.getMethod().equals("POST")) {
System.out.println("POST 요청옴");
}
//super.service(req, resp);
}
}
supser.service(req,resp); 가 주석 처리된 것을 확인할 수 있다.
이 메소드를 주석처리 하지 않으면 메소드 방식에 따라 doGet 또는 doPost 메소드를 실행시킨다.
그런데 위 코드에서는 doGet, doPost 메소드를 재정의하지 않고 service 메소드에서만 모든 처리를 하도록 하였기에
super.service 메소드를 주석처리 한 것이다.
만약 주석 처리하지 않으면 doGet, doPost를 재정의하지 않았기 때문에 오류가 발생한다.
@WebServlet("/calculator")
public class Calculator extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.service(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGET 메소드가 호출되었습니다.");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPOST 메소드가 호출되었습니다.");
}
}
먼저 코드를 위 코드처럼 수정할 수도 있다.
'서블릿&JSP > 뉴렉쳐 서블릿&JSP강의' 카테고리의 다른 글
[서블릿/jsp] 상태 유지 (0) | 2023.06.18 |
---|---|
[서블릿/jsp] 여러 개의 Submit 버튼 사용 및 입력 데이터 배열로 받기 (0) | 2023.06.17 |
[서블릿/jsp] 서블릿 필터 (0) | 2023.06.17 |
[서블릿/jsp] POST 요청 (0) | 2023.06.17 |
[서블릿/jsp] GET 요청과 쿼리스트링 (0) | 2023.06.17 |