다른것 검색도중 잘 정리되어있는 블로그 발견..
덧글이라도 남기려했는데..
안되네..
일단 출처 http://www.silverwolf.co.kr/9872
- HTTP는 하이퍼텍스트 전송 프로토콜(HyperText Transfer Protocol)의 약자입니다.
HTTP는 웹에서 사용하는 네트워크 프로토콜이며 TCP/IP 위에서 돌아갑니다. - HTTP는 요청/응답(Request/Response) 모델을 사용합니다. 즉 클라이언트는 HTTPRequest를 보내고, 웹 서버는 HTTPResponse로 응답합니다. 그러면 브라우저는 내려 받은 컨텐츠 타입에 따라 문서를 출력합니다.
- 서버로부터 온 문서가 HTML이라면, 이 HTML 페이지는 HTTP 응답에 첨부되어 날아옵니다.
- HTTP 요청에는 요청한 URL("클라이언트가 요청한 자원), HTTP 메소드(GET, POST 등), 파라미터 데이터(없을 수도 있음. 보통 뭐리 스트링이라고 부름)가 들어 있습니다.
- HTTP 응답에는 상태 코드, 컨텐츠 타입(보통 MIME이라고 부른다), 실제 컨텐츠(HTML, 이미지 등)가 들어 있습니다.
- GET 메소드는 폼 데이터를 URL 뒤에 추가합니다.
- POST 메소드는 요청의 몸체(body)에 폼 데이터를 포함합니다.
- MIME 타입은 브라우저에게 "어떤 종류의 데이터를 받을 겁니다" 라는 정보를 미리 알려주어, 브라우저가 데이터를 어떻게 다룰지 준비하도록 합니다(HTML이면 화면에 보여주기 위한 작업을 해야 할 것이고, 이미지라면 포맷을 파악하여 출력할 것이며, 음악은 또 그에 맞는 행동을 하겠지요).
- URL은 Uniform Resource Locator의 약자입니다. 웹에 있는 모든 자원은 자신만의 고유한 주소를 가집니다. 제일 앞에는 프로토콜의 종류, 그 다음은 서버이름, 포트번호(기본값이 아닌 경우), 자원이 있는 경로와 마지막으로 자원의 이름이 뒤따라 옵니다. 여기에 쿼리 스트링이 있다면 추가될 수 있습니다. 물론 GET 메소드인 경우에 말입니다.
- 웹 서버는 정적인 페이지를 서비스하는데 최적화되어 있습니다. 예를 들어, 현재 시간을 페이지에 보여주려고 할 때와 같이, 동적인 페이지를 만들어야 한다면, 서버와 협업하여 이를 처리할 수 있는 도우미 애플리케이션(helper app)이 있어야 합니다. 자바 이외의 이런 프로그램을 CGI라고 부릅니다. CGI는 Common Gateway Interface의 약어입니다.
- HTML을 println() 안에다 작성하는 방식은 컴파일 오류를 내기 쉬우며, 관리하기도 쉽지 않습니다. JSP는 자바 안에다 HTML을 작성하는 방식이 아니라, HTML 안에다 자바 코드를 작성하는 방식으로 이 문제를 해결합니다.
역할
작업 |
웹 서버 |
컨테이너 |
서블릿 |
Request와 Response 객체 생성 |
|
스레드를 시작하기 바로 직전에 |
|
Service() 메소드 호출 |
|
service() 메소드가 doGet(), doPost() 메소드를 호출합니다. |
|
요청을 처리하기 위한 새로운 스레드 생성 |
|
서블릿 스레드를 시작합니다. |
|
Response 객체를 HTTP Response 객체로 전환 |
|
response 객체로 부터 HTTP 응답(response)을 생성합니다. |
|
HTTP를 이해하고 있어야 한다 |
브라우저와 통신하기 위하여 사용합니다. |
|
|
Response 객체에 HTML을 내려 보낸다 |
|
|
동적인 컨텐트를 생성합니다. |
Response 객체에 대한 참조가 있다 |
|
컨테이너가 생성하여 서블릿에게 넘긴다 |
응답에 쓰기 작업을 하기 위하여 사용합니다. |
DD에서 URL을 찾는다 |
|
요청한 정확한 서블릿을 찾기 위하여 |
|
Request와 Response 객체를 소멸시킨다 |
|
서블릿 작업이 완료되면 |
|
동적인 컨텐츠 생성을 조율한다 |
이 작업을 어떻게 컨테이너에게 넘겨야 하는지를 압니다 |
누가 호출했는지를 압니다 |
|
생명주기를 관리한다 |
|
service() 메소드 및 여타 메소드를 호출하여 |
|
DD의 <servlet-class> 항목과 일치하는 이름이 있는 것은? |
|
|
저요 저 |
HTTP 메소드
GET |
URL로 자원 또는 파일을 달라고(get) 요청함. |
POST |
Request에 첨부한 몸체 정보를 서버로 보내어, 요청한 URL로 이 정보를 넘겨주라고 요청함. |
HEAD |
GET이 무엇을 리턴하든 간에 헤더 정보만 요청함. 이는 Response의 몸체 정보가 없다는 것만 빼면 GET과 동일함. URL로부터 요청한 정보는 빼고 헤더 정보만 가져오는 것임. |
TRACE |
요청한 메시지의 루프백(loopback) 테스트를 요청함. 서버쪽에서 무엇을 받았는지를 알고 싶을 때 하는 테스트. 테스트 목적 또는 문제 해결을 위해 사용함. |
PUT |
동봉한 몸체 정보를 요청한 URL로 올리기 위해 사용함. |
DELETE |
요청한 URL에 있는 자원이나 파일을 삭제하기 위해 사용함. |
OPTIONS |
요청한 URL이 응답할 수 있는 HTTP 메소드가 무엇인지 요청함. |
CONNECT |
터널링의 목적으로 연결을 요청함. |
POST는 멱등(Idempotent)이 아닙니다.
HTTP GET은 말 그대로 무엇인가를 서버로부터 가져오는 것이지, 서버에 수정을 가하기 위한 것이 아닙니다. GET은 HTTP 스펙에 따르면 멱등 메소드입니다. GET은 어떤 부작용(bad side effect)없이 여러 번 실행할 수 있습니다.
POST는 반대로 멱등 메소드가 아닙니다. POST로 전송되는 몸체의 정보는 트랜잭션을 위한 것이며, 이는 되돌릴 수 있는 성질의 것이 아닙니다. 이런 이유 때문에 doPost()를 구현할 때 유의해야 합니다.
POST는 디폴트 값이 아닙니다!
method="POST"를 코딩하지 않았을 때, 디폴트는 HTTP GET입니다. 따라서 브라우저는 파라미터 정보를 몸체가 아닌 헤더에 보낸다는 것입니다.
'차근차근 > JAVA JSP' 카테고리의 다른 글
자바/Java URLEncoder와 URLDecoder (0) | 2014.07.26 |
---|---|
URLConnection (0) | 2014.07.26 |
Request 객체 (0) | 2014.07.26 |
Response 객체 (0) | 2014.07.26 |
Response 객체를 이용한 파일 전송 (0) | 2014.07.26 |