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

기본객체와 영역

by 가므자 2012. 3. 6.

1. 기본객체

<JSP가 제공하는 기본 객체>

객체 설명
request 클라이언트의 요청 정보를 저장한다.
response 응답 정보를 저장
pageContext JSP 페이지에 대한 정보를 저장
session HTTP 세션 정보를 저장
application 웹 어플리케이션에 대한 정보를 저장
out JSP 페이지가 생성하는 결과를 출력할 때 사용되는 출력 스트립
config JSP 페이지에 대한 설정 정보를 저장
page JSP 페이지를 구현한 자바 클래스 인스턴스
exception 예외객체, 에러 페이지에서만 사용된다.

=> config, page 객체는 거의 안 쓴다고 한다.

2. out 객체

: JSP 페이지가 생성하는 모든 내용은 out 객체를 통해 전송된다. out 객체는 복잡한 출력 코드를 덜 복잡하게 만들어 주는 경우가 아니면 사용하지 않는 것이 좋다.

2.1 out 객체의 출력 메서드

1) print() : 데이터를 출력한다.
2) println() : 데이터를 출력하고 \n를 출력한다.
3) newLine() : \n를 출력한다.

2.2 out 객체와 버퍼와의 관계

: out 기본 객체는 버퍼와 관련된 메서드를 제공한다.

메서드 리턴 설명
getBufferSize int 버퍼의 크기를 구한다.
getRemaining int 현재 남은 버퍼의 크기
clear void

버퍼의 내용을 비운다.

만약 버퍼가 이미 flush된 경우에도

IOException을 발생시킨다.

clearBuffer void

버퍼의 내용을 비운다.

clear와 달리 이미 flush된 경우에도

IOException을 발생시키지 않는다.

flush void 버퍼를 플러시한다.
isAutoFlush boolean 버퍼가 다 찼을 때 자동으로 플러시를 할 경우
 true를 리턴한다.

=> isAutoFlush의 값을 결정하는 것은 page 디렉티브의 autoFlush 속성이다. aotuFlush가 false로 설정됐으면 out.isAutoFlush는 false를 리턴한다.

3. pageContext 객체
: pageContext 객체는 하나의 JSP 페이지와 1:1 매핑되는 객체로 다음 기능을 제공한다.

- 다른 기본 객체 구하기
- 속성 처리하기
- 페이지의 흐름 제어하기
- 에러 데이터 구하기
=> pageContext 를 JSP 페이지에서 직접 사용하는 경우는 드믈지만, 커스텀태그를 구현할 때는 많이 사용된다.

3.1 기본 객체 접근 메서드

메서드 리턴 설명
getRequest ServerRequest request 객체를 구한다.
getResponse ServerResponse response 객체를 구한다.
getSession HttpSession session 객체를 구한다.
getServletContext ServletContext application 객체를 구한다.
getServletConfig ServletConfig config 객체를 구한다.
getOut JspWriter out
getException Exception exception
getPage Object page

getException()은 JSP 페이지가 에러 페이지인 경우에만 의미가 있다.

* pageContext의 getRequest(), getResponse()를 사용 할 때는 알맞게 타입 변환을 해주어야 한다.
예를 들어 getRequest의 리턴 타입은 ServerRequest 인데, HTTP 요청을 처리하는 경우에는 HTTPServerRequest 로 형변환을 한 후 써야 한다.
HttpServerRequest httpRequest = (HttpServerRequest )pageContext.getRequest() ; *

4. application 객체
: 특정 웹 어플리케이션에 포함된 모든 JSP 페이지는 하나의 application 기본 객체를 공유한다.

application 객체는 웹 어플리케이션 전반에 걸쳐서 사용되는 정보를 담고 있다. 초기 설정 정보를 읽어 올 수 있으며, 서버 정보를 읽어올 수 있고, 웹 어플리케이션이 제공하는 자원을 읽어올 수도 있다.

4.1 웹 어플리케이션 초기화 파라미터 읽어오기
: 웹 어플리케이션 전체에서 사용할 수 있는 초기화 파라미터는 WEB-INF\web.xml 파일에 <context-param> 태그를 사용해 추가할 수 있다.

<context-param>

<description> 파라미터 설명(필수는 아님) </description>

<param-name> 파라미터 이름 </param-name>

<param-value> 파라미터 값 </param-value>

</context-param>

web.xml 파일에 위와 같이 초기화 파라미터를 추가하게 되면, application 객체에서 제공하는 메서드를 사용해 초기화 파라미터를 JSP 페이지에서 사용할 수 있게 된다.

=> 웹 어플리케이션 초기화 파라미터는 주로 웹 어플리 케이션의 초기화 작업에 필요한 설정 정보를 지정하기 위해 사용된다.
예를 들어 데이터베이스 연결과 관련된 설정 파일의 경로나, 로깅 설정 파일, 또는 웹 어플리케이션의 주요 속성 정보를 담고 있는 파일의 경로 등을 지정할 때 초기화 파라미터를 사용한다.

<application 객체의 웹 어플리케이션 초기화 파라미터 메서드>

메서드 리턴 설명
getInitParameter( String name ) String 이름이 name 인 웹 어플리케이션 초기화 파라미터의 값을 읽어오며 없으면 null
getInitParameterNames() Enumeration 웹 어플리케이션 초기화 파라미터의 이름 목록 리턴

4.2 서버 정보 읽어오기

: application 객체는 현재 사용 중인 웹 컨테이너에 대한 정보를 읽어오는 메서드를 가지고 있다.

메서드 리턴 설명
getServerInfo String 서버 정보를 구한다.
getMajorVersion String 서버가 지원하는 서블릿 규약의 메이저 버전을 리턴. 버전의 정수 부분을 리턴 함
getMinorVersion String 서버가 지원하는 서블릿 규약의 마이너 버전을 리턴. 버전의 소수 부분을 리턴 함

=> 결과를 보면 톰캣 6.0.33 버전이 서블릿 2.5 규약을 지원한다는 뜻 이다.

4.3 로그 메시지 기록하기

<로그 기록 메서드>

메서드 리턴 설 명
log(String msg) void 로그 메시지 msg를 기록한다.
log(String msg , Throwable throwable) void 로그 메시지 msg를 기록한다.
예외 정보도 함께 기록함

=> 로그 메시지가 기록되는 파일은 웹 컨테이너에 따라 다를 것이다. 톰캣의 경우 [톰캣 폴더]\logs 디렉토리에 있다.

4.3 웹 어플리케이션의 자원 구하기

: JSP 페이지에서 웹 어플리케이션 디렉터리에 위치한 파일을 사용하고 싶은 경우에 절대경로를 사용해 지정한 자원을 읽어올 수 있다.

=> 하지만 절대경로를 사용하면 유지보수에 문제가 생길 수 있다. 그래서 다른 메서드들을 제공한다.

<application 객체가 제공하는 자원 접근 메서드>

메서드 리턴 설명
getRealPath(String path) String 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템상에서의 자원 경로를 리턴
getResource(String path) java.net.URL 웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체 리턴
getResourceAsStream(String path) java.io.inputStream 웹 어플리케이션 내에 지정한 경로에 해당하는 자원으로 부터 데이터를 읽어올 수 있는 inputStream을 리턴

=> 현재 웹 어플리케이션의 경로를 알고 싶을 땐 application.getRealPath("") ; 해주어 알아내면 된다... 이것때문에 고생 좀 했음..

line 11 : 웹 어플리케이션 내에서의 경로

line 14 : 코딩이 잘못 됐다. application.getRealPath(resourcePaht) 가 들어가야 한다.

=> 웹 어플리케이션 내에서의 경로를 사용하면 웹 어플리케이션 디렉터리의 경로가 변경되더라도 코드를 변경할 필요가 없다.

5. JSP 기본 객체와 영역
 :
웹 어플리케이션은 네개의 영역을 가진다.

- PAGE 영역 : 하나의 JSP 페이지를 처리할 때 사용
- REQUEST 영역: 하나의 HTTP 요청을 처리할 때 사용, 웹브라우저의 한번의 요청, 웹브라우저가 웹 서버에 전송하는 요청이 하나의 REQUST영역, 웹브라우저가 요청을 보낼 때마다 매번 새로운 REQUEST 영역이 생성된다.
- SESSION 영역 : 하나의 웹 브라우자와 관련
- APPLICATION 영역: 하나의 웹 어플리케이션과 관련

page 영역은 한 번의 클라이언트 요청에 하나의 JSP 페이지를 범위로 갖는다. 즉 웹브라우저에 요청이 들어오면 JSP 페이지를 실행하게 되는데, 이 때 page 영역.



6. 기본 객체의 속성 사용하기
4가지(pageContext/request/session/application)의 기본객체는 속성을 갖고있다.
이 속성들은 각각의 기본객체가 존재하는 동안에 사용될 수 있으며 JSP페이지 사이에서 정보를 주고 받거나 공유하기 위하여 사용된다.

네가지의 기본객체는 서로다른이름을 가진 속성을 가질수 있다. 또한 속성들을 컨트롤 할 수 있는 메서드들도 가지고 있다. 메스드들의 모습이다.

2008-07-23_10_39_47.jpg

어떤 JSP페이지에서 속성을 설정하고 application객체에 속성값을 지정하였다고 생각해보자. 그런후 다른 JSP페이지에서 이 지정한 속성값을 참조해보자.
어떻게 될것이라고 생각하는가. 즉 새로운 웹 브라우저를 열고 application객체안의 속성값을 참조하는것이다. 같은 객체를 참조하는것이므로 제대로 참조가 된다.
이는 서로 다른 JSP페이지와 서로 다른 웹 브라우저에서 같은 application 기본객체의 속성을 사용하는 것은 웹 어플리케이션 내에 있는 모든 JSP가 하나의 application 기본객체를 공유 하기 때문이다.

또한 알아두어야 할것이 있는데 그것은 속성의 값타입이다. 속성값은 다양한 타입의값을 속성값으로 지정할 수 있는데, 속성값을 읽어 올때는 속성값을 지정할 때 하용한 타입으로 알맞게 형변환 해주어야한다.당연한 사실이다.

하지만 int나 double와 같은 자료형은 속성값으로 지정할 수 없다. 왜냐면 속성값은 클래스에 해당하는 타입만 받아들일 수 있기때문이다. 기본데이터 타입을 속성의값으로 사용하기 위해서는 래퍼클래스를 사용해야 한다. 래퍼클래스에 대해서는 나중에 알아보기로 한다.
이제까지 속성의 사용방법을 알았으므로 이젠 속성의 활용방법에 대해 알아보기로 하자.

2008-07-23_10_39_47(2).jpg

이 사용법중 가장 많이 사용되는 형태는 request 기본객체와 session 기본객체에 속성값을 저장하는 형태이다. request기본객체의 속성을 사용하는 방법은 MVC패턴에 기반해서 웹 어플리케이션을 구축할 때 많이 사용되며, session기본객체의속성을 사용하는 방법은 로그인,로그아웃과 같이 사용자의 인증정보를 저장할 때 많이 사용된다.

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

웹어플리케이션 폴더 추가하기  (0) 2012.03.06
페이지 모듈화와 요청 흐름제어  (0) 2012.03.06
필수 이해 요소  (0) 2012.02.28
response 기본객체  (0) 2012.02.28
request 기본 객체  (0) 2012.02.27

댓글