본문 바로가기

DEVELOPER/Programming

ServletContext

반응형

ServletContext 클래스


ServletContext 클래스는

톰캣 컨테이너 실행 시 각 컨텍스트(앱 애플리케이션)마다 한 개의 ServletContext 객체를 생성

그리고 톰캣 컨테이너가 종료하면 ServletContext 객체 소멸

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

 

ServletContext가 제공하는 기능


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

 


① ServletContext 바인딩 기능

getServletContext( ) 메서드를 이용해 ServletContext 객체에 접근

다음 ArrayList에 이름과 나이를 저장한 후 다시 ServletContext객체 setAttribute( ) 메서드를 이용해 바인딩

ServletContext context = getServletContext();  //ServletContext 객체를 가져옴.

context.setAttribute(String arg0,Object arg1);  //ServletContext 객체에 데이터를 바인딩

바인딩된 정보는 먼저 ServletContext 객체를 가져온 후 getAttribute( ) 메서드를 이용해서 출력

ServletContext context = getServletContext(); // ServletContext 객체를 가져옴

String name = (String)context.getAttribute(String arg0); // 바인딩 된 정보를 name에 저장

 


② ServletContext 매개변수 설정 기능

공통으로 사용하는 기능을 web.xml에 설정하고 프로그램 시작 시 초기화 할 때 가져와서 사용

web.xml에는 <context-param><param-name>,<param-value>를 사용하여 작성

- web.xml 예시

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">

	<context-param>
		<param-name>menu_member</param-name>
		<param-value>회원등록 회원조회 회원수정</param-value>
	</context-param>
  	<context-param>
  		<param-name>menu_order</param-name>
  		<param-value>주문조회 주문등록 주문수정 주문삭제</param-value>
  	</context-param>
  	<context-param>
  		<param-name>menu_goods</param-name>
  		<param-value>상품조회 상품등록 상품수정 상품삭제</param-value>
  	</context-param>
  	
</web-app>

이렇게 설정된 내용은

getInitParameter( ) 메서드의 인자로 각각의 name을 전달한 후 항목들을 가져올 수 있음.

- ContextParamServlet 클래스 예시

ServletContext context = getServletContext();

String menu_member = context.getInitParameter("menu_member");

 


③ ServletContext의 파일 입출력 기능

ServletContext의 파일에서 데이터를 읽어 오는 기능

  1. WebContent/WEB-INF 폴더 안에 bin 폴더 생성
  2. bin 폴더 안에 txt 파일 생성
  3. 생성된 파일에 내용을 입력 후 저장

 

Servlet을 생성 후 getServletContext( ) 메서드로 ServletContext에 접근하여 getResourceAsStream( ) 메서드를 이용하여

읽어 들일 파일 위치를 저장한 후 파일에서 데이터를 입력 받음

- ContextFileServlet 클래스 예시

@WebServlet("/cfil")
public class ContextFileServlet extends HttpServlet {

   protected void doGet(HttpServletRequest... 생략...) throws... {

      response.setContentType("text/html;charset=utf-8");
      PrintWriter out = response.getWriter();

      ServletContext context = getServletContext(); //ServletContext 객체
      InputStream is = context.getResourceAsStream("/WEB-INF/bin/init.txt"); // 해당 위치의 파일 읽음
      BufferedReader buffer = new BufferedReader(new InputStreamReader(is));

      String menu = null;
      String menu_member = null;
      String menu_order = null;
      String menu_goods = null;

      while((menu=buffer.readLine()) != null) {

          StringTokenizer tokens = new StringTokenizer(menu, ","); // 콤마를 구분자로 항목을 분리

          menu_member = tokens.nextToken();
          menu_order = tokens.nextToken();
          menu_goods = tokens.nextToken();
      }

      out.println("<html><bodt>");
      ...
      ...생략


      out.close();
      
   }
}

 

반응형