티스토리 뷰

반응형

ServletContext

- ServletContext 클래스는 톰캣 컨테이너 실행 컨텍스트( 애플리케이션)마다 개의 ServletContext객체를 생성한다. 그리고 톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸된다.

- ServletContext객체는 애플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서
서블릿들이 공유하여 사용한다.

 

ServletContext 클래스의 특징

  • javax.servlet.ServletContext로 정의되어 있다.
  • 서블릿과 컨테이너 간의 연동을 위해 사용한다.
  • 컨텍스트(웹 애플리케이션)마다 하나의 ServletConext가 생성된다.
  • 서블릿끼리 자원(데이터)을 공유하는 데 사용한다.
  • 컨테이너 실행 시 생성되고 컨테이너 종료 시 소멸된다.

 

Servlet Context 제공 기능

  • 서블릿에서 파일 접근 기능
  • 자원 바인딩 기능
  • 로그 파일 기능
  • 컨텍스트에서 제공하는 설정 정보 제공 기능

ServletContext 메서드

메서드 기능
getAttribute(String name) - 주어진 name 이용해 바인딩된 value 가져온다.
- name 존재하지 않으면 null 반환
getAttibuteNames() 바인딩된 속성들의 name 반환한다.
getContext(String uripath) 지정한 uripath 해당되는 객체를 반환한다.
getInitParameter(String name) - name 해당되는 매개변수의 초기화 값을 반환한다.
- name 해당되는 매개변수가 존재하지 않으면 null 반환
getInitParameterNames() - 컨텍스트의 초기화 관련 매개변수들의 이름들을 String 객체가 저장된 Enumeration
타입으로 반환한다.

- 매개변수가 존재하지 않으면 null 반환한다.
getMajorVersion() 서블릿 컨테이너가 지원하는 주요 서블릿 API 버전을 반환
getRealPath(String path)( 지정한 path 해당되는 실제 경로를 반환
getResource(String path) 지정한 path 해당되는Resource 반환
getServerInfo() 현재 서블릿이 실행되고 있는 서블릿 컨테이너의 이름과 버전을 반환
getServletContextName() 해당 애플리케이션의 배치 관리자가 지정한 ServletContext 대한 해당
애플리케이션의 이름을 반환
removeAttribute(String name) 해당 name으로 ServletContext 바인딩된 객체를 제거한다.
setAttribute
(String name, Object obj)
해당 name으로 객체를 ServletContext 바인딩한다.
setInitParameter
(String name, String value)
주어진 name으로 value 컨텍스트 초기화 매개변수로 설정한다.
log(String msg) 로그 파일에 로그를 기록한다.

 

ServletContext 바인딩

- ServletContext 바인딩의 기능을 이용한다.

 

* SetServletContext.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SetServletContext
 */
@WebServlet("/cset")
public class SetServletContext extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// ServletContext 객체를 가져옴
		ServletContext context = getServletContext();
		
		List member = new ArrayList();
		member.add("이순신");
		member.add(30);
		
		// ServletContext 객체에 데이터를 바인딩
		context.setAttribute("member", member);
		
		out.print("<html><body>");
		out.print("이순신과 30 설정");
		out.print("</body></html>");

	}

}

 

* GetServletContext.java

package servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class SetServletContext
 */
@WebServlet("/cget")
public class GetServletContext extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		
		ServletContext context = getServletContext();
		
		List member = (ArrayList) context.getAttribute("member");
		
		String name = (String) member.get(0);
		int age = (Integer)member.get(1);
		
		out.print("<html><body>");
		out.print(name + "<br>");
		out.print(age);
		out.print("</body></html>");


	}

}

 

- 코드 작성 후 톰캣을 재시작하고 브라우저에 localhost:[port]/[project_name]/cset 을 입력한다.

ServletContext에 바인딩

- 위 페이지에 접속 후 localhost:[port]/[project_name]/cget 에 접속한다.

ServletContext에 바인딩된 값 출력

 

- ServletContext 바인딩된 데이터는 모든 서블릿들(사용자) 접근할 있다. 따라서 웹 애플리케이션에서 모든
사용자가 공통으로 사용하는 데이터는 ServletContext에 바인딩해 놓고 사용하면
편리하다.

반응형

'Servlet' 카테고리의 다른 글

세션 트래킹 - 쿠키  (0) 2024.08.12
세션 트래킹  (0) 2024.08.12
서블릿 - 바인딩  (1) 2024.08.12
서블릿 포워드(Forward)  (0) 2024.08.12
서블릿 - 비즈니스 로직(회원 정보 삭제)  (0) 2024.08.11
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
글 보관함