상세 컨텐츠

본문 제목

[서버프로그래밍] 6. 서블릿의 핵심 API (2)

Backend/서버프로그래밍

by 사랑짱 2021. 7. 6. 14:38

본문

 

◆ ServletConfig API

 

- 서블릿이 초기화될 때 공통적으로 적용해야되는 작업(초기화 파라미터) 접근에 사용

- 재컴파일 없이 변경된 정보 참조가 가능하기 때문에 유지보수에 유리

리턴타입 메소드명 내용
String getInitParameter(name) name에 해당되는 초기화 파라미터 값을 리턴한다.
만약 지정된 name의 파라미터 값이 없으면 null을 리턴한다.
Enumeration getInitParameterNames( ) 모든 초기화 파라미터 name 값을 Enumeration 타입으로 리턴한다.
String getServletName( ) 요청한 서블릿의 이름을 리턴한다.

 

 

※ 초기화 파라미터 등록 방법

 

1) web.xml 등록 

- <servlet> 태그 안에서 <init-param> 태그를 사용하여 지정

<servlet>
     <servlet-name>서블릿별명</servlet-name>
     <servlet-class>패키지를 포함한 서블릿명</servlet-class>
     <init-param>
          <param-name>초기화파라미터 이름</param-name>
          <param-value>초기화파라미터 값</param-value>
     </init-param>
     <init-param>
         <param-name>초기화파라미터 이름</param-name>
         <param-value>초기화파라미터 값</param-value>
     </init-param>
</servlet>
<servlet-mapping>
     <servlet-name>서블릿별명</servlet-name>
     <url-pattern>/맵핑명</url-pattern>
</servlet-mapping>

 

2) @WebInitParam 어노테이션 이용

- @WebServlet 어노테이션의 속성으로 initParams을 선언하고,

  @WebInitParam 어노테이션으로 초기화 파라미터를 배열로 지정 (다수의 파라미터 지정이 가능)

 

 


 

◆ ServletContext API

 

 

- ServletContext는 웹 어플리케이션(Context)마다 하나씩 생성되는 객체

- getServletContext() 메서드를 이용하여 ServletContext 객체를 얻는다.

- 웹 어플리케이션의 LifeCycle과 일치하기 때문에 컨테이너에 존재한다면 계속 사용 가능
 => 공유되는 데이터가 저장되어있는 context 메모리 공간을 application scope이라고 부른다.

    (Ex. 로그인 후, 로그인처리가 지속되는 것 또한 context 메모리 공간에 저장되어 있기 때문)

리턴타입 메소드명 내용
String getInitParameter(name) name에 해당되는 컨텍스트 파라미터 값 을 리턴한다.
만약 지정된 name의 파라미 터 값이 없으면 null을 리턴한다.
InputStream getResourceAsStream(path) 웹 어플리케이션의 path 경로에 해당되는 파일을
읽기모드로 접근가능하다.
void setAttribute(name,value) application scope 해당되는 속성 값을 저장할 때 사용한다.
브라우저를 종료해도 속성 값을 사용할 수 있다.
Object getAttribute(name) name에 해당되는 속성 값을 리턴한다

 

공유영역에 속성을 넣고 빼고 삭제하는 메소드는 아래와 같다.
  (1) setAttribute(name, value) : 공유영역에 속성 바인딩 
  (2) getAttribute(name) : 바인딩 속성값 얻기
  (3) removeAttribute(name) : 공유영역의 속성 언바인딩

 

 

※ 컨텍스트 파라미터 설정 방법

초기화 파라미터와 마찬가지로 web.xml에 등록하여 사용하고,

ServletContext 객체의 getInitParameter(name) 메서드를 사용해서 컨텍스트 파라미터 값을 얻는다.

 

- web.xml 등록  시,

   <context-param> 태그를 사용하여 컨텍스트 파라미터를 등록하며, 

   반드시 <servlet> 태그 전에 설정해야 된다.

<context-param>
     <param-name>driver</param-name>
     <param-value>oracle.jdbc.driver.OracleDriver</param-value>
</context-param>
<context-param>
     <param-name>savePath</param-name>
     <param-value>c:\\save</param-value>
</context-param>

 

 

※ application scope의 유형

Sevlet Container는 공유데이터를 저장할 공유영역(shared Scope) 4가지를 제공

(1) Application scope
- ServletContext객체가 관리한다고 표현
- LifeCycle이 가장 길며, WAS의 생명주기와 동일하다.
- 단, 메모리 차지로 인해 많은 양의 데이터를 보관하지 않는다.

(2) Session scope
- HTTPSession 객체가 관리한다고 표현
- 웹 개발 시 가장 많이 사용하는 공유영역으로 웹 브라우저와 생명주기가 동일
- 대부분의 웹서비스는 로그인 정보/장바구니 정보 등을 여기에 저장하여 공유

(3) Request scope 
- HTTPServletRequest 객체가 관리한다고 표현
- 웹 개발 시 가장 많이 사용하는 공유영역
- 하나의 Requst에 대해서 Response 문서가 웹브라우저로 전송되면 바로 사라지는 영역
- 기본 프로토콜 연결과 동일(응답 후 연결 끊기!) => 스프링에서 많이 사용하는 영역

(4) Page scope
- JSP에서만 제공되는 공유영역
- XXX.jsp 파일이 처음부터 끝까지 수행되고나면 파괴되는 공유영역
-가장 생명주기가 짧다! -> 제공은 되나 거의 사용하지 않는다..!

 


 

◆ ServletContextListener API

 

 

- 웹 어플리케이션이 초기화되고 제거되는 이벤트를 감지하는 역할

 

 

※ 리스너 등록 방법

ServletContextListener 인터페이스를 구현하는 클래스를 작성한다.

이후, web.xml에 구현한 클래스를 태그로 등록하거나 @WebListener 어노테이션을 이용한다. 

 

1) web.xml 등록 

- <listener> 태그로 이용하여 지정

<listener>
     <listener-class>com.test2.ContextListenerImpl</listener-class>
</listener>

 

2) @WebListener 어노테이션 이용

- ServletContextListener 인터페이스를 구현하는 클래스에 @WebListener 어노테이션을 추가

 

 


 

◆ Filter API

 

- 웹 컴포넌트가 실행되기 전의 선처리(pre-processing/Request Filter)) 작업과

   응답되기 전의 후처리(post-processing/(Response Filter)) 작업을 수행하는 API

- 다수의 Filter 등록이 가능하며, 등록시킨 순서대로 Filter가 수행 => "필터체인"

 

※ 필터 적용 방법

Filter 인터페이스를 구현한 클래스를 작성한다.

이후, web.xml에 구현한 클래스를 태그로 등록하거나 @WebFilter어노테이션을 이용한다. 

 

1) web.xml 등록

- <filter > 태그로 이용하여 지정

<filter>
     <filter-name>myFilter</filter-name>
     <filter-class>com.test2.MyFilter</filter-class>
</filter>
<filter-mapping>
     <filter-name>myFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

 

2) @WebFilter어노테이션 이용

- Filter 인터페이스를 구현하는 클래스에 @WebFilter어노테이션을 추가

 

 

 

관련글 더보기