목차
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 방식으로 요청이 전송되는 경우
- HTML 폼 태그에서 method 속성을 GET으로 지정하는 경우
<form action=""name=""method="GET"> - HTML의 a태그를 사용해서 링크를 걸어서 전송하는 경우
<a href="list.jsp"> 목록보기 </a> - 브라우저 주소 표시줄에 주소를 직접 입력해서 요청을 전송하는 경우
POST 방식
- 많은 양의 파라미터를 전송하여 파라미터에 관한 처리를 할 대 POST 방식으로 요청을 전송
- ex) 회원 가입 요청, 게시판 글쓰기 요청, 자료실 업로드 등을 처리할 때 사용하는 방식이 모두 POST방식에 해당한다. POST 방식으로 요청을 서버로 전송하려면 반드시 HTML의 form태그를 사용하여 method속성을 POST로 지정하여야 한다.
특징
- 파라미터 값들을 요청 메시지의 본문(Body)에 담아서 전송하기 때문에 길이의 제약이 없다.
- 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
결과
'JSP & Servlet > 개념' 카테고리의 다른 글
[JSP & Servlet] 세션(Session) (0) | 2022.03.25 |
---|---|
[JSP & Servlet] 여러 개 파라미터 값(ex. 배열) 받기 - getParameterValues() (0) | 2022.03.25 |
[JSP] 한글 깨짐 (0) | 2022.03.25 |
[JSP] 이클립스 톰캣(Tomcat) 서버 추가 (0) | 2022.03.25 |
[JSP & Servlet] JSP & Servlet 이란? (0) | 2022.03.25 |