JavaWeb을 배우는 초기 단계에서는 누구나 HttpServlet의 doGet 및 doPost 메소드를 접하게 됩니다. 이틀 전에 "Head First Servlets & JSP"를 읽었는데, 서블릿에서 get 요청과 post 요청의 차이점에 대해 설명하는 것을 다음과 같이 요약했습니다.
1: 요청한 데이터의 크기가 다릅니다.
get으로 요청한 데이터는 URL에 추가되며, URL의 데이터 크기는 일반적으로 2K를 초과할 수 없으므로 get 요청 방법을 사용하는 데이터 크기에 제한이 있습니다. 게시 요청 방식은 메시지 본문에 데이터를 넣기 때문에 이론적으로 데이터 양에 제한이 없습니다. (그러나 실제 작동에서는 너무 클 수 없습니다)
2: 보안이 다릅니다
get에서 요청한 데이터는 URL에 추가되므로 외부 사용자가 쉽게 볼 수 있으므로 안전하지 않습니다. post 메소드는 메시지 본문에 요청을 배치하고 URL에 직접 표시되지 않으므로 이러한 관점에서 데이터는 더 안전합니다.
3: 북마크 생성
가져오기 요청은 북마크를 생성할 수 있지만 게시 요청은 생성할 수 없습니다. 예를 들어 사용자가 검색 규칙을 지정할 수 있는 페이지가 있다고 가정해 보겠습니다. 사용자가 일주일 후에 다시 돌아와 원본 데이터를 얻고 싶어할 수도 있지만 이때 서버에는 새로운 데이터가 있습니다.
4: 방법의 사용
get은 서버를 변경하지 않고 간단한 획득으로 무언가를 얻는 데 사용됩니다. 게시는 사용자가 처리를 위해 데이터를 보내고 서버에서 데이터를 수정할 수 있음을 의미합니다.
5: 요청이 멱등적입니까?
get 요청은 멱등성을 가지며, 단지 무언가를 가져오기만 하고 서버의 콘텐츠를 수정하지는 않습니다. 나쁜 부작용 없이 여러 번 수행할 수 있습니다. 게시물은 멱등성이 없으며 게시물 본문에 제출된 데이터는 되돌릴 수 없는 거래에 사용될 수 있습니다. 따라서 이러한 관점에서 doPost() 함수를 주의해서 사용해야 합니다.
method="POST"가 양식에 지정되지 않은 경우 기본적으로 HTTP GET 요청이 사용됩니다. 즉, 기본 상태는 get 요청을 호출하는 것입니다.
JavaWeb을 배우는 초기 단계에서는 누구나 HttpServlet의 doGet 및 doPost 메소드를 접하게 됩니다.
(1) doGet 메소드: 주로 Http에서 Get 요청을 처리합니다. (2) doPost 메소드: 주로 Http에서 Post 요청을 처리합니다.
그렇다면 Get 요청과 Post 요청의 차이점은 무엇인가요?
(1) get에는 하나의 스트림만 있습니다. 매개변수 수는 엄격하게 제한되며 예를 들어 http://localhost:8888/javaweb/getServlet?name=123일 수 있습니다.
(2) 게시물의 매개변수는 URL이 아닌 다른 스트림을 통해 전달되기 때문에 용량이 매우 클 수 있으며, 파일 업로드 등 바이너리 데이터도 전달할 수 있습니다.
doGet 및 doPost 메소드를 사용하는 경우:
1. Form을 통해 제출된 서블릿에 대해 Form의 메소드가 get인지 post인지 확인한다.
2. <a href...>, doGet 링크를 통해 액세스되는 서블릿
3. IE 주소 표시줄에 직접 서블릿 주소 doGet을 입력합니다.