프로그래밍 언어/자바 웹

웹 브라우저에서 서블릿으로 데이터 전송하기

· 코딩마이데이

GET/POST 전송 방식

웹 브라우저에서 서블릿으로 전송하는 방법은 크게 GET 방식과 POST 방식이 있습니다.

주소 창을 자세히 보면 물음표(?) 뒤에 입력한 값, 외화 종류 그리고 나타내는 문자열이 서블릿 매핑 이름 뒤에 붙어서 전송됩니다. 이렇게 URL 주소에 데이터를 붙여서 전송하는 방식을 GET 방식이라고 합니다. GET 방식으로 데이터를 전송할 경우에는 전송하는 데이터가 노출되므로 보안에 취약합니다.

반면에 POST 방식은 전송하는 데이터를 숨겨서 전송하므로 보안성이 높습니다.

즉, GET 방식은 보안과 관련이 없는 간단한 데이터를 쉽게 전송할 수 있는 반면, POST 방식은 보안과 관련된 데이터를 전송하는 데 많이 사용합니다.

 

GET 방식 POST 방식
서블릿에 데이터를 전송할 때는 데이터가 URL 뒤에 name = value 형태로 전송됩니다.
여러 개의 데이터를 전솔할 때는 '&'로 구분해서 전송됩니다.
보안이 취약합니다.
전송할 수 있는 데이터는 최개 255자입니다.
기본 전송 방식이고 사용이 쉽습니다.
웹 브라우저에 직접 입력해서 전송할 수도 있습니다.
서블릿에서는 doGet()을 이용해 데이터를 처리합니다.
서블릿에 데이터를 전송할 때는 TCP/IP 프로토콜 데이터의 body 영역에 숨겨진 채 전송됩니다.
보안에 유리합니다.
전송 데이터 용량이 무제한입니다.
전송 시 서블릿에서는 또다시 가져오는 작업을 해야 하므로 처리 속도가 GET 방식보다 느립니다.
서블릿에서는 doPost()를 이용해 데이터를 처리합니다.

 

GET 방식으로 서블릿에 요청

<form> 태그의 method 속성을 get으로 설정

 

마찬가지로 서블릿도 GET 방식으로 전송된 데이터를 doGet() 메서드를 이용해서 처리합니다.

GET 방식으로 전송 데이터를 처리하는 doGet() 매소드

 

그리고 웹 브라우저의 주소창을 보면 http://localhost:8090/pro06/login2?user_id=lee&user_pw=1234처럼 URL 뒤에 "name=value" 쌍으로 전송됩니다. 이처럼 GET 방식으로 전송하면 간편하다는 장점은 없으나 이런 데이터를 전송하는지 다 노출되므로 보안상으로 좋지 않습니다.

주소창이 URL 뒤에 붙어서 전송되는 데이터

 

POST 방식으로 서블릿에 요청

1. sec03.ex01 패키지를 만들고 LoginServet3 클래스를 생성합니다.

실습 파일 위치

 

2. login.html을 작성합니다.

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 창</title>
</head>
<body>
  <form name="frmLogin" method="post" action="login3"  encType="UTF-8">
	   아이디  :<input type="text" name="user_id"><br>
     비밀번호:<input type="password" name="user_pw" ><br>
    <input type="submit" value="로그인">  <input type="reset" value="다시입력">
  </form>
</body>
</html>

 

3. 다음과 같이 LoginServlet3 클래스를 작성합니다. 서블릿에는 doPost() 메서드를 이용해서 처리해야 합니다.

package sec03.ex01;

import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/login3")
public class LoginServlet3 extends HttpServlet {
	public void init() throws ServletException {
		System.out.println("init 메소드 호출");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String user_id = request.getParameter("user_id");
		String user_pw = request.getParameter("user_pw");
		System.out.println("아이디: " + user_id);
		System.out.println("비밀번호: " + user_pw);
	}

	public void destroy() {
		System.out.println("destory 메서드 호출");
	}
}

 

4. 웹 브라우저에서 로그인 창을 요청한 ID와 비밀번호를 입력하고 로그인을 클릭합니다.

ID와 비밀번호 입력 후 로그인 클릭

5. 웹 브라우저에서 전송되는 데이터는 TCP/IP 해더에 숨겨진 채 전송되므로 브라우저의 주소창을 보면 URL 뒤에는 아무것도 표시되지 않습니다.

POST 방식으로 전송되는 데이터

 

전송 방식과 다른 메서드로 처리할 경우 405 오류가 발생합니다.