티스토리 뷰
1. 객체 생성 및 삭제
- HttpServletRequest는 클라이언트가 서버에 보내는 요청정보를 처리하는 객체
- HttpServletResponse는 서버가 클라이언트로 보내는 응답 정보를 처리하는 객체
- 클라이언트가 웹 브라우저에서 서비스를 요청한다. 이때 HTTP 프로토콜 기반으로 요청정보가 만들어져 웹서버에 전달된다.
- 웹서버는 클라이언트로부터 전달받은 요청정보의 URI를 살펴보고, 서블릿이라면 서블릿 컨테이너에 처리를 넘긴다.
- 서블릿 컨테이너는 요청받은 서블릿 클래스 파일을 찾아 실행한다.
- 실행할 때 첫 순서는 최초의 요청인지 파악한다. 최초의 요청이라면 메모리에 로딩 후 객체를 생성하고 init() 메서드를 호출한다.
- init() 메소드 실행이 끝난 뒤 최초의 요청이든지 그렇지 않든지 서블릿 실행 요청이 들어올 때마다 실행되는 작업으로, 서블릿 컨테이너는 HttpServletRequest와 HttpServletResponse 객체를 생성한다.
- service() 메소드를 호출한다. 이때 앞에서 생성한 HttpServletRequest와 HttpServletResponse 객체의 주소를 인자로 넘긴다. service() 메서드에서는 인자로 받은 두 객체를 사용하여 프로그램을 구현한다.
- service() 메소드가 완료되면 클라이언트에게 응답을 보내고 서버에서 실행되는 프로그램은 완료된다. 이때 HttpServletRequest와 HttpServletResponse 객체는 소멸한다.
꼭 기억해야 할점!
HttpServletRequest와 HttpServletResponse 객체는 service()메서드가 실행되기 전에 생성되었다가 끝나면 소멸한다. 따라서 service() 메소드가 실행되는 동안에만 메모리에 상주하고 있어 그동안에만 사용할 수 있다.
2. 응답 정보 처리 - HttpServletResponse
- 서비스를 요청한 클라이언트에게 응답하기 위한 기능을 처리할 때 javax.servlet 패키지의 ServletResponse 인터페이스를 사용한다.
- 이 인터페이스를 이용하여 클라이언트의 요청에 응답하기 위한 출력 스트림을 추출하거나 버퍼의 크기를 설정하고, 응답할 내용의 타입과 문자셋을 설정하는 등의 작업을 수행할 수 있다.
3. 요청정보 처리 - HttpServletRequest
- 브라우저에 적절한 URL 문자열을 이용하여 웹서버에 서블릿 수행을 요청할 때 일정한 형식의 다양한 정보를 서버로 전달한다.
- HttpServletRequest의 상위 객체인 ServletRequest는 클라이언트로부터 서비스 요청이 들어올 때 호출되는 HttpServlet의 service(ServletRequest, ServletResponse) 메서드의 첫 번째 인자로 전달되며, 이 메서드는 다시 service(HttpServletRequest, HttpServletResponse) 메서드를 호출한다. 만일 개발한 서블릿이 service() 메소드를 재정의하지 않았다면 다음과 같은 순서로 처리된다.
클라이언트 -> service(ServletRequest, ServletResponse) -> service(HttpServletRequest, HttpServletResponse)
Collection이란?
- 배열처럼 처음에 크기를 지정하면 고정되어서 변경할 수 없는 것이 아니고, 얼마든지 유동적으로 크기를 바꿀 수 있다. 또한, 하나의 그룹에 서로 다른 타입의 데이터를 저장할 수도 있다.
Enumeration과 Iterator
- 이 두 객체의 공통점은 커서(cursor) 개념으로 접근한다는 점이다. Collection 안에 있는 모든 요소를 차례로 접근할 때 사용하면 편리하며, 속도 면에서도 빠르다.
자바의 다형성(Polymorphism)
- 서로 다른 타입의 데이터를 한 곳에 저장할 때는 Collection 객체에, 추출할 때는 Object 타입으로 변환한다.
- 실제 메모리에 만들어져 있는 객체는 하위 객체인데, 이 객체의 메모리 시작 주솟값을 가지는 참조 변수의 타입을 상위 객체 타입으로 선언하는 것을 자바의 다형성(Polymorphism)이라 한다.
- 정리하자면, 자바에서 다형성이란? 나 자신뿐만 아니라 상속받고 있는 상위 객체 타입으로 지정할 수 있는 것을 의미한다.
제네릭(Generics)
- Collection에서 추출한 후 사용할 때는 매번 타입 캐스팅이라는 불필요한 작업을 해야 했다. 제네릭은 Collection 객체를 선언할 때 이 Collection에 어떤 타입의 데이터가 저장될 것인지 미리 설정한다. 그러면 저장할 때도 추출할 때도 설정된 타입으로 자동으로 처리한다.
4. 정리
- HttpServletRequest는 서비스를 요청한 클라이언트의 요청정보를 처리하는 객체이다.
- HttpServletResponse는 웹서버가 클라이언트에 보내는 응답 정보를 처리하는 객체이다.
- HttpServletRequest와 HttpServletResponse는 클라이언트로부터 서비스 요청이 있을 때마다 생성되며 웹서버가 응답한 후에 삭제된다.
- HttpServletRequest는 ServletRequest를 상속하고, HttpServletResponse는 ServletResponse를 상속한다.
- HttpServletResponse의 getWriter( )는 클라이언트와 연결된 출력 스트림을 생성하여 반환한다.
- HttpServletResponse의 setContentType( )은 응답 데이터의 문서 타입과 문자셋을 설정한다.
- 한글 지원이 가능한 문자는 EUC-KR, UTF-8 등이 있다.
- HttpServletRequest의 getRemoteAddr( )은 클라이언트의 IP 주소를 반환한다.
- HttpServletRequest의 getRequestURI( )은 클라이언트가 요청한 문서의 URI를 반환한다.
- HttpServletRequest의 getMethod( )는 클라이언트의 요청 방식을 반환한다.
'JSP' 카테고리의 다른 글
Servlet ) 1. Servlet 구현 및 실행 (0) | 2021.04.10 |
---|---|
JSP ) 1. 웹과 HTTP 프로토콜의 이해 (0) | 2021.04.04 |