티스토리 뷰

Servlet JSP

GET, POST에 특화된 서비스 함수

Programmers 2021. 4. 26. 10:07
반응형

GET으로 보내고 POST로 보내고 어떻게 받아서 사용할지 한번 알아보자!

<!-- calculator.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- GET 요청 -->
	<form action="calculator" method="get">
		<input type="submit">
	</form>
	</body>
</html>
/* Calculator.java */
package com.newlecture.web;

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 {
		/* GET 요청 받기 */
		if (req.getMethod().equals("GET")){
			System.out.println("GET 요청");
		}
		/* POST 요청 받기 */
		else if(req.getMethod().equals("POST")){
			System.out.println("POST 요청");
		}
		
		//super.service(req, resp);
	}
}

이렇게 calculator.html과 Calculator.java 파일을 만들고 확인해보자.
html에서 보내는 방식을 조건문을 통해서 GET, POST를 구분하는 방식이다.
주의해야 할 점은!!!!!!!
html에서는 get, post 소문자로 보냈지만, java에서 읽을 때는 GET, POST 대문자로 읽어야 한다!! 꼬꼬꼬꼮!

GET요청 Submit 콘솔창 출력확인

 그러면 이번엔 html에서 POST로 보내보자!

<!-- calculator.html -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- GET 요청 -->
	<form action="calculator" method="post">
		<input type="submit">
	</form>
	</body>
</html>

POST 요청 Submit 출력창 확인

이번엔 POST가 정상적으로 출력되는 것을 확인할 수 있다.

그리고 다른 방식으로 GET, POST를 요청하는 방법을 보자!

package com.newlecture.web;

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 {
		/* GET 요청 받기 */
		if (req.getMethod().equals("GET")){
			System.out.println("GET 요청");
		}
		/* POST 요청 받기 */
		else if(req.getMethod().equals("POST")){
			System.out.println("POST 요청");
		}
		/* 서비스 함수 호출 */
		super.service(req, resp);
	}
}

주석 처리되어있던 service 서비스 함수를 사용해보자! 그리고 어떻게 실행되는지 결과를 통해 보겠다.

service함수 호출 결과

콘솔 출력 창에 정상적으로 POST 요청이라는 문구가 보이고,
웹 창에는 405 에러가 표시된다. 405는 URL은 있지만 메서드가 뭐가 문제가 있다는 말이다.
즉, 서비스 함수를 사용해서 GET이나 POST를 호출하기 위해서는 함수를 만들어줘야 한다.
doGet() 또는 doPOST() 함수를 한번 만들어보자!

"do" + Ctrl + Space bar

자 이렇게 doGet, doPost를 코드로 만들어보자.

package com.newlecture.web;

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 {
		/* GET 요청 받기 */
		if (req.getMethod().equals("GET")){
			System.out.println("GET 요청");
		}
		/* POST 요청 받기 */
		else if(req.getMethod().equals("POST")){
			System.out.println("POST 요청");
		}
		
		super.service(req, resp);
	}
	/*service 메소드로 만들어 */
	@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 메소드 요청");
	}
	
	
}

GET  메서드랑 POST 메소드랑 저렇게 구현하고 실행.

자 service함수 안에 있는 "GET 요청"도 출력되고, doPost함수에 "Get 메서드 요청"도 잘 출력되는 걸 확인할 수 있다.
그렇다면 가장 효율 적인 코드는?

/* Calculator.java get, post 가장 효율적인 코드 */
package com.newlecture.web;

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 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 메소드 요청");
	}
		
}

이렇게 사용하는 게 get이나 post를 따로 받아서 구현할 때 가장 효율적인 코드이다.
만약에 get이랑 post를 동시에 받아서 쓰려면 처음의 코드처럼 서비스 함수 내에 구현하는 것이 바람직할 듯하다.

반응형
댓글
공지사항