위로 아래

ServletContext

  1. 웹 애플리케이션(프로젝트) 단위로 set, get 할 수 있는 데이터.
  2. Server 폴더의 server.xml 에 저장되어, 굳이 데이터를 전송하지 않아도 setServletContext로 데이터를 set하면 여러 서블릿에서 getServletContext로 데이터를 get할 수 있다. 
  3. 서버가 꺼지면 set이 해제되어서, 서버를 재실행하면 set을 다시 하고 get을 해주어야 한다. 
  4. 객체를 생성하고 써줘야 한다.

 

 


ServletContext 클래스

  1. 하나의 서블릿이 서블릿 컨테이너와 통신하기 위하여 사용되는 메소드들을 가지고 있는 클래스
  2. ServletContext 클래스는 톰캣 컨테이너 실행 시, 각 컨텍스트(웹 애플리케이션)마다 한 개의 ServletContext 객체를 생성하고 톰캣 컨테이너가 종료되면 ServletContext 객체도 소멸된다.
  3. ServletContext 객체는 웹 어플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하여 사용한다.
  4. 서블릿과 컨테이너 간의 연동을 위해 사용
  5. 서블릿끼리 자원을 공유하는 데 사용
  6. ServletConfig는 컨텍스트당이 아니라, 서블릿당 하나식 생성된다.
  7. javax.servlet.ServletContext로 정의

 

 

제공하는 기능

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

 

메소드

  1. getAttribute(String name) : 주어진 name을 이용해 value를 가져온다. (name이 없으면 null 반환)
  2. getAttributeNames() : 바인딩된 속성들의 name을 반환
  3. getContext(String uripath) : 지정한 uripath에 해당되는 객체 반환
  4. getInitParameter(String name) : name에 해당되는 매개변수의 초기화 값 반환. 없으면 null 반환
  5. getInitParameterNames() : 컨텍스트의 초기화 관련 매개변수들의 이름들을 String 객체가 저장된 Enumeration 타입으로 반환 (없으면 null 반환)
  6. getMajorVersion() : 서블릿 컨테이너가 지원하는 주요 서블릿 API 버전을 반환
  7. getRealPath(String path) : 지정한 path에 해당되는 실제 경로를 반환
  8. getResource(String path) : 지정한 path에 해당되는 Resource를 반환
  9. getServerInfo() : 현재 서블릿이 실행되고 있는 서블릿 컨테이너의 이름과 버전을 반환
  10. getServletContextName() : 해당 애플리케이션의 배치 관리자가 지정한 ServletContext에 대한 해당 웹 애플리케이션의 이름을 반환
  11. log(String msg) : 로그 파일에 로그를 기록
  12. removeAttrivute(String name) : 해당 name으로 ServletContext에 바인딩된 객체를 제거
  13. setAttribute(String name, Object object) : 해당 name으로 객체를 ServletContext에 바인딩
  14. setInitPrameter(String name, String value) : 주어진 name으로 value를 컨텍스트 초기화 매개변수로 설정

 

예시

더보기
// SetServletContext 서블릿
import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;

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;

@WebServlet("/cset")
public class SetServletContext extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	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 = new ArrayList();
		member.add("이순신");
		member.add(30);
		context.setAttribute("member", member);
		out.print("<html><body>");
		out.print("이순신과 30 설정");
		out.print("</body></html>");
		}
}
//GetServletContext 서블릿
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;

@WebServlet("/cget")
public class GetServletContext extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	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 + "<br>");
		out.print("</body></html>");
	}

}

 

 

 

 


set 안 해주고 web.xml에 정의하기 (파라미터)

  1. web.xml에 <context-param>으로 context를 매개변수로 등록해놓으면, setServletContext해주지 않아도 getServletContext로 context 내에 저장된 데이터를 불러올 수 있다.
  2. 서버를 재실행해도 web.xml이 등록해주니까 set을 안 해주어도 된다.

 

web.xml에 등록하는 방법

<context-param>
	<param-name> 이름 </param-name>
	<param-value> 값 </param-value>
</context-param>

 

예시

더보기
<!-- 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">
  <display-name>webTec</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  <filter>
        <filter-name>Encoding Filter</filter-name>
        <filter-class>filter.CommonEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Encoding Filter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

	<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>
// ContextParamServlet 서블릿
import java.io.IOException;
import java.io.PrintWriter;

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;

@WebServlet("/initMenu")
public class ContextParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		ServletContext context = getServletContext();
		String menu_member = context.getInitParameter("menu_member");
		String menu_order = context.getInitParameter("menu_order");
		String menu_goods = context.getInitParameter("menu_goods");
		
		out.print("<html><body>");
		out.print("<table border=1 cellspacing=0><tr>메뉴 이름</tr>");
		out.print("<tr><td>"+ menu_member +"</td></tr>");
		out.print("<tr><td>"+ menu_order +"</td></tr>");
		out.print("<tr><td>"+ menu_goods +"</td></tr>");
		out.print("</tr></table></body></html>");
	}
}

 

 

 

 


Context 파일 입출력

  1. InputStram과 getgetResourceAsStream을 이용해서 set 없이 파일을 get해서 정보를 불러올 수 있다.

예시

더보기
<!-- WEB-INF > bin > init.txt파일 -->
회원등록 회원조회 회원수정, 주문조회 주문수정 주문취소, 상품조회 상품등록 상품수정 상품삭제
//ContextFileServlet 서블릿
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.util.StringTokenizer;

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;

@WebServlet("/cfile")
public class ContextFileServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		ServletContext context = getServletContext();
		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.print("<html><body>");
		out.print(menu_member + "<br>");
		out.print(menu_order + "<br>");
		out.print(menu_goods + "<br>");
		out.print("</body></html>");
		out.close();
	}
}