JSP의 처리 과정
웹 컨테이너의 요청 처리 과정
- 해당 서블릿 존재하지 않으면, JSP 페이지를 서블릿 소스 프로그램(.java)으로 변환
- 서블릿 프로그램을 컴파일하여 서블릿(.class)을 생성
- 서블릿을 실행하여 클라이언트 요청을 처리
- 해당 서블릿이 존재하면 변환과 컴파일 작업을 하지 않고 바로 실행
JSP 페이지를 서블릿 프로그램으로 변환
JSP의 처리 과정
- 변환 : JSP 페이지로부터 서블릿 프로그램(.java)을 생성
- 컴파일 : 서블릿 프로그램을 컴파일하여 클래스 파일(.class)생성
- 실행 : 클래스 파일을 실행
생성된 서블릿 소스 프로그램
- 출력문을 사용하여 HTML 코드를 출력함
- [톰캣설치폴더]\work\Catalina\localhost\[프로젝트이름]\org\apache\jsp 에 소스 프로그램과 클래스 파일이 저장
출력 버퍼와 응답
응답 과정에서 출력 버퍼의 사용
- 응답을 출력 버퍼에 기록
- 기록이 끝나면 버퍼의 내용을 클라이언트에게 전달
종료 전에 버퍼가 차면 버퍼를 비워 전달
- page 지시어의 autoFlush 속성이 false이면 예외 발생
버퍼를 사용하는 이유
- 데이터 전송 효율의 향상
실행 도중에 버퍼를 비우고 새로운 내용을 넣을 수 있음
- 실행 도중에 에러가 발생할 경우 다른 내용으로 바꿈
버퍼가 다 차기 전에 헤더를 변경할 수 있음
- 헤더 정보는 실행 결과를 전송하기 전에 전송됨
page 지시어에서 버퍼 설정하기
buffer 속성
- 버퍼의 크기를 지정
- 기본 값은 8kb
- <%@ page buffer="4kb" %>
버퍼링을 사용하지 않는 경우
- <jsp:forward> 기능을 사용할 수 없음
전송 내용을 취소할 수 없음
- 중간에 오류가 생기면 실제 내용과 오류 정보가 섞임
- 오류 페이지를 사용하는 경우 버퍼링이 필요
- <%@ page buffer="none" %>
autoFlush 속성
- true인 경우 버퍼가 차면 버퍼를 비우고 작업을 수행
- false인 경우 버퍼가 차면 예외가 발생
- <%@ page buffer="4kb" autoFlush="false" %>
서블릿 프로그래밍
JSP와 서블릿
- JSP 규약은 서블릿 규약에 기초함
- 웹 컨테이너는 JSP 페이지를 서블릿 프로그램으로 변환하여 컴파일하고 실행
서블릿 프로그램 만들기
- 서블릿 클래스는 생성자, doGet(), doPost()를 가지고 있음
doGet() 메소드
서버가 서블릿을 통해 GET 요청을 처리하기 위해 호출하는 메소드
- 실제로는 서블릿 클래스에서 service() 메소드에 의해 호출됨
기능
- 요청 데이터 읽기
- 응답 헤더 작성
- respone.getWriter()를 이용하여 출력 스트림 만들기
- 출력 스트림을 이용하여 응답 데이터 작성
doPost() 메소드
서버가 서블릿을 통해 POST 요청을 처리하기 위해 호출하는 메소드
- HTTP POST 방식은 클라이언트가 웹 서버에 많은 양의 데이터를 한번에 보낼 때 사용함
- 예 : 폼에 입력된 내용을 보내거나 파일을 업로드하는 경우
기능
- 요청 데이터 읽기
- 응답 헤더 작성
- response.getWriter()를 이용하여 출력 스트림 만들기
- 출력 스트림을 이용하여 응답 데이터 작성