주난v 개발 성장기

요청과 응답(Head First Servlet & JSP) 본문

개발 성장기/Servlet

요청과 응답(Head First Servlet & JSP)

주난v 2019. 11. 16. 20:12

서블릿 정리

업무 : 클라이언트로부터의 요청을 받아 응답하는 것

서블릿 관리

주체 : 컨테이너 ex)Tomcat
클라이언트의 요청 시 컨테이너는 새로운 스레드를 생성하거나, 스레드 풀에서 가져와서, 서블릿의 service() 호출
매번 새로운 request, response 객체 생성(컨테이너가 함)
즉, 요청한 횟수만큼 스레드가 생성된다.

==> 모든 요청은 자신만의 스레드 / 스택에 할당

서블릿의 일생

컨테이너 서블릿 클래스 서블릿 객체
——-> 클래스 로딩
1. 컨테이너가 시작할 때(톰캣이 실행될 때)
2. 최초 클라이언트 접근 시
———————-> 서블릿 인스턴스(기본 생성자 실행)
———————-> init() 초기화
1. 서블릿 일생에서 단 한번만 호출
———————-> service()
———————-> destroy()
1. 스레드를 소멸하거나, 컨테이너가 관리하는 스레드 풀로 반환한다.
2. Request, Response 객체는 가비지컬렉션 대상이 된다.

 

* 슈뢰딩거 상태 (서블릿 생성자와 init() 메소드 사이의 상태)

   - 완전하게 죽은 것도 아니고 살아있는 것도 아닌 상태

GET vs POST

GET : URL에 데이터 노출, 데이터의 양의 제한이 있음

POST : 몸체가 있음, 데이터 노출 URL에서 불가(물론 Fiddler 이용하면 확인가능)

 

중요한 차이점

1. 사용 용도 : GET(조회), POST(저장, 데이터 처리)

2. 멱등이냐? 아니냐? 멱등이란 ? 동일한 작업을 한번이고 두번이고 계속해도 부작용이 없는 상태

 

HTTP 1.1에서는 GET, PUT, HEAD는 멱등이라고 함. PUT은 잘 이해가 가지않음 - 추후 확인 필요

정리

컨테이너는 서블릿을 로딩 -> 디폴트 생성자 호출
-> init 메소드 실행(ServletConfig, ServletContext 객체 접근)
(서블릿 및 웹 애플리케이션 설정 정보 파악 가능)

Response

클라이언트에 데이터를 전송하기 위하여 Response 객체를 사용한다.
Response = 헤더 + 몸체

Content-type

브라우저에게 지금 내려보낼 컨텐츠가 어떤 타입인지를 알려줌(ex. text/html 등..)
mime-type과 같음.

IllegalStateException

response를 기록한 뒤에 sendRedirect를 하면, 이미 쓰여진 응답이기 때문에 해당 에러 발생