WEB/JSP Servlet

기본객체 : out, pageContext, application, 속성 사용

노랑파랑 2016. 10. 27. 15:42
반응형




기본 객체




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