바인딩
바인딩의 사전적 의미는 '두 개를 하나로 묶는다' 입니다.
웹 프로그램 실행 시 데이터를 서블릿 관련 객체에 저장하는 방법으로 주로 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, ",");
// ...
모두 작성한 후 웹 브라우저로 요청합니다.
파일의 내용이 로드되어 웹 브라우저에 표시되는 것을 확인하실 수 있습니다.
여기까지 임미다.
'개발 > Java' 카테고리의 다른 글
[JAVA - WEB] JSP 정의와 구성 요소 (0) | 2022.11.06 |
---|---|
[JAVA - WEB] 서블릿 리스너(Listener) (0) | 2022.11.05 |
[JAVA - WEB] 서블릿 필터(Filter) (0) | 2022.11.05 |
[JAVA - WEB] 세션(Session) (1) | 2022.11.03 |
[JAVA - WEB] 쿠키(Cookie) (0) | 2022.11.03 |
[JAVA - WEB] 서블릿 포워드(forward) (0) | 2022.11.02 |
[JAVA - WEB] 서블릿과 데이터베이스 (0) | 2022.11.02 |
[ Eclipse ] 소스 정렬 방법 (0) | 2022.11.01 |
[JAVA - WEB] 서블릿 요청 및 데이터 전송 (1) | 2022.10.31 |
[JAVA - WEB] 서블릿 기본 (1) | 2022.10.31 |