클라이언트가 서버에게 jsp페이지를 요청하면 웹컨테이너가 다음을 수행함
JSP라이프사이클
JSP페이지의 최초 요청을 처리할때
- jsp페이지를 서블릿 자바 프로그램(. java)(서블릿클래스를 만듦) 으로 변환(번역)
-.java을 컴파일하여 서블릿클래스파일(.class)를 생성
- 서블릿(.class)을 실행하여 클라이언트 요청을 처리
이후 요청의 처리시 JSP파일에 상응하는 서블릿이 존재하면 변환과 컴파일을 하지않음
단 JSP페이지가 수정되면 다시 변환/컴파일 작업을 해야함
톰캣(웹컨테이너)가 서블릿을 실행
출력버퍼와 응답
실행결과를 즉시 클라이언트로 보내는게 아니라 버퍼에 담는다
출력버퍼는 응답결과의 임시 저장소
응답을 만들 때 먼저 출력 버퍼에 기록함
Page지시어의 버퍼속성이 none이 아니어야함 - 기본값 true
기록이 끝나면 버퍼의 내용을 클라이언트에게 전달함
종료전에 버퍼가 차면 버퍼를 비우고 전달(flush)함 - page지시어의 autoFlush속성이 true여야함
버퍼를 사용하는 이유
- 데이터 전송 효율의 향상. 전송횟수가 줄어들어서.
- 실행 도중에 버퍼를 비우고 새로운 내용을 넣을 수 있음
-- 예를들어 실행 도중에 에러가 발생할 경우 다른 내용으로 바꿈
-아직 전송 전이면 버퍼에 있는 헤더의 내용도 변경할 수 있음
--헤더 정보는 응답 몸체를 전송하기 전에 먼저 전송됨
버퍼를 사용하지 않는 경우의 제한
<jsp:forward>기능을 사용할수 없음 - 포워딩전에 이미 응답결과가 전송되었다면 오류가 생기기 때문
버퍼를 쓰지않으면 포워딩 수행전에 결과가 클라이언트로 전송되었을 것이고 오류가 생김
에러 페이지(errorPage) 속성을 사용하는 경우에도 버퍼링이 필요
버퍼를 쓰지않는다면 출력된 결과를 변경 할 수 없음
-즉시 전송되므로 도중에 오류가 생기면 이전 결과와 오류정보가 섞임
서블릿 프로그래밍
JSP기술은 서블릿 기술에 기초함
JSP페이지는 자바 서블릿 프로그램으로 변환되어 처리됨
톰캣은 JSP와 서블릿 규약을 구현한 서블릿컨테이너/JSP 컨테이너
실행될때 톰캣이 해당 클래스파일을 메모리상에 로드한 다음 객체를 생성하고 객체를 생성하는 순간
생성자, init() , service() , doGet() or doPost()순으로 실행
클라이언트 요청이 있을 때 JSP 페이지의 처리 과정을 설명한 것이다. 다음 중 가장 먼저 수행되는 작업은 무엇인가?
JSP 페이지에 상응하는 서블릿 클래스 파일(.class)이 존재하는가 확인한다.
JSP 페이지를 변환하여 서블릿 자바 프로그램(.java)을 만든다.
서블릿 자바 프로그램(.java)을 컴파일한다.
서블릿 클래스 파일(.class)을 로드하여 객체를 생성한다.
기본적으로 JSP 컨테이너는 JSP 페이지를 구현한 서블릿 클래스 파일(.class)이 있는지 확인한다. 상응하는 서블릿이 없거나 JSP 페이지가 서블릿 클래스보다 새 것인 경우에 변환과 컴파일 작업을 수행한다.
서블릿 프로그램의 작성에 관한 설명이다. 잘못된 것은?
GET 방식의 요청을 처리하려면 서블릿 클래스에서 doGet()을 작성한다.
POST 방식의 요청을 처리하려면 서블릿 클래스에서 doPost()를 작성한다.
요청 방식에 따른 작업의 선별적 처리를 위해 service() 메소드를 재정의해야 한다.
추상 클래스 HttpServlet을 상속받는 클래스를 작성한다.
service() 메소드는 HTTP 요청 방식이 무엇이냐에 따라 적당한 메소드를 호출해 주는 기능을 하며 HttpServlet에 이미 정의되어 있다. 이것을 재정의할 이유는 거의 없다.
'수업 > JSP' 카테고리의 다른 글
7.모듈화된 jsp , 액션태그 (1) | 2024.10.05 |
---|---|
6. 내장객체, scope (1) | 2024.10.03 |
3강 JSP개요 (1) | 2024.10.02 |
2강 eclipse개발환경 (0) | 2024.10.01 |
1강 웹과 자바 (1) | 2024.10.01 |