728x90
이때까지 계속 Service 함수를 사용했었다.
아래의 사진과 같이 GET 요청 및 POST 요청을 했을 때 Service 함수가 실행된다.
GET 요청과 POST 요청을 하는 방법은 2가지로 볼 수 있다.
첫 번째는 Service 함수만 오버라이드해서 GET과 POST를 사용하는 것과
두 번째는 Service 함수를 오버라이드하지 않고 원하는 것(GET or POST)만 오버라이드해서 사용하는 것이다.
간단하게 아래의 코드를 보도록하자.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>GET/POST</title>
</head>
<body>
<form action="calculator" method="get">
<input type="submit" value="요청하기"/>
</form>
</body>
</html>
package com.jsp.calc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getMethod().equals("GET")) {
System.out.println("GET 요청");
}else if(req.getMethod().equals("POST")) {
System.out.println("POST 요청");
}
}
}
HTML 코드의 method로 주는 값에 따라 get일 경우 콘솔에 "GET 요청"이 출력되고
POST일 경우에는" POST 요청"이 출력되는 것을 확인할 수 있다.
만약 여기서 super.service(req, resp);라는 코드가 추가된다면 어떻게 될까?
package com.jsp.calc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getMethod().equals("GET")) {
System.out.println("GET 요청");
}else if(req.getMethod().equals("POST")) {
System.out.println("POST 요청");
}
super.service(req,resp); // 추가된 코드
}
}
아래의 사진과 같이 405 에러가 나는 것을 볼 수 있다.
왜냐하면 URL은 있으나 내가 요청하고 있는 메소드를 처리하는 로직이 없기 때문이다.
즉, HTML에서 get을 요청해서 "GET 요청"은 실행이 되나
super.service(req,resp); 코드에 의해서 doGet 메소드를 찾으려고 했지만 정의가 되지 않은 것이다.
그렇다면 어떻게 처리를 해줘야할까? 간단하다. 아래와 같이 doGet 메소드를 정의해주면 된다.
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost 메소드 호출!");
}
이렇게 doGet 메소드를 정의해주면 정상적으로 출력되는 것을 확인할 수 있다.
doGet 메소드와 doPost 메소드를 정의한 전체코드
package com.jsp.calc;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calculator")
public class Calculator extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(req.getMethod().equals("GET")) {
System.out.println("GET 요청");
}else if(req.getMethod().equals("POST")) {
System.out.println("POST 요청");
}
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 메소드 호출!");
}
}
728x90
'강의 정리하기 > JSP와 Servlet' 카테고리의 다른 글
내장 객체 메소드 (0) | 2023.07.08 |
---|---|
Jasper와 다양한 JSP 태그들 (0) | 2023.07.06 |
상태 유지를 위한 방법들의 차이점과 페이지 전환 (0) | 2023.03.30 |
상태 유지를 위한 방법 (0) | 2023.03.27 |
예제 (0) | 2023.03.27 |