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의 파일에서 데이터를 읽어 오는 기능
- WebContent/WEB-INF 폴더 안에 bin 폴더 생성
- bin 폴더 안에 txt 파일 생성
- 생성된 파일에 내용을 입력 후 저장
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();
}
}
'개발 > Programming' 카테고리의 다른 글
웹 페이지 연결 기능(Session Tracking) (0) | 2021.06.18 |
---|---|
ServletConfig 와 load-on-startup 기능 (0) | 2021.06.13 |
서블릿 포워드 와 바인딩 기능 (0) | 2021.06.10 |
[ORACLE] ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다. (0) | 2021.05.22 |
서블릿(Servlet) (0) | 2021.05.14 |