서블릿
서블릿은 웹을 통해 클라이언트와의 입출력을 수행하는 자바객체입니다.
서블릿은 클래스로부터 객체생성, 요청 처리를 위한 URL 매핑, 초기화설정은 톰캣 컨테이너가 수행하기 때문에 서블릿 관련 설정은 web.xml을 사용하여 설정을 합니다.
서블릿 클래스는 HttpServlet 클래스를 상속받아 doGet, doPost, init 메소드를 재정의하여 구현합니다.
doGet은 GET 요청 방식을 처리하고 doPost는 POST요청방식을 처리하며 init 메소드는 서블릿 객체가 처음 생성될 때 수행되는 초기화 메소드 입니다.
서블릿 객체 생성과 요청 경로 매핑
서블릿 클래스의 객체생성과 요청 경로 매핑은 web.xml을 이용하거나 어노테이션을 사용하여 설정할 수 있는데 어노테이션은 변경시 일일이 다 바꾸어 주어야 하므로 하드코딩이 되기 때문에 web.xml 방식을 주로 이용합니다.
web.xml에서 <servlet><servlet-name>으로 서블릿의 이름을 주고 <servlet-class>로 서블릿 클래스를 패키지.클래스로 줍니다.
요청경로매핑은 <servlet-mapping>에 <servlet-name>에 어떤 서블릿으로 처리할지 서블릿 이름을 주고 <url-pattern>으로 처리할 url패턴을 지정합니다. 그러면 해당 url을 요청 받으면 지정한 서블릿이 동작되게 됩니다.
서블릿 초기화
최초 요청시 서블릿이 생성되게 되는데 이때 서블릿 객체의 초기화를 위해 init 메소드를 사용하게 됩니다.
ServletConfig를 매개변수로 가지는 init 메소드와 매개변수를 가지지 않는 init 메소드 2가지가 있는데 ServletConfig매개변수를 가질 경우 내부적으로 매개변수를 가지지 않는 init 메소드를 호출하여 수행합니다. 그러므로 초기화가 필요하면 ServletConfig 매개변수를 가지는 init 메소드를 재정의하고 그렇지 않은경우는 매개변수를 가지지 않는 init 메소드를 재정의합니다.
서블릿 최초 요청시 URL매핑, 서블릿객체 생성, init메소드 수행이 일어나기 때문에 시간이 오래 걸립니다. 그러므로 서블릿이 처음 요청 될때보다 컨테이너가 처음 구동될때 미리 수행하는 것이 좋으므로 <load-on-startup>을 사용해 컨테이너 구동 단계에서 해당 작업이 수행되게 합니다.
초기화 정보들은 <init-param>으로 web.xml에 설정하고 init메소드에서 getInitParameter로 받아올 수 있습니다.
필터
필터는 서버자원 앞에 위치하여 요청이나 응답을 가로채 데이터를 변경하거나 필터에 정의된 특별한 기능을 수행할 수 있는 객체입니다. 주로 인코딩 작업을 수행합니다.
요청별로 구분하여 각 요청에 따라 기능을 수행할 수 있습니다.
필터는 중첩하여 여러개를 적용할 수 있습니다. 체인 형태를 형성하며 하나의 필터에서 용청과 응답 모두 처리합니다.
필터 클래스는 Filter 인터페이스를 이용해 init, doFilter, destroy 메소드를 재정의하여 생성 후 web.xml에 등록합니다.
doFilter 메소드는 필터를 사용하는 목적이므로 반드시 재정의 해야하고 FilterChain 매개변수를 사용해 필터와 필터를 연결 할 수 있습니다. 요청과 응답에 대한 필터기능을 각각 구현하여 사용합니다. init 메소드는 필터가 생성될때 필요한 초기화 작업을 수행하고 destroy메소드는 필터가 소멸될 때 사용한 자원을 회수하는 작업을 수행합니다.
필터 클래스를 작성후 web.xml에 <filter-mapping>의 <filter-name>에 사용할 필터를 지정하고 <url-pattern>으로 요청 경로 매핑을 지정합니다.<dispatcher>로 어떤 요청에 적용할지 설정합니다.
#Wrapper클래스
필터가 요청/응답 데이터를 변경할 때는 ServletRequestWrapper나 ServletResponseWrapper 클래스를 상속하여 Wrapper클래스를 정의 후 doFilter의 매개변수에서 request와 response 대신 사용합니다.
필터는 서블릿 앞에 위치하여 애플리케이션 전체에 적용될 내용을 작성합니다.
리스너
리스너는 애플리케이션 시작/종료시 컨테이너에 의해 호출되는 메소드를 선언한 인터페이스로 DB정보등록시 주로 사용됩니다.
class.forName()을 통해 드라이버로드를 하고 DrvierManager를 통해 connection 객체를 얻는 DB정보등록을 애플리케이션이 시작될 때 할 수 있습니다.
리스너는 web.xml에 <listner>로 등록할 수 있으며 리스너가 사용할 초기화 정보는 <contextParam>으로 등록할 수 있습니다.
'학습(구) > JSP' 카테고리의 다른 글
메서드 (0) | 2021.03.18 |
---|---|
모델1 구조와 모델2 구조/커맨드핸들러/MVC패턴 (0) | 2020.12.13 |
객체의 분류 (0) | 2020.11.19 |
디자인 패턴 - 행위 패턴 (0) | 2020.11.19 |
디자인 패턴 - 구조 패턴 (0) | 2020.11.16 |