[JSP] GET POST 차이

목차
1. GET 방식
2. POST 방식
3. GET 방식 예제
4. POST 방식 예제

 

 

GET 방식


//url에서 사용될 때
/myhome/mpahe.jsp?name=yeo-seung-chul&email=yeo@tistory.com

//view에서 링크
<a href="detail.jsp?name=dutmdcjf">여승철</a>

 

특징

  • 전송할 파라미터 데이터들을 URL 뒤에 name=value 형태로 전송한다.
  • 여러 개의 파라미터 데이터들을 전송할 시에는 구분자로 '&'을 사용한다.
  • 요청 시 파라미터 정보와 값들이 다 노출되므로 보안에 취약하다.
  • 전송할 수 있는 파라미터의 길이는 최대 255 바이트이다.
  • 본문(body)이 필요 없기 때문에 전송 속도가 POST 방식에 비해 빠르다.

 

 

언제 사용?

  • 간단한 페이지를 요청할 때 사용

 

 

 

GET 방식으로 요청이 전송되는 경우

  1.  HTML 폼 태그에서 method 속성을 GET으로 지정하는 경우
    <form action=""name=""method="GET">

  2. HTML의 a태그를 사용해서 링크를 걸어서 전송하는 경우 
    <a href="list.jsp"> 목록보기 </a>

  3. 브라우저 주소 표시줄에 주소를 직접 입력해서 요청을 전송하는 경우

 

 

 

 

 

 

 

 

 

 

 

 

POST 방식


  • 많은 양의 파라미터를 전송하여 파라미터에 관한 처리를 할 대 POST 방식으로 요청을 전송
  • ex) 회원 가입 요청, 게시판 글쓰기 요청, 자료실 업로드 등을 처리할 때 사용하는 방식이 모두 POST방식에 해당한다. POST 방식으로 요청을 서버로 전송하려면 반드시 HTML의 form태그를 사용하여 method속성을 POST로 지정하여야 한다.

 

특징

  1. 파라미터 값들을 요청 메시지의 본문(Body)에 담아서 전송하기 때문에 길이의 제약이 없다.
  2. GET 방식의 경우 파라미터가 URL뒤에 붙여서 전송되기 때문에 사용자가 브라우저의 주소 창에 전송되는 파라미터를 실제로 확인할 수 있는데 반해
    POST 방식은 파라미터를 사용자가 확인할 수 없으므로 보안상 더 유용한 전송방식이라 볼 수 있다.

 

 

사용 방식

  • /myhome/mypage.jsp HTTP/1.1
    본문(Body) : name='yeo-seung-chul' 

  •  <form name=" "action=" " method="POST">
    POST 방식으로 요청을 서버로 전송하려면 반드시 HTML의 form태그를 사용하여 method속성을 POST로 지정하여야 한다. 이때 같이 전송하고하는 값은 <input> 태그를 사용하여 담은 후 <input type="submit">을 사용하여 제출하면 전송된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

GET 방식 실습 / 예제


앞서 설명한거 처럼 프로젝트를 다시 생성해본다. 이때 Project Name은 ServletProject로 하고 생성하는 과정에서 이클립스에서 web.xml파일이 프로젝트에 자동 생성되게 하기 위해 "Generate web.xml deployment descriptor" 체크 박스에 체크를 해주어야 한다.

 

 

 

 

예제1 -  Form 태그를 사용한 GET 방식의 요청 처리

GET 방식으로 요청이 전송되어 올 경우 최종적으로 doGet(HttpServletRequest request, HttpServletResponse response) 메서드가 호출되기 때문에 해당 메서드에서 요청을 처리해준다. 또한 서블릿에서 제공되는 메서드 중 HttpServletRequest인터페이스에서 제공되는 String getParameter(String name) 메서드가 존재하는데 이 메서드는 name이라는 이름으로 전송되어 온 파라미터 값을 반환해주는 메서드이다. 이 메서드를 사용하여 클라이언트의 요청에 전송되어오는 파라미터 값을 처리하는 예제를 보여주겠다.

 

 

1.[Webapp] > [New] > [Other] > [Web] > [HTML File] > File name은 "login"으로 생성한다.

 

 

 

 

 

2. login.html 페이지 작성

 

  • <form> 태그 영역

    action 속성값을 "login"으로 지정하여 "login" URL로 요청을 전송하며, method속성 값을 "get"으로 지정하여 GET 방식으로 요청을 하게 지정하였다.

 

  • <label> 태그 영역

    id 속성 값을 "id"로 지정하여 HTML 실행 화면에서 "아이디" label을 마우스로 클릭하면 아이디를 입력하는 입력상자로 커서가 이동하게 연결하였다. <label> 부분과 <input> 영역은 id 속성 값으로 연결된다.

 

 

 

 

3.  Servlet 생성하기

[생성한 프로젝트] > [new] > [Servlet] > 클래스 네임은 LoginServlet 으로 작성

 

 

 

 

4. [Next] > URL mappings 항목 클릭 > [Edit] > /login으로 수정

위에 클라이언트 폼 태그의 요청 경로가 login(<form action="login">)으로 설정되어 있으므로 URL mappings 값을 /login으로 수정한다. 이 부분은 web.xml 설정 파일에서 <url-pattern> 항목의 내용으로 추가되는 부분이다.

 

 

 

 

5. [Next] > doGet 체크 > 생성 완료

해당 예제는 요청 방식을 GET 방식으로 할 것이므로 doGet 메서드만 체크한 후 [Finish] 클릭한다.

 

  • doGet에 체크 했으므로 doGet메서드가 생성된 것을 확인할 수 있다.

 

  • JSP2.3 부터 서블릿 설정이 web.xml에서 설정하지 않아도 어노테이션 기반으로 설정할 수 있다.
    따라서 @WebServlet("/login) 코드가 자동으로 생성된 것이다. 이 부분은 http://localhost:8088/ServletProject/login 으로 요청이 전송되어 오면 해당 서블릿 클래스에서 요청을 처리하겠다라는 의미이다.

 

 

 

 

6. doGet 메서드 코드 작성

 

30~31 : 클라이언트에서 전송되어 오는 id라는 이름의 파라미터 값과 passwd라는 이름의 파라미터 값을 받는 부분

32 : 응답하는 데이터는 html 타입이고, charset=euc-kr로 지정하면서 응답되는 데이터 들의 한글 처리를 한 부분.

33 : 문자열 단위로 response 객체에 내용을 출력할 수 있는 출력 스트림을 생성한 부분

34~35 : 응답에 id 변수 값과 passwd 변수 값을 출력하는 부분

 

 

 

7. 실행 결과

 

 

 

 

 

 

 

 

 

 

 

예제2 -  a 태그를 사용한 GET 방식의 요청 처리

HTML의 <a> 태그에 의해서 링크가 걸린 부분을 클릭해서 서버로 요청할 경우도 GET 방식으로 요청이 전송된다. 다음은 게시판에서 2페이지의 글 목록을 요청하는 경우를 가정한 예시이다. 위에서는 실습 형식으로 예제를 설명했으므로 이번에는 그냥 코드만 보여주면서 예제를 설명하도록 하겠다.

 

 

boardList.html

GET 방식으로 요청 시 파라미터 값은 요청 URL 뒤에 "?"문자를 붙이고 "파라미터이름=파라미터값" 형태로 전송한다. 전송해야 할 파라미터 값이 여러 개일 경우는 "&" 문자로 연결한다. "파라미터이름1=파라미터값1&파라미터이름2=파라미터값2" 형태로 파라미터 값을 여러 개 전송할 수 있다.

 

 

 

BoardlistServlet.java

 

 

 

결과

 

 

 

 

 

예제3 -  주소 표시줄에 URL을 직접 입력하여 요청하는 GET 방식의 요청 방식

주소 표시줄에 직접 URL을 입력하여 요청해도 GET 방식으로 요청이 전송된다.

위 html 페이지에서 2page를 클릭하지 않고도 boardList?page=2 입력하여 파라미터 값을 전송하여도 바로 전 오른쪽 이미지와 같은 화면이 출력된다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

POST 방식 실습 / 예제


POST 방식으로 요청이 전송되어 올 경우

POST 방식으로 요청이 오는 경우에도 GET 방식으로 요청이 오는 경우와 유사하다. 요청 처리를 수행할 때 doGet()이 아닌 doPost() 메서드에서 요청이 처리된다는 차이점이 존재한다. 코드만 간단히 살펴보겠다.

 

memReg.html

 

 

 

MemRegServlet.java

 

 

 

결과