본문 바로가기
Backend/Servlet & JSP

[Servlet & JSP] Servlet doGet과 doPost

by Forsaken Developer 2023. 5. 19.
728x90
728x90
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <div>GET 요청</div>
    <a href="request">a 태그의 href 속성</a>
    <form action="request" method="GET">
        <input type="submit" value="form 태그의 action 속성">
    </form>
    
    <div>POST 요청</div>
    <form action="request" method="POST">
        <input type="submit" value="form 태그의 action 속성">
    </form>
</body>
</html>

servlet에 get요청과 post요청을 위해서 index.html을 다음과 같이 작성한다.

a태그의 href속성이나 form 태그의 method를 GET으로 설정하여 GET요청을 할 수 있고  form 태그의 method를 POST로 설정하여 POST 요청을 할 수 있다.

@WebServlet("/request")
public class ServiceMethodTestServlet extends HttpServlet {
	
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String httpMethod = request.getMethod();
		
		if("GET".equals(httpMethod)) {
			doGet(request, response);
		}
	}
}

mapping 경로에 맞는 서블릿을 구현하고 request 객체의 getMethod를 통해서 메소드 종류를 구하고 "GET"일 경우에 doGet 메소드를 호출하도록 한다.

이때 doGet 메소드는 현재 서블릿이 상속하고 있는 HttpServlet의 메소드이다.

위와 같은 결과를 볼 수  있는데 기본적으로 HttpServlet에서는 doGet 메소드가  sendMethodNotAllowed 메소드를 호출한다.

sendMethodNotAllowed 메소드는 response 객체의 sendError 메소드를 통해서 에러 상태 코드를 보여주는 페이지를 응답한다.

따라서 GET요청을 허용하기 위해서는 doGet 메소드를 오버라이딩 하여 사용한다.

@WebServlet("/request")
public class ServiceMethodTestServlet extends HttpServlet {
	
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String httpMethod = request.getMethod();
		
		if("GET".equals(httpMethod)) {
			doGet(request, response);
		}
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GET 요청");
	}
}

doGet 메소드를 오버라이딩 하여 원하는 로직을 작성하면 GET 요청을 정상적으로 응답한다. 

@WebServlet("/request")
public class ServiceMethodTestServlet extends HttpServlet {
	
	@Override
	public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		String httpMethod = request.getMethod();
		
		if("GET".equals(httpMethod)) {
			doGet(request, response);
		} else if("POST".equals(httpMethod)) {
			doPost(request, response);
		}
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("GET 요청");
	}
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       System.out.println("POST 요청");
	}
}

마찬가지로 doPost 메소드를 오버라이딩 하여 post 요청에 대한 응답을 확인 할 수 있다.

728x90
반응형

댓글