이전 게시글에서 xml 매핑에 대해서 알아봤다.
더 편하고 간단한 annotation 매핑에 대해서 알아보자.
public class LifeCycleTestServlet extends HttpServlet {
// 메소드 호출 횟수를 카운트하기 위한 용도의 필드
private int initCount = 1;
private int serviceCount = 1;
private int destroyCount = 1;
// 서블릿의 요청이 최초인 경우 한 번 동작하는 메소드
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("annotation 매핑 init() 메소드 호출 : " + initCount++);
}
//서블릿 컨테이너에 의해 호출되며 최초 요청시에는 init()이후에 동작하고, 두 번째 요청부터는 바로 service()를 호출
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException{
System.out.println("annotation 매핑 service() 메소드 호출 : " + serviceCount++);
}
//컨테이너가 종료될 때 호출되는 메소드이며 주로 자원을 반납하는 용도로 사용
@Override
public void destroy() {
System.out.println("annotation 매핑 destroy() 메소드 호출 : " + destroyCount++);
}
}
이전 게시글에서 xml매핑과 작성은 동일하고, xml을 annotation으로 수정해준다.
위에 WebServlet을 annotation 달아준다.
Project Explorer에서 Servlet Mappings를 보면 annotation과 xml이 어떤거와 mapping 되어있는지 확인 가능하다.
기존 index.html에 annotation용 라이프사이클테스트를 추가해준다.
웹에서 태그된 것을 누르면 annotation init, service 메소드가 호출된 것 확인된다.
laod되는 순간을 수행하겠다는 loadOnStartUp = 1이란 구문을 annotation에 추가한다.
loadOnStartUp에 우선순위를 지정하면(낮을수록 우선순위가 높다) 웹에서 실행되지 않아도 서버가 start될 때 인스턴스를 생성하고 init메소드를 호출한다.
web-xml에 load-on-startup 100으로 설정해주면
이전에 설정한 xml 매핑도 함께 호출된다.
이전엔 class를 만들어서 작성해주었는데, 이제부터는 servlet을 만들어서 동작시킨다.
url mapping은 내가 원하는 이름으로 수정해준다. (기본으로 클래스 이름으로 지정됨)
나중에 HTTP를 대체할 프로토콜이 존재한다면 HttpServletRequest는 다른 클래스로 대체되어야 한다.
따라서 ServletRequest라는 추상화된 타입으로 사용하고, 실제 인스턴스는 HttpServletRequest로 사용하게 되면
나중에 service 메소드의 인자 타입은 변경하지 않고 다른 프로토콜을 사용하는 Request로 변경이 가능할 것이다(다형성)
하위타입으로 다운캐스팅 한 뒤 요청받은 http 메소드가 어떤 메소드인지를 판단한다.
index.html 코드
위의 서비스 메소드 요청하기, get방식 요청 전송, post방시 요청 전송을 클릭하면 아래와 같은 콘솔창이 뜬다.
GET, POST 요청을 처리할 메소드로 요청과 응답 정보를 전달한다.
테스트할 목적으로 출력문 작성해준다.
'TIL > Servlet' 카테고리의 다른 글
[Servlet] mvc-1 (0) | 2022.03.18 |
---|---|
[Servlet] forward, redirect, cookie (0) | 2022.03.10 |
[Servlet] response, exception-handler (0) | 2022.03.07 |
[Servlet] Parameter(getParameter..) (0) | 2022.03.03 |
[Servlet] CGI, WAS, 톰캣 다운로드, 서블릿 라이프 사이클 (0) | 2022.03.02 |