본문 바로가기
프로그래밍/JSP

필수 이해 요소

by 가므자 2012. 2. 28.
JSP 처리과정


웹 브라우져가 JSP 페이지의 실행을 요청하면 서버에는 위와 같은 과정을 통해 JSP 페이지가 처리된다.
- JSP에 해당하는 서블릿이 존재하지 않을 경우 JSP 페이지를 컴파일 하여 서블릿을 생성한 후 생성된 서블릿을 사용하여 클라이언트의 요청을 처리한다.
- JSP에 해당하는 서블릿이 존재하는 경우 곧바로 서블릿을 사용하여 클라이언트 요청을 처리한다. 즉 JSP를 바로 직접적으로 실행하는게 아니라 JSP를 자바 소스 코드로 변환한 뒤 컴파일 해서 생성된 서블릿을 실행한다
- JSP를 자바 코드로 바꾸는걸 변환단계라고 하고 자바코드를 서블릿 클래스로 변경하는 걸 컴파일단계라고 한다 .

C:\apache-tomcat-7.0.26\work\Catalina\localhost\chap03\org\apache\jsp
JSP 파일과 관련된 자바 소스 코드와 컴파일 된 클래스 파일을 발견할 수 있다.


출력 버퍼와 응답
JSP 페이지는 생성된 결과를 곧바로 웹 브라우저에 전송하지 않고 출력 버퍼에 임시로 저장했다가 한방에 웹브라우져에 전송한다 .


버퍼 복잡하다. 하지만 장점
- 데이터 전송 성능이 향상됨, 작은걸 여러번 하는것보다 크게 한방 보내는게 빠르다고 함
- 곧바로 웹 브라우저로 전송되지 않기 때문에 JSP 실행 도중에 버퍼를 비우고 새로운 내용을 보여 줄 수 있다.
<jsp:forward>기능과 에러페이지 처리 기능이 가능하다
즉 가지고 오다가 중간에 에러가나면 마지막에 에러페이지로 이동 할 수 있다는 점이다  뿌려지다가 에러나지 않도록 ? 
- 버퍼가 다 차기 전까지는 헤더를 변경할 수 있다.
헤더를 변경 할 수 있다는것은 클릭한 뒤 뜨기전에 따른걸 클릭할 수 있다는 말


버퍼 설정 - buffer속성 , autoFlush속성
일반적으로 JSP페이지를 작성할 때에는 buffer속성을 지정하지 않는다. 속성을 지정하지 않는 경우 최소한 8KB 이상의 크기를 갖는 버퍼를 사용하도록 규정되어있다. 그이유는 웹 어플리케이션이 만들어내는 출력 결과가 대부분 8KB 이내이고, 버퍼의 크기가 8KB일 때가 평균적으로 가장 높은 성능을 보이기 때문이다.
<%@ page buffer = "4KB"%>

버퍼를 사용하고 싶지 않을때에는
<%@ page buffer= "none" %>

buffer의 속성의 값을 "none"으로 지정하게 되면 JSP페이지가 출력하는 내용을 곧바로 웹브라우저에 전송하기 때문에 다음과 기능을 사용하는데 제한이 따른다.
- <jsp:forward> 기능을 사용할 수 없다.
- 곧바로 전송되기 때문에 출력한 내용을 취소할 수 없다.

버퍼가 다 차게 되면 기본적으로 JSP 페이지는 버퍼의 내용을 웹 브라우저에 전송한후, 버퍼를 비우고 새롭게 버퍼에 내용을 삽입하게 된다.


플러시(flush): 버퍼가 다 찼을때, 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳(또는 저장되어야 할곳)에 전송하고(또는 저장하고) 버퍼를 비우는 것을 플러시라고 한다.
page 디렉티브는 autoFlush 속성을 제공하고 있고 "true" 또는 "false"를 값으로 갖는다.
- true : 버퍼가 다 찼을 경우 버퍼를 플러시하고 계속해서 작업을 진행한다.
- false : 버파가 다 찼을 경우 예외를 발생시키고 작업을 중지한다.

소스참조)
autoFlushFalse.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page buffer="1kb" autoFlush="false" %>
<html>
<head><title>autoFlush 속성값 false 예제</title></head>
<body>
<%  for (int i = 0 ; i < 1000 ; i++) {   %>
1234
<%  }  %>
</body>
</html>

autoFlushTrue.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<%@ page buffer="1kb" autoFlush="true" %>
<html>
<head><title>autoFlush 속성값 true 예제</title></head>
<body>

<% for (int i = 0 ; i < 1000 ; i++) { %>
1234
<% } %>

</body>
</html>


웹 어플리케이션의 폴더 구조
WEB-INF\ - 웹 어플리케이션을 실행하는데 필요한 클래스 파일 및 설정파일 등이 저장되는 폴더
WEB-INF\web.xml - 웹 어플리케이션에 대한 전반적인 설정 정보를 저장하고 있는 파일
WEB-INF\classes - 웹 어플리케이션에서 사용하는 클래스 파일이 위치 한다.
WEB-INF\lib - 웹 어플리케이션에서 사용하는 Jar 파일이 위치한다.
WEB-INF\tld - 태그 라이브러리 관련 설정 파일은 보통 tld 폴더에 지정한다.


웹 어플리케이션 폴더와 URL과의 관계
http://localhost:8080/chap02  // Webapps\chap02
http://localhost:8080/chap03  // Webapps\chap03
http://localhost:8080/chap04  // Webapps\chap04
http://localhost:8080/chap05  // Webapps\chap05
http://localhost:8080/            // Webapps\ROOT

request
기본 객체는 웹 어플리케이션의 경로를 알려주는 메소드를 제공하고 있다.
request.getContextPath()

소스참조)
contextPath.jsp

<%@ page contentType = "text/html; charset=euc-kr" %>
<html>
<head><title>웹 어플리케이션 경로 구하기</title></head>
<body>
웹 어플리케이션 콘텍스트 경로: "<%= request.getContextPath() %>"
</body>
</html>


웹 어플리케이션의 배포
- 대상 디렉터리에 파일 직접 복사
- war 파일로 묶어서 배포


'프로그래밍 > JSP ' 카테고리의 다른 글

페이지 모듈화와 요청 흐름제어  (0) 2012.03.06
기본객체와 영역  (0) 2012.03.06
response 기본객체  (0) 2012.02.28
request 기본 객체  (0) 2012.02.27
스크립트 요소  (0) 2012.02.27

댓글