web.xml에서
<servlet>
태그와<servlet-mapping>
태그를 이용해 서블릿을 매핑한다.
<servlet-name>
태그의 값 aaa와 bbb가<servlet>
과<servlet-mapping>
을 연결시켜 준다.
<servlet>
: 브라우저에서 요청하는 매핑 이름에 대해 실제로 실행하는 서블릿 클래스를 설정하는 태그<sevlet-name>
: <servlet>
과 <servlet-mapping>
을 연결 시켜주는 태그<servlet-class>
: 브라우저에 요청하는 매핑 이름에 대해 실제로 기능을 수행하는 서블릿 클래스<servlet-mapping>
: 브라우저에서 요청하는 논리적인 서블릿을 설정<url-pattern>
: 클라이언트가 요청하는 논리적인 서블릿 이름먼저SecondServlet.java로 서블릿 클래스를 하나 생성했다.
SecondServlet.java에는 위와 같이 자바 코드를 작성했다.
HttpServlet을 상속받고 3개의 생명주기 메서드를 구현했으며 각 메서드는 호출 시 메시지만 출력하도록 작성했다.
web.xml을 통해 서블릿을 매핑하고, 서블릿 매핑 이름인 /second로 웹브라우저에서 요청해보았다.
이클립스 콘솔에 각각의 메서드가 호출되면서 메시지가 출력되었다.
맨 처음 브라우저에서 /second로 요청하면 최초의 요청이므로 SecondServlet 클래스의 init()을 호출해 초기화한 후 메모리에 로드되어 doGet() 메서드를 호출하여 서비스를 한다.
이 후 다른 부라우저에서 동일한 서블릿 매핑 이름인 /second로 요청하면 미리 메모리에 로드된 SecondServlet 클래스 서블릿이 재사용되므로 init()은 호출하지 않고 doGet()메서드만 호출되어 서비스한다.
출력 결과를 보면 init()은 최초에 한번만 호출하고, 이후에는 doGet()메서드만 호출되는 것을 확인할 수 있다.
(서블릿의 자세한 동작 과정을 알고싶다면 이곳을 클릭!)
에너테이션이란?
애너테이션은 소스 코드에 추가하여 사용할 수 있는 메타데이터(데이터를 위한 데이터)의 일종이다. 보통 @ 기호를 앞에 붙여서 사용한다. 간단히 말하면 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 제공하는 것이다.
여러 서블릿을 web.xml에 설정할 경우 복잡해진다는 단점이 있다. 따라서 각 서블릿 클래스에 기호(@)를 이용해서 서블릿 표시를 해주면 훨씬 가독성이 좋아진다.
애너테이션을 이용한 서블릿 매핑
@webServlet("/서블릿매핑이름") public class ThirdServlet extends HttpServlet { ... // 애너테이션을 이용해서 만드는 서블릿 클래스는 반드시 HttpServlet을 상속받아야 한다. }
new -> Servlet
클래스 이름으로 ThirdServlet을 입력하고 Next클릭
서블릿 매핑이름을 /third로 해주었다. 수정을 원할시 우측의 Edit을 통해 수정할 수 있다.
오버라이딩할 생명주기 메서드를 추가하고 Finish.
애너테이션에 수정한 매핑 이름이 추가된 것을 확인할 수 있다.
다음과 같이 코드를 작성했다. 위의 web.xml 매핑 실습에서 처럼 각 메서드는 호출되면 메시지를 출력한다.
이제 웹 브라우저에서 서블릿 매핑 이름 /third로 요청해보겠다.
이클립스 콘솔에 각각의 메서드가 호출되면서 메시지가 출력되었다.
참고로 애너테이션을 사용할 때는 매핑 이름이 다른 매핑 이름과 중복되지 않도록 주의해야 한다.