클라이언트의 요청을 처리하고 결과를 반환하는 자바 웹 프로그래밍 기술
일반적으로 서블릿은 "서블릿 컨테이너"에서 관리함
❓ web.xml
웹 서버의 환경설정 파일로, web.xml 파일에 서블릿을 등록하려면 다음과 같이 <servlet> 태그를 추가함<servlet> <servlet-name>initParam</servlet-name> <servlet-class>com.edu.test.InitParamServlet</servlet-> class> <init-param> <param-name>id</param-name> <param-value>guest</param-value> </init-param> <init-param> <param-name>password</param-name> <param-value>1004</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet>
// 서블릿 클래스의 형식
public class FirstServlet extends HttpServlet {
@Override
public void init() { ... }
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) { ... }
@Override
public void destroy() { ... }
}
서블릿의 생성, 실행, 파괴를 담당함. 즉, 서블릿을 위한 상자(Container)다!
서블릿 컨테이너는 Client의 Request를 받아주고 Response할 수 있게, 웹 서버와 소켓을 만들어 통신함
즉, WAS는 Web Server + Web Container(Sevlet Container)로 되어있기 때문에,
정적 컨텐츠를 제공하면서도(Web Server), 웹 컨테이너를 이용해 내부 로직을 거쳐 동적 페이지(Web Container)를 보여줄 수 있는 것
디스패처 서블릿이 등장하기 전에는, 모든 서블릿을 URL 매핑을 위해 web.xml에 모두 등록해주어야 했음
-> 디스패처 서블릿이 등장함에 따라 web.xml의 역할을 상당히 축소시켜줌
요청 정보를 기준으로 어떤 컨트롤러를 사용할지 선정하는 인터페이스
핸들러 매핑 인터페이스는 여러 구현체를 가지며, 대표적인 구현체 클래스는 다음과 같음
BeanNameUrlHandlerMapping
ControllerClassNameHandlerMapping
SimpleUrlHandlerMapping
DefaultAnnotationHandlerMapping
애플리케이션의 컴포넌트를 유사 관심사를 기준으로, 레이어로 묶어 수평적으로 구성한 구조
일반적으로 3계층 또는 4계층으로 구성됨
스프링부트는 별도의 설정 없이 spring-boot-starter-web의 의존성을 사용할 때는 기본적으로 스프링 MVC의 구조를 띄게 됨
Spring MVC는 Model-View-Controller의 구조로,
View나 Controller는 프레젠테이션 계층 영역이며, Model은 비즈니스와 데이터 접근 계층의 영역으로 구분할 수 있음
도서 '스프링부트 핵심 가이드'
https://mangkyu.tistory.com/14
https://jh2021.tistory.com/20
https://kgvovc.tistory.com/35
https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80
https://mangkyu.tistory.com/18
https://ksabs.tistory.com/250
https://velog.io/@hsw0194/Spring-MVC-HandlerMapping의-동작방식-이해하기-1편
https://velog.io/@han_been/서블릿-컨테이너Servlet-Container-란
https://www.inflearn.com/questions/505167/서블릿-컨테이너-was가-헷갈립니다