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페이지 사이에서 정보를 주고 받거나 공유하기 위하여 사용된다.
네가지의 기본객체는 서로다른이름을 가진 속성을 가질수 있다. 또한 속성들을 컨트롤 할 수 있는 메서드들도 가지고 있다. 메스드들의 모습이다.
어떤 JSP페이지에서 속성을 설정하고 application객체에 속성값을 지정하였다고 생각해보자. 그런후 다른 JSP페이지에서 이 지정한 속성값을 참조해보자.
어떻게 될것이라고 생각하는가. 즉 새로운 웹 브라우저를 열고 application객체안의 속성값을 참조하는것이다. 같은 객체를 참조하는것이므로 제대로 참조가 된다.
이는 서로 다른 JSP페이지와 서로 다른 웹 브라우저에서 같은 application 기본객체의 속성을 사용하는 것은 웹 어플리케이션 내에 있는 모든 JSP가 하나의 application 기본객체를 공유 하기 때문이다.
또한 알아두어야 할것이 있는데 그것은 속성의 값타입이다. 속성값은 다양한 타입의값을 속성값으로 지정할 수 있는데, 속성값을 읽어 올때는 속성값을 지정할 때 하용한 타입으로 알맞게 형변환 해주어야한다.당연한 사실이다.
하지만 int나 double와 같은 자료형은 속성값으로 지정할 수 없다. 왜냐면 속성값은 클래스에 해당하는 타입만 받아들일 수 있기때문이다. 기본데이터 타입을 속성의값으로 사용하기 위해서는 래퍼클래스를 사용해야 한다. 래퍼클래스에 대해서는 나중에 알아보기로 한다.
이제까지 속성의 사용방법을 알았으므로 이젠 속성의 활용방법에 대해 알아보기로 하자.
이 사용법중 가장 많이 사용되는 형태는 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 |
댓글