바인딩
관련 메서드 |
기능 |
setAttribute(String name, Object obj) |
자원(데이터)을 각 객체에 바인딩 |
getAttribute(String name) |
각 객체에 바인딩된 자원(데이터)을 name으로 가져옴 |
removeAttribute(String name) |
각 객체에 바인딩된 자원(데이터)을 name으로 제거 |
HttpServletRequest를 이용한 redirect/refresh/location 포워딩 시 바인딩
-
처음 웹 브라우저에서 서블릿으로 요청하면, 서블릿에서 웹 브라우저에 재 요청할 정보를 주고, 웹 브라우저에서 재 요청
-
즉 첫 번째 요청과 두 번째 요청이 각기 별개의 요청(다른 요청)
-
그러므로 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없음
-
GET 방식을 쓰면 되는게 아닌가?
HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩
-
첫 번째 서블릿에서 두 번째 서블릿으로 전달되는 request가 브라우저를 거치지 않고 바로 전달
- 첫 번째 서블릿의 request에 바인딩된 데이터가 그대로 전달
-
모델2, 스트럿츠, 스프링 프레임워크로 개발할 때 dispatch 방식으로 바인딩된 데이터를 서블릿이나 JSP로 전달
-
실습1. sec04.ex02 패키지 생성
-
실습2. FirstServlet 생성
-
실습4. 브라우저 테스트
- http://localhost:8090/pro08/firstDispatcher2
두 서블릿 간 회원 정보 조회 바인딩 실습
-
DB에서 조회된 회원 정보를 화면 기능을 담당하는 서블릿에 전달하여 웹 브라우저에 출력
-
실습1. sec04.ex03 생성, 7장의 MemberDAO와 MemberVO 클래스 복사
-
실습2. MemberServlet.java 생성
ServletContext와 ServletConfig 사용법
- 서블릿과 더불어 웹 프로그래밍 개발 시 유용한 기능을 제공하는 클래스들이 있음
ServletContext 클래스
메서드 |
기능 |
getAttribute(String name) |
- 주어진 name을 이용해 바인딩된 value를 가져옴 -name이 존재하지 않으면 null을 반환 |
getAttributeNames |
- 바인딩된 속성들의 name을 반환 |
getContext(String uripath) |
- 지정된 uripath에 해당되는 객체를 반환 |
getInitParameter(String name) |
- name에 해당하는 매개변수의 초기화 값을 반환 - name에 해당하는 매개변수가 존재하지 않으면 null을 반환 |
getInitParameterName() |
- 컨텍스트의 초기화 관련 매개변수들의 이름을 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 object) |
- 해당 name으로 객체를 ServletContext에 바인딩 |
setInitParameter(String name, String value) |
- 주어진 name으로 value를 컨텍스트 초기화 매개변수로 설정 |
ServletContext 바인딩 기능
- 실습 3. GetServletContext.java 수정
ServletContext의 매개변수 설정 기능
-
메뉴
-
대부분의 웹 애플리케이션에서 공통으로 사용하는 기능
-
web.xml에 설정해놓고 프로그램 시작 시 초기화할 때 가져와서 사용하면 편리
-
새로운 메뉴 항목이 생성되거나 기본 메뉴 항목을 추가, 삭제할 때도 쉽게 수정할 수 있음
-
ContextServlet 객체를 통해 접근하면 모든 웹 브라우저에서 공유하면서 접근할
-
실습 1. web.xml 파일
- 실습 2. sec05.ex02.ContextParamServlet.java 작성
ServletContext의 파일 입출력 기능
ServletConfig
-
ServletConfig
-
각 Servlet 객체에 대해 생성
-
ServletConfig 인터페이스를 GenericServlet 클래스가 실제로 구현
-
javax.servlet 패키지에 인터페이스로 선언
-
서블릿에 대한 여러가지 기능을 제공
-
각 서블릿에서만 접근할 수 있으며, 공유는 불가능
-
서블릿과 동일하게 생성되고, 서블릿이 소멸되면 같이 소멸
-
제공하는 기능
서블릿에 대한 초기화 작업 기능
서블릿에 대한 초기화 작업 기능(1) - @WebServlet 애너테이션
요소 |
설명 |
urlPatterns |
웹 브라우저에서 서블릿 요청시 사용하는 매핑 이름 |
name |
서블릿 이름 |
loadOnStartup |
컨테이너 실행 시 서블릿이 로드되는 순서 지정 |
initParams |
@WebinitParam 애너테이션을 이용해 매개변수를 추가하는 기능 |
description |
서블릿에 대한 설명 |
서블릿에 대한 초기화 작업 기능(1) - 편리하게 이클립스에서 서블릿을 생성할 때 @WebServlet의 값들을 설정
-
실습1. sec06.ex01 패키지 생성 > 마우스 우클릭 > New > Servlet
-
실습2. 클래스명 InitParamServlet > Next
-
실습3. Initialization parameters:의 Add… > 값 입력 > OK > 추가된 그리드 확인
-
Name : email, Value : admin@web.com
-
Name : tel, Value : 010-1111-2222
-
실습4. URL mappings:의 Remove > 기본값 제거
-
실습5. URL mappings:의 Add.. > 값 입력 > OK > 그리드 확인 > Next
-
Pattern : sInit
-
Pattern : sInit2
-
실습 6. Inherited abstract methods + doGet 체크 > Finish
-
실습8. 브라우저 호출
서블릿에 대한 초기화 작업 기능(2) - web.xml에 설정
load-on-startup 기능 사용하기
애너테이션을 이용하는 방법
-
특징
-
우선순위는 양의 정수로 지정하며 숫자가 작으면 우선순위가 높으므로 먼저 실행
-
톰캣 실행시 init() 메서드를 호출하면 getInitParameter() 메서드를 이용해 web.xml의 메뉴 정보를 읽은 후 다시 ServletContext 객체에 setAttribute() 메서드로 바인딩
-
브라우저에서 요청하면 web.xml이 아니라 ServletContext 객체에서 메뉴 항목을 가져온 후 출력 에서 ㅇ릭어 들여와 출력하는 것보다 빨리
-
실습 1. sec06.ex02 패키지 생성 > 마우스 우클릭 > New > Servlet
-
실습 2. 클래스명 : LoadAppConfig > Next >
-
실습 3. Name과 URL mapping을 loadConfig로 변경 > Next
- Name을 바꾸면 URL mapping도 동일하게 바뀜
-
실습 4. Inherited abstract methods, init, doGet 체크 > Finish
web.xml에 설정하는 방법