6.4절에서는 웹 브라우저에서 입력한 데이터를 서블릿으로 전송하면 서블릿에서 요청을 받는 방법에 대해 알아보았다. 이번에는 웹 브라우저에서 서블릿으로 데이터를 전송하는 방식을 알아보겠다.
6.5.1 GET/POST 전송 방식
웹 브라우저에서 서블릿으로 전송하는 방법은 크게 GET 방식과 POST 방식이 있다. 6.4절에서 실습한 환율 계산기 결과 화면을 다시 볼까?
값을 전송한 후 결과를 웹 브라우저에 출력합니다.

주소창을 자세히 보면 물음표(?) 뒤에 입력된 값, 외화 종류 그리고 요청을 나타내는 문자열이 서블릿 매핑 이름 뒤에 붙어서 전송된다. 이렇게 URL 주소에 데이터를 붙여서 전송하는 방식을 GET 방식이라고 한다. 그런데 로그인창에서 입력한 ID와 비밀번호를 이런 식으로 보이게 전송하면 개인 정보가 유출될 가능성이 높다. 이처럼 GET 방식으로 데이터를 전송할 경우에는 전송하는 데이터가 노출되므로 보안에 취약하다.
반면에 POST 방식은 전송하는 데이터를 숨겨서 전송하므로 보안성이 좋다.
즉, GET 방식은 보안과 관련 없는 간단한 데이터를 쉽게 전송할 수 있는 반면, POST 방식은 보안과 관련된 데이터를 전송하는 데 많이 사용된다고 기억해 두면 된다. 두 방식의 자세한 특징은 표 6-5에 비교해 두었으니 참고.

6.5.2 GET 방식으로 서블릿에 요청
로그인창 입력 예제인 코드 6-1를 보면 <form> 태그의 method 속성이 get으로 설정되어 있다. 이는 ‘서블릿에 GET 방식으로 데이터를 전송하겠다’라는 의미이다.

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

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

6.5.3 POST 방식으로 서블릿에 요청
이번에는 POST 방식으로 서블릿에 요청하여 처리하는 예제를 실습해 보겠다.
1. LoginServlet3 클래스를 생성한다.

2. login.html은 앞에서 생성한 파일을 편집해서 사용한다. <form> 태그의 속성 method를 post로, action을 login3으로 수정한다.


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

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

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


이처럼 서블릿에서는 웹 브라우저에서 전송되는 방식에 따라 doGet()이나 doPost() 메서드로 대응해서 처리해야 한다.
만약 전송 방식과 다른 메서드를 사용하면 브라우저에서 오류가 발생한다. 예를 들어 웹 브라우저에서는 GET 방식으로 전송하는데 서블릿에서는 doPost() 메서드로 처리하면 GET 방식으로 처리하는 메서드가 없으므로 오류가 발생한다.
다음은 전송 방식과 다른 메서드를 사용한 경우로, 브라우저에 GET 방식으로 처리하는 메서드가 없다는 오류 메시지를 출력한다.



이상으로 GET 방식과 POST 방식으로 데이터를 전송하는 경우와 그에 따라 서블릿에서 처리하는 방법을 알아봤다.
이 두 방식으로 전송된 데이터는 반드시 HttpServlet에서 오버라이딩된 doGet() 메서드나 doPost() 메서드를 사용해야 함.
만약 두 메서드가 서블릿에 존재하지 않거나 사용자가 임의로 만든 메서드를 사용하면 오류가 발생한다는 점을 꼭 유념.
'스프링 부트 > 자바 웹을 다루는 기술' 카테고리의 다른 글
| 6.7 자바스크립트로 서블릿에 요청하기 (0) | 2024.01.18 |
|---|---|
| 6.6 GET 방식과 POST 방식 요청 동시에 처리하기 (0) | 2024.01.17 |
| 6.4 서블릿의 응답 처리 방법 (0) | 2024.01.17 |
| 6.3 서블릿에서 클라이언트의 요청을 얻는 방법 (0) | 2024.01.17 |
| 6.2 <form> 태그 이용해 서블릿에 요청하기 (1) | 2024.01.17 |