-
서블릿 ServletServlet 2023. 11. 29. 06:22
Servlet을 발전시킨 것이 Spring이다.
Spring은 Servlet을 이용한다!
가볍게 알아두면 좋은 내용 정리 ✏️
Servlet과 Spring Controller 비교
1. Annotation
- Servlet : @WebServlet
- Spring Controller : @Controller + @RequestMapping
@WebServlet
은@Controller
와@RequestMapping
을 합쳐놓은 것이다.Servlet은 HttpServlet 클래스를 상속받아야 한다.
클래스 상속은 단 하나만 받을 수 있기 때문에,
Spring Controller에서는 이를 개선하여 상속 없이
@Controller
선언만으로 사용할 수 있게 되었다.2. 경로 Mapping
Setvlet은 경로 Mapping을 클래스 선언부에 사용하는
@WebServlet
어노테이션에서만 할 수 있기 때문에, 경로 별로 클래스를 각각 만들어야 한다.Spring Contoller는 경로 Mapping을 메서드 선언부에 사용하는
@RequestMapping, @PutMapping, @GetMapping 등
어노테이션을 제공하여 도메인 단위, 서비스 단위 등 원하는 방향으로 클래스를 구성할 수 있다.3. 서블릿의 생명 주기
서블릿 구성
- init()
서블릿에 대한 요청을 받으면, 서블릿 인스턴스가 있는지 확인 후
인스턴스가 없는 경우에 init()을 통해 서블릿 클래스를 로딩하고, 인스턴스를 생성한다.
인스턴스가 있는 경우에 init()을 거치지 않고 service()를 실행한다.
서블릿도, Spring도 기본적으로 Singleton 패턴이 적용되어 있다. - service()
- destroy()
일반적으로 프로그램 종료 시 호출됨
이 메서드들은 Servlet Container가 관리하기 때문에, 우리는 각각의 메서드에 내용만 작성하면 된다.
@WebServlet("/main") public class HelloServlet extends HttpServlet { @Override public void init() throws ServletExeption { // 서블릿이 생성 또는 리로드 될 때 , 단 한번만 수행 됨 } @Override public void service(HttpServletRequest req, HttpServletResponse res) { // 1. 입력 // 2. 처리 // 3. 출력 } @Override public void destroy() { // 서블릿이 메모리에서 해제될 때 . 단 한번만 수행 됨 } }
4. init
Servlet : Lazy Init Spring : Early Init
둘 다 싱글톤으로 되어 있어서 하나의 객체를 반복해서 재사용하지만,
차이점으로는 기본적으로 Servlet은 요청이 왔을 때 초기화를 진행하여 지연된 초기화 Lazy init 을 하고, Spring은 프로그램 시작 시 초기화를 진행하여 빠른 초기화 Eary init 을 한다.그렇기 때문에 Servlet은 첫 요청 시 반응 시간이 소요될 수 있고 Spring은 프로그램 Run 시간을 길게 사용한다.
Servlet도 설정하면 Eary Init을 하게 할 수도 있다고 한다.
'Servlet' 카테고리의 다른 글
HttpServletRequest로 URL 정보 가져오기 (0) 2023.11.28 HttpServletResponse로 브라우저에 문자열 출력하기 (0) 2023.11.28