기본 객체
out
* 페이지에서 생성하는 모든 데이터(표현식의 결과를 포함한)가 이를 통해 전송된다
* 웹 브라우저에 데이터를 전송하는 출력 스트림으로 JSP 페이지가 생성한 데이터들을 출력한다.
<html> = out.println("<html>");
<head> = out.println("<head>");
안녕하세요 = out.prontln("안녕하세요");
* 복잡한 조건 비교문 때문에 출력 코드가 복잡해지는 경우가 아니면 사용하지 않는 것이 좋다.
<%-- if-esle 문을 예제로 보면 코드 블록이 복잡해지는 경우 사용한다. --%>
1) 표현식 사용
<% if( age > 20 ){ %>
<%= ageStringA %>
<% } else { %>
<%= ageStringB %>
<% } %>
2) out 객체 사용
<%
if (age > 20){
out.println(ageStringA);
} else {
out.println(ageStringB);
}
%>
1. 출력 메소드
* print() : 데이터를 출력한다.
* println() : 데이터를 출력하고, 줄바꿈 문자( \r\n 또는 \n)를 출력한다.
* newLine() : 줄바꿈 문자( \r\n 또는 \n)를 출력한다.
2. 버퍼와의 관계
* JSP 가 사용하는 버퍼는 out 기본 객체가 내부적으로 사용하고 있는 버퍼이다.
* 앞서 지정한 버퍼의 크기는 out 기본 객체에서 내부적으로 사용한다.
* 버퍼 관련 메소드
메소드 |
리턴 타입 |
설명 |
getBuferSize() |
int |
버퍼의 크기를 구한다 |
getRemaining() |
int |
현재 버퍼의 남은 크기를 구한다. |
clear() |
void |
버퍼의 내용을 비운다. 만약 버퍼를 이미 플러시했다면 IOException을 발생시킨다. |
clearBuffer() |
void |
버퍼의 내용을 비운다. clear 메소드와 달리 버퍼를 플러시한 경우에도 IOException을 발생시키지 않는다. |
flush() |
void |
버퍼를 플러시한다. 버퍼의 내용을 클라이언트에 전송한다. |
isAutoFlush() |
boolean |
버퍼가 다 찼을 때 자동으로 플러시 할 경우 true를 리턴한다. page 디렉티브의 autoFlush 속성 값으로 결정한다. <%@ page autoFlush="false: %> |
pageContext
* 직접 사용하는 경우는 드무나 커스텀 태그를 구현할 때 사용한다.
* 제공기능
1) 기본 객체 구하기
2) 속성 처리하기 (PageContext, request, session, application 동일)
3) 페이지의 흐름 제어하기 (추후 추가)
4) 에러 데이터 구하기 (추후 추가)
1. 기본 객체 접근 메소드
* 다른 기본 객체에 접근할 수 있는 메소드를 제공한다.
* getRequest()와 getResponse() 리턴 객체의 타입 : HttpServletRequest, HttpServletResponse이다.
* request 기본 객체와 pageContext.getRequest 메소드로 구한 객체는 같은 객체이다.
application
* 특정 웹 어플리케이션에 포함된 모든 JSP 파일은 하나의 application 객체를 공유한다.
* 웹 어플리케이션 전반에 걸쳐 사용되는 정보 ( 초기 설정 정보, 서버 정보)를 담고있다. 또 웹 어플리케이션에서 제공하는 파일을 읽어올 수 있다.
1. 초기화 파라미터 읽어오기
* WEB/INF/ewb.xml 파일 (설정 정보를 담고있다.)에 <context-param> 태그를 추가하여 사용한다. 웹 컨테이너마다 웹 어플리케이션의 재시작 설정이 자동/수동이 다르다.
<context-param>
<description> 파라미터 설명 (필수X) </description>
<param-name> 파라미터 이름 </param-name>
<param-value> 파라미터 값 </param-value>
</context-param>
* 초기화 파라미터를 추가하면, JSP는 application 기본 객체가 제공하는 메소드를 이용해 초기화 파라미터를 사용할 수 있다.
* 초기화 파라미터 관련 메소드
메소드 |
리턴 타입 |
설명 |
getInitParameter (String name) |
String |
이름이 name인 웹 어플리케이션 초기화 파라미터 값을 읽어온다. 존재하지 않으면, null 값을 리턴한다. |
getInitParameterNames() |
Enumeration<String> |
웹 어플리케이션 초기화 파라미터의 이름 목록을 리턴한다. |
* 데이터베이스 연결과 관련된 설정 파일의 경로나, 로깅 설정 파일, 웹 어플리케이션의 주요 속성 정보를 담고있는 파일의 경로 등을 지정할 때 초기화 파라미터를 사용한다.
2. 서버 정보 읽어오기
* 서버 정보 관련 메소드
메소드 |
리턴 타입 |
설명 |
getServerInfo() |
String |
서버 정보를 구한다. |
getMajorVersion() |
String |
서버가 지원하는 서블릿 규약의 메이저 버전을 리턴한다. |
getMinorVersion() |
String |
서버가 지원하는 서블릿 규약의 마이너 버전을 리턴한다. 버전의 소수 부분을 리턴한다. |
* 위 메소드를 사용해 서버 정보 및 지원하는 서블릿 API 버전을 출력할 수 있다.
3. 로그 메세지 기록
* 웹 컨테이너가 사용하는 로그 파일의 로그 메세지를 기록하는 메소드.
* 로그 기록 메소드
메소드 |
리턴 타입 |
설명 |
log(String msg) |
void |
msg를 로그에 남긴다. |
log(String msg, Throwable throwable) |
void |
msg를 로그로 남긴다. 익셉션 정보도 함께 로그에 기록한다. |
* 로그 메세지가 기록되는 파일은 웹 컨테이너마다 다르다. 톰캣은 톰캣 설치폴더의 log폴더에 있는 localhost.yyy-mm-dd.log 형식의 파일에 기록.
* application 기본 객체 log() 메소드와 JSP가 제공하는 log()메소드를 이용해서도 로그 메세지를 기록할 수 있다.
4. 웹 어플리케이션의 자원 구하기
* JSP 페이지에서 웹 어플리케이션 폴더에 위치한 파일을 사용하려 할 때 JSP 페이지는 절대 경로를 사용하여 지정한 자원을 읽어올 수 있다.
* 하지만. 절대 경로를 사용하면 유지보수에 문제가 생길 수 있다. 이를 해결하기 위해 자원 접근 메소드가 있다.
메소드 |
리턴 타입 |
설명 |
getRealPath(String path) |
String |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템상에서의 경로를 리턴한다. |
getResource(String path) |
java.net.URL |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 리턴한다. |
getResourceAsStream(String path) |
java.io.InputStream |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터 데이터를 읽어올 수 있는 InputStream을 리턴한다. |
JSP 기본 객체와 영역
* SCOPE
1) PAGE 영역 : 하나의 JSP를 처리할 때 사용되는 영역. jsp 페이지를 실행하는 범위가 한 page영역이다. [ pageContext 객체 ]
2) REQUEST 영역 : 하나의 HTTP 요청을 처리할 때 사용되는 영역. 웹 브라우저가 웹 서버에 전송하는 요청이 하나의 request 영역.[ request 객체 ]
3) SESSION 영역 : 하나의 웹 브라우저와 관련된 영역. 세션이 생성되면 한 클라이언트와 관련된 모든 요청은 하나의 session 영역 [ session 객체 ]
4) APPLICATION 영역 : 하나의 웹 어플리케이션과 관련된 영역. 모든 JSP 페이지, 사용하는 모든 요청, 브라우저 세션은 모두 하나의 application 영역. [ application 객체 ]
* 기본 객체 매핑
* request 객체는 클라이언트다 요청할 때 마다 새롭게 생성된다. 즉 매번 새로운 REQUEST 영역이 생성된다. 하나의 요청을 처리하는데 두개 이ㅏㅇ의 JSP가 사용될 수 있다. 즉, 같은 request 객체를 사용한다.
* 하나의 클라이언트는 하나의 세션과 관련되기 때문에 서로 다른 두개의 클라이언트가 같은 JSP 페이지를 사용하더라도 서로 다른 두개의 SESSION 영역에 포함되고, 서로 다른 session 객체를 사용하게 된다
JSP 객체의 속성 사용하기
* pageContext, request, session, application 은 속성을 같는다. 각 객체는 존재라는 동안 기본 객체의 속성을 사용할 수 있다. 속성은 JSP 페이지에서 정보를 주고받고 공유하는 목적으로 사용된다.
* 속성은 <속성이름, 값>의 형태를 갖고, 위 4개의 객체는 서로 다른 속성 이름을 갖는 속성을 여러개 포함할 수 있다.
* 속성 처리 메소드
메소드 |
리턴 타입 |
설명 |
setAttribute (String name, Object value) |
void |
이름이 name인 속성의 값을 value로 지정한다. |
getAttribute (String name) |
Object |
이름이 name인 속성의 값을 구한다. 지정한 이름의 속성이 존재하지 않으면 null값을 리턴한다. |
removeAttribute (String name) |
void |
이름이 name인 속성을 삭제한다. |
getAttributeNames() | Enumeration <String> | 속성의 이름 목록을 구한다. (pageContext 기본 객체는 이 메소드를 제공하지 않는다.) |
1. 속성의 값 타입
* 속성의 이름은 String 객체 타입이고 값은 모든 클래스 타입이 올 수 있다.
* 기본 객체의 속성값을 지정하고 읽어오는 메소드
1) public void setAttribute(String name, Object value) : 메소드의 value 파라미터 타입이 Object
2) public Object getAttribute(String name) : 리턴타입이 Object
* setAttribute로 속성값을 설정한다
// Date 타입을 객체의 속성 값으로 사용. session.setAttribute("session_start", new java.util.Date()); // String 타입을 객체의 속성 값으로 사용. session.setAttribute("memberid", "madvirus"); // File 타입을 객체의 속성 값으로 사용. application.setAttribute("application_temp", new File("c://temp");
* getAttribute를 사용해 위에서 속성값을 지정할 때 사용한 타입으로 변환하여 속성값을 읽는다.
// Date 타입으로 변환 Date date = (Date)session.getAttribute("session_start"); // string 타입으로 변환 String memberID = (String)session.getAttribute("memberid"); // File 타입으로 변환 File tempDir = (File)application.getAttribute("application_temp");
* 기본 데이터 타입의 값을 래퍼 타입을 대신 사용해야 한다.
// int의 래퍼 타입인 Integer를 이용해 값 설정. request.setAttribute("age", new Integer(20)); Integer ageAttr = (Integer)request.getAttribute("age"); int ageValue = ageAttr.intValue();
* 기본 데이터 타입과 래퍼 타입 간의 변환을 자동으로 처리해주는 오토 박싱./오토 언박싱 기능으로 편하게 쓸 수 있다.
// int 20 값이 Integer 타입으로 자동 변환되어 속성값으로 저장 request.setAttribute("age", 20); // Integer 타입의 값이 자동으로 int 타입으로 변환 int age = (Integer)request.getAttribute("age");
2. 속성의 활용
속성의 쓰임새
기본 객체 |
영역 |
쓰임새 |
pageContext |
PAGE |
한번의 요청을 처리하는 하나의 JSP 페이지 내에서 공유할 값을 저장한다. 주로 커스텀 태그에서 새로운 변수를 추가할 때 사용된다. |
request |
REQUEST |
한 번의 요청을 처리하는 데 사용되는 모든 JSP 페이지에서 공유할 값을 저장한다. 주로 하나의 요청을 처리하는 데 사용하는 JSP 페이지 사이에서 정보를 전달하기 위해 사용된다. |
session |
SESSION |
한 사용자와 관련괸 정보를 JSP 사이에 공유하기 위해 사용한다. 사용자의 로그인 정보와 같은 것들을 저장한다. |
application |
APPLICATION |
모든 사용자를 위해 공유할 정보를 저장한다. 임시 폴더 경로와 같이 웹 어플리케이션의 설정 정보를 주로 저장한다. |
'WEB > JSP Servlet' 카테고리의 다른 글
자바빈 (JavaBeans) (0) | 2016.10.27 |
---|---|
에러 처리 : 익셉션, 에러 페이지 (0) | 2016.10.27 |
웹 어플리케이션 폴더 (0) | 2016.10.27 |
JSP 처리과정, 출력버퍼와 응답 (0) | 2016.10.26 |
기본 객체 : response (0) | 2016.10.26 |