본문 바로가기

개발/Java

[JAVA - WEB] 서블릿 바인딩(binding)

728x90
반응형
바인딩

 

바인딩의 사전적 의미는 '두 개를 하나로 묶는다' 입니다. 
웹 프로그램 실행 시 데이터를 서블릿 관련 객체에 저장하는 방법으로 주로 HttpServletRequest, HttpSession, ServletContext 객체에서 사용되며 저장된 데이터는 프로그램 실행 시 서블릿이나 JSP 에 공유하여 사용합니다.
따라서 서블릿에서 다른 서블릿 또는 JSP 로 대량의 데이터를 공유하거나 전달하고 싶을때 바인딩 기능을 사용합니다.

 

 

바인딩 관련 메서드

 

메서드 기능
setAttribute(String name, Object obj) 데이터를 각 객체에 바인딩합니다.
getAttribute(String name) 각 객체에 바인딩 된 데이터를 name 으로 가져옵니다.
removeAttribute(String name) 각 객체에 바인딩 된 데이터를 name 으로 삭제합니다.

 

회원 정보를 전달하는 소스코드 예시입니다.

 

private void doHandle(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	request.setCharacterEncoding("utf-8");
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	MemberDAO dao = new MemberDAO();
	List membersList = dao.listMembers();
	request.setAttribute("membersList", membersList);
	RequestDispatcher dispatch = request.getRequestDispatcher("viewMembers");
	dispatch.forward(request, response);
}

 

 

 

ServletContext

 

ServletContext 클래스는 톰캣 컨테이너 실행 시 각 컨텍스트(웹 애플리케이션)마다 한 개의 ServletContext 객체를 생성합니다.
그리고 톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸됩니다. 
ServletContext 객체는 웹 애플리케이션이 실행되면서 애플리케이션 전체의 공통 데이터나 정보를 미리 바인딩해서 서블릿들이 공유하여 사용합니다.
javax.servlet.ServletContext 로 정의되어 있으며 제공하는 기능은 파일접근, 데이터 바인딩, 로그파일, 설정 정보 제공 등이 있습니다.

 

 

ServletContext 메서드

 

메서드 기능
getAttribute(String name) 주어진 name 을 이용해 바인딩 된 value 를 가져옵니다.
name 이 존재하지 않으면 null 을 반환합니다.
getAttributeNames() 바인딩 된 속성들의 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 에 대한 해당 웹 애플리케이션의 이름을 반환합니다.
log(String msg) 로그 파일에 로그를 기록합니다.
removeAttribute(String name) 해당 name 으로 ServletContext 에 바인딩 된 객체를 삭제합니다.
setAttribute(String name, Object obj) 해당 name 으로 객체를 ServletContext 에 바인딩합니다.
setInitParameter(String name, Object obj) 주어진 name 으로 value 를 컨텍스트 초기화 매개변수로 설정합니다.

 

 

 

ServletContext 바인딩

 

// setAttribute
ServletContext context = getServletContext();
List member = new ArrayList();
...
context.setAttribute("member", member);



// getAttribute
ServletContext context = getServletContext();				 
List member = (ArrayList)context.getAttribute("member");
...

 

 

 

ServletContext 의 매개변수 설정

 

web.xml 에 파라미터를 설정합니다.

 

<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.xml 의 파라미터 설정 값을 가져와서 사용합니다.

 

ServletContext context = getServletContext();
String menu_member = context.getInitParameter("menu_member");
String menu_order = context.getInitParameter("menu_order");
String menu_goods =context.getInitParameter("menu_goods");
...

 

모두 작성한 후 웹 브라우저로 요청(http://localhost:8090/pro08/initMenu)합니다.

 

 

 

 

 

ServletContext 파일 입출력

 

먼저 읽어올 파일을 생성하여 작성합니다.

 

WEB-INF 폴더를 선택하여 마우스 오른쪽 버튼 클릭 후 New - Folder 를 선택합니다.

 

 

폴더 이름을 입력하고 Finish 를 클릭합니다.

 

 

생성된 폴더에 마우스 오른쪽 버튼을 클릭하고 New - File 을 선택하고 파일 이름을 입력 후 Finish 를 클릭합니다.

 

 

생성된 파일에 이전에 입력했던 메뉴 항목들을 쭉 작성하고 저장합니다.

작성된 파일의 내용을 읽어와서 사용합니다.(getResourceAsStream 사용)

 

ServletContext context = getServletContext();
InputStream is = context.getResourceAsStream("/WEB-INF/bin/menu.txt");
BufferedReader buffer = new BufferedReader(new InputStreamReader(is));
// ... while( (menu = buffer.readLine()) != null ) 
// { 
//	StringTokenizer tokens = new StringTokenizer(menu, ",");
// ...

 

모두 작성한 후 웹 브라우저로 요청합니다.

 

 

파일의 내용이 로드되어 웹 브라우저에 표시되는 것을 확인하실 수 있습니다.

 

 

여기까지 임미다.

728x90