WAS는 JSP 페이지에 대한 요청이 들어오면 다음과 같이 처리한다.;
JSP에 해당하는 서블릿이 존재하지 않을 경우
JSP 페이지로부터 자바 코드를 생성한다.(변환 translation 단계)
자바 코드를 컴파일 하여 서블릿 클래스를 생성한다. (컴파일 단계)
서블릿에 클라이언트 요청을 전달한다
서블릿이 요청을 처리한 결과를 응답으로 생성한다.
응답을 웹브라우저로 전송한다.
JSP에 해당하는 서블릿이 존재하는 경우
서블릿에 클라이언트 요청을전달
서블릿이 처리한 결과를 응답으로 생성
응답을 브라우저로 전송
JSP 페이지를 요청하는 경우 직접 실행하는 것이 아니라 , JSP를 자바 소스 코드로 변환한 뒤 컴파일 해서 생성한 서블릿을 실행하는 것이다.
이를 변화 ㄴ단계라고 하며, 자바 코드를 서블릿 클래스로 변경하는 단계를 컴파일 단계라고 한다.
JSP를 실행한다는 말은 컴파일한 결과인 서블릿 클래스를 실행한다는 의미이다.
(서블릿 : 클라이언트의 요청을 처리하여 결과를 처리해주는 역할을 하는 자바 프로그램, 흔히 CGI라고도 함)
출력 버퍼와 응답
JSP 페이지는 응답 결과를 곧바로 브라우저로 전송하지 않는다
대시 출력 버퍼에서 임시로 응답 결과를 저장했다가 한번에 웹브라우저에 전송함
데이터 전송 성능 향상
JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능
버퍼가 다 차기 전까지 헤더 변경 가능
버퍼를 사용하면 성능 향상됨, 작은 단위로 데이터를 전송하는 것이 아니라 한번에 큰 단위로 데이터를 전송한느 것이 가능
네트워크를 비롯한 모든 데이터 교환에서는 큰 단위로 묶는게 성능상 유리
버퍼를 사용하여 에러 페이지 처리 가능, 생서된 결과를 일단 버퍼에 저장하여 데이터가 일정 크기가 넘을 때 까지 브라우저에 전송하지 않는다.
버퍼가 다 차기 전에는 헤더 정보 변경 가능. HTTP 프로토콜 구조상 응답 상태 코드와 함께 헤더 정보를 가장 먼저 웹브라우저에 전송 해야 한다.
WAS는 처음 버퍼의 내용을 웹브라우저로 전송하기 전에 헤더 정보를 전송한다. 따라서 버퍼의 내용을 웹브라우저에 전송하기 전까지는 헤더 정보를 얼마든지 변경할 수 있다. 하지만 일단 버퍼 내용이 브라우저에 전송되면 헤더정보를 변경해도 반영 안됨 (당연)
디렉티브에서 버퍼 설정하기
buffer, autoFlsuh 속성
buffer = "4kb"
일반적으로 지정하지 않고 디폴트는 8kb이다.
none으로 지정하면 JSP페이지가 출력하는 내용을 곧바로 브라우저로 전송함
(출력한 내용 취소 불가)
버퍼가 다 차면 브라우저에 전송하고 나서 다시 버퍼를 채운다.
이때 버퍼에 보관된 응답 데이터를 전송하기 전에 응답 상태 코드와 응답 헤더를 먼저 전송한다. 따라서 이후에는 응답 헤더 값을 변경해도 웹브라우저에 전송되지 않고 무시된다.
플러시 : 버퍼에 쌓인 데이터를 전송되어야 할 곳에 전송하고 버퍼를 비우는 것.
autoFlash = true : 버퍼가 다 차면 버퍼를 비우고 계속해서 진행, false : 버퍼가 다 차면 익셉션 발생. 작업 중단
웹 어플리케이션 배포
대상 폴더에 파일을 직접 복사
war 파일로 묶어서 배포 (Web Application Archive)
JDK의 jar 명령어를 통해서 가능함
디렉토리 구조
WEB-INF : 웹앱의 설정 정보를 담고 있음
WEB-INF/classes : 웹앱에서 사용하는 클래스 파일 존재
WEB-INF/lib : 웹앱에서 사용하는 jar 파일이 위치함
URL의 첫번째 경로와 일치하는 컨텍스트 경로를 가진 웹앱이 존재하지 않으면 루트 웹앱이 요청을 처리한다.
'개발 > Spring' 카테고리의 다른 글
자바 ConcurrentHashmap (0) | 2021.04.11 |
---|---|
자바 Hashtable, HashMap (0) | 2021.04.11 |
프로세스, 쓰레드란(자바, OS) (0) | 2021.04.11 |
Disk (0) | 2021.04.10 |
RAM, 랜덤엑세스 (1) | 2021.04.10 |