작성
·
373
답변 1
9
안녕하세요. 지현명님, 공식 서포터즈 David입니다:)
.
예전에 @WebServlet이 없을 때에는 아래와 같이 web.xml을 통해 서블릿을 설정했었습니다.
.
<web-app>
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>servletexample.createHelloWorldExample
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorldExample/*</url-pattern>
</servlet-mapping>
</web-app>
.
그런데 @WebServlet이 추가되면서 굳이 서블릿 name을 사용할 필요가 없어졌습니다.
web.xml에서 서블릿을 지정해줄 때에는 서블릿 name과 서블릿 class 명시해줬습니다.
그리고 해당 서블릿에 할당될 url pattern을 추가할 때 url pattern이 어떤 서블릿에 속하는지 식별하기 위해 서블릿 name을 사용했습니다.
그러나 @WebServlet은 사용되어질 서블릿 class에 붙여서 사용하기 때문에 굳이 서블릿 name을 명시해줄 필요가 없어졌기 때문에 선택사항이 되었습니다.
내부적으로는 @WebServlet의 name 속성을 따로 명시하지 않으면 해당 클래스의 이름을 name 속성으로 사용합니다.
.
@WebServlet은 WebServletHandler에 의해 처리되는데 이때 handler가 @WebServlet의 name 속성을 사용하여 BeanDefinition을 만들게 됩니다.
.
감사합니다.
참고
* WebServletHander https://www.baeldung.com/spring-servletcomponentscan#under-the-hood
* Optional Attributes of @WebServlet https://docs.oracle.com/javaee/6/tutorial/doc/bnafu.html