#006 필수 이해 요소

웹 브라이저의 서비스 요청에 응답하는지와 출력 버퍼가 응답과정에서 어떻게 동작하는 지를 살펴 볼것이다. 
엡 컨테이너는 JSP페이지에 대한 요청이 들어올 경우 다음과 같은 처리를 한다. 
JSP에 해당하는 서블릿이 존재 하지 않을경우 JSP페이지를 컴파일 하여 서블릿을 생성 후 생성된 서블릿을 사용하여 클라이언트 요청을 처리한다. 
JSP에 해당하는 서블릿이 존재하는 경우 곧바로 서블릿을 사용하여 클라이언트의 요청을 처리한다. 

즉, JSP페이지를 요청할때에는 JSP를 직접적으로 실행하는 것이 아니라, JSP를 자바 소스코드로 변환 한뒤 컴파일 해서 생성된 서블릿을 실행하는 것이다. JSP페이지를 자바 코드로 변환하는 단계를 변환 단계라고 하며, 자바코드를 서블릿클래스에 변경하는 단계를 컴파일 단계라고 한다. 

1. 출력 버퍼와 응답
JSP페이지에 생성하는 출력 내용을 곧바로 웹 브라우저에 전송하지 ㅇ낳고 버퍼에 저장했다가 한꺼번에 전송 함으로써 생기는 장점은 다음과 같다. 

데이터 전송 성능을 향상시킨다. 
곧바로 웹 브라우저로 전송되지 않기 때문에, JSP 실행 도중에 버퍼를 비우고 새로운 내용을 보여 줄수 있다. 
버퍼가 다 차기 전까지는 헤더를 변경 할수 잇다. 

버퍼를 사용하면 성능이 향상되는데 네트워크를 비롯한 모든 데이터 교환에서는 작은 단위를 여러차례 보내는 것보다 큰단위로 한번에 묶어서 보내는 것이 더 높은 성능을 발휘하게 된다. 

또한 <JSP:forward>기능과 에러 페이지 처리 기능이 가능하다는 점이다. 
JSP실행과정에서 에러가 발생할 경우, 지금까지 생성한 내용을 버퍼에서 지우고 에러 화면을 출력할수  있는 것이다. 

마지막으로 버퍼가 다 차기전에는 헤더정보를 변경할수 있다. 
헤더정보는 가장 먼저 웹 브라우저에 전송된다. 즉 첫번째로 버퍼의 내용을 웹 브라우저로 전송하기 전에 헤더 정보를 전송하는 것이다. 

2.1 page디렉티브에서 버퍼 설정하기 : buffer 속성을 사용하여 JSP페이지가 사용하는 버퍼의 크기를 지정할수 있는데 다음과 같이 킬로바이트 단위로 버퍼의 크기를 지정할수 있다. 
<%@ page buffer = “4kb”%>

버퍼를 사용하고 싶지 않은 경우에는 buffer 속성의 값을 none로 지정해 주면 된다.
<%@ page buffer = “none”%>
하지만 <JSP:forward>기능을 사용할수 없고 곧바로 전송되기 때문에 출력한 내용을 취소 할수 없다. 

※ 버퍼가 다 차게 되면 기본적으로  JSP페이지는 버퍼의 내용을 웹 브라우저에 전송한 후, 버퍼를 비우고 새롭게 버퍼의 내용을 삽입 하게 된다. 
1. 버퍼에 저장
2. 버퍼에 데이터가 다 찼음
3. 버퍼에 쌓인 데이터를 전송하고 버퍼를 비움
4. 계속해서 버퍼에 데이터 적재

————–플러시
버퍼가 다 찼을 때, 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳 또는 저장되어야 할곳에 전송하고 버퍼를 비우는 것을 플러시라고 한다. 
page 디렉티브는 autoFlush속성을 제공하고 있는데, 이 속성을 사용하면 버퍼가 다 찼을때 어떻게 처리할지를 결정할수 있다. 
ture : 버퍼가 다 찼을 경우 버퍼를 플러시 하고 계속해서 작업을 진행한다. 
false : 버퍼가 다 찼을 경우 예외를 발생시키고 작업을 중지한다. 

3. 웹 어플리케이션 디렉터리 구성과 URL 매핑
웹 어플리키에션 디렉터리는 웹 어플리케이션이 위치하는 디렉터리 이다. 
WEB-INF : 웹 어플리케이션 설정 정보를 담고 있는 web.xml 파일이 위치한다. 
WEB-INF\classes : 웹 어플리케이션에서 사용하는 클래스 파일이 위치한다. 
WEB-INF\lib : 웹 어플리케이션에서 사용하는 jar 파일이 위치한다. 

* request 객체는 웹 어플리케이션의 경로를 알려주는 메소드를 제공하고 있는데
String request.getContextPath()
JSP페이지와 서블릿이 포함되어 있는 웹 어플리케이션의 경로를 읽어 올수 있다.
 
4. 웹어플리케이션의 배포
대상 디렉터리에 파일 직접 복사
war파일로 묶어서 배포
 – war는 web application archive의 약자로 웹 어플리케이션의 구성요소를 하나로 묶어 놓은 파일이다. 

jar cvf chap05.war *

cvf옵션은 c(새로운 파일을 생성), v(콘솔에 세부 정보를 표시하는 것), f(생성할 파일의 이름을 지정)

chap05.war파일이 웹 어플리케이션 디렉터리에 생성된다. 이파일을 실 서버의 webapps 디렉터리에 복사해 주면된다. 

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

%d 블로거가 이것을 좋아합니다: