▶ 요청 (Request)과 응답(Response)
- 웹은 다음그림과 같이 클라이언트가 서버로 요청을 보내면, 서버는 그에 맞는 응답으로 돌려주는 형태로 작동
- 웹 브라우저가 요청할 때는 GET 방식 요청과 POST 방식 요청이 있음
- 웹 브라우저가 요청하는 것은 기본적으로 문서이며, 요청할 때 서버에서 필요한 데이터를 실어서 보낼 수 있음
- 웹 브라우저가 요청할 때는 url의 ?뒤에 데이터를 실어서 보냄, "?키=값&키 값" 의 형태
- 이때 "?키=값&키 값" 을 쿼리스트링(query string)이라고 함
- 서블릿 파일을 실행한 뒤, 최종적으로 자바 언어가 사라진 HTML코드만 남음. 이 HTML코드를 웹 브라우저(사용자)에게 전달하여 응답
(hello라는 url 이름과 매핑된 서블릿을 찾아서 실행)
▶ GET 요청 방식
- 사용자(클라이언트)가 입력한 값을 입력(요청) 받는 form 태그에서 method="GET"으로 설정
- 사용자가 입력한 값을 url의 쿼리스트링을 통해 서버에게 전달됨
- GET 방식은 url의 쿼리스트링이 주소창에 다 노출됨 (보안측면에서 좋지 않음)
- GET 방식은 url로 보낼 수 있는 쿼리스트링이 제한이 있음 (많은 데이터를 url을 통해서 보내지 못함)
▷ GET 요청 방식 동작 과정
(1) 사용자(클라이언트)가 입력한 값을 hello.html의 form에서 입력받음
(2) 입력받은 값을 url의 쿼리스트링을 통해 서버에게 전달(요청)
(3) 이때 form태그의 action 속성의 값으로 url을 요청(서블릿 매핑 주소를 통해 서블릿 요청), input 태그의 name속성의 값으로 키값 전송
● 폼 태그 참고링크 - [HTML] 폼 태그 (tistory.com)
▷hello.html 작성
- form 태그에서 method 속성을 작성하지 않는다면 디폴트값은 method="GET"
- 결국 사용자가 입력받은 GET 방식으로 전달
- html 파일 또한 webapp에 작성
▷ HelloServlet.java 작성
(4) /hello와 매핑된 HelloServlet.java 서블릿이 실행됨
(5) HelloServlet 서블릿에서는 내장 객체 request를 이용하여 쿼리스트링의 값(파라미터)을 가져옴
- request.getParameter("count"); //name속성이 count인 값(파라미터)을 가져옴
→ 쿼리스트링에서는 숫자도 문자로 인식하기때문에, 문자를 숫자(정수)로 입력 받기위해 Integer.parseInt(); 함수로 변환 시킨다
(6) 입력 받는 키의 값으로 로직을 작성함
- 입력 받은 count 값만큼 "Hello Servlet"을 출력하는 서블릿
▷ 실행결과
- hello.html에서 form을 통해 사용자에게 값을 입력받음
- 매핑된 서블릿이 실행되고, 사용자에게 전달받은 데이터를 이용하여 서블릿이 실행됨
- GET방식은 쿼리스트링이 주소창에 그대로 노출됨
▶ POST 요청 방식
- 사용자(클라이언트)가 입력한 값을 입력(요청)받는 form 태그에서 method="POST"으로 설정
- 사용자가 입력한 값을 url의 쿼리스트링을 통해 서버에게 전달됨
- POST 방식은 GET 방식과 달리 url의 쿼리스트링이 주소창에서 보이지 않음 (보안측면에서 좋음)
- POST 방식은 GET 방식과 달리 많은 내용의 쿼리스트링을 입력받아 전달할 수 있음
▷hello2.html 작성
- form 태그에서 method="POST"으로 설정
- 사용자가 입력받은 값을 POST 방식으로 전달함
▷ HelloServlet2.java 작성
- 사용자에게 입력받은 값을 다시 브라우저에게 출력하는 서블릿
- request.getParameter("title"); //name속성이 title인 값(파라미터)을 가져옴
- request.getParameter("content"); //name속성이 content인 값(파라미터)을 가져옴
▷ 실행결과
- 사용자가 제목과 내용을 작성하여 POST 방식으로 전달
- 쿼리스트링이 주소창에 노출되지 않음
- POST 방식은 많은 내용의 쿼리스트링을 입력받아 전달할 수 있음
▶ 한글이 깨지는 경우
case 1) 서버에서 한글을 지원하지 않는 문자코드로 인코딩한 경우
case 2) 서버에서는 제대로 인코딩해서 보냈지만 브라우저가 다른 인코딩 방식으로 잘못 해석한 경우
→ hello.html에서 출력 내용을 한글("안녕 Servlet")로 바꾼후 실행
case 3) 브라우저에서 한글을 지원하지 않은 문자코드로 인코딩한 경우
case 4) 브라우저에서는 UTF 방식으로 보냈지만, 서버가 다른 인코딩 방식으로 잘못 해석한 경우
→ hello2.html에서 사용자 입력 값을 한글로 받았을 때
→ 이러한 한글이 깨지는 문제를 해결하기 위해 인코딩 방식을 지정해줘야함. 다음 챕터에서 설명
'[JSP, 서블릿]' 카테고리의 다른 글
[JSP] MVC model (0) | 2023.01.15 |
---|---|
[JSP] 인코딩 방식 지정 (0) | 2023.01.14 |
[JSP] 서블릿 매핑 (0) | 2023.01.12 |
[JSP] 서블릿 작성하기 (0) | 2023.01.11 |
[JSP] 지시어, 스크립트요소, 내장객체 (0) | 2023.01.10 |
댓글