Servlet 작동 순서
클라이언트에서 Servlet요청이 들어오면 서버에서는 Servlet컨테이너를 만들고 요청이 있을 때마다 스레드가 생성된다.
MultiThread를 사용하면 다른 CGI(Common Gateway Interface)언어들에 비해 서버 부하가 적게 발생하기에 속도가 빠르다.(서버의 부하가 안 걸리는 건 아님)
따라서 서버를 효율적으로 운영해나갈 수 있다.
Servlet 라이프사이클(생명주기)
Servlet의 사용도가 높은 이유는 빠른 응답 속도때문이다.
Servlet은 최초 요청 시 객체를 만들어져 메모리에 로딩되고 이후 요청 시에는 기존의 객체를 활용하게 됨으로 동작 속도가 빠르다.
Service()는 doGet, doPost가 없으면 service 메소드가 실행된다.
같이있으면 Service 메소드 롤백으로 들어온다.
doGet, doPost는 둘 중에 하나만 실행된다.
출력결과
init은 요청 시 한번만, doGet은 요청 시 계속 실행
Servlet 선처리, 후처리
Servlet의 라이프 사이클 중 init()과 destroy() 메소드와 관련하여 선처리(init()전)와 후처리(destroy()후) 작업이 가능하다.
@ : annotation
PostConstruct: 선처리로 메소드를 선언해주면 init메소드를 호출하기 전에 한번 실행됨
PreDestory : 후처리로 메소드를 선언해주면 그 메소드가 마지막에 한번 실행됨
(init, destroy처럼 슈퍼클래스에서 오버라이드하는 것이 아니다. 내가 임의로 만든 다음에 어노테이션을 사용해서 이 메소드가 선처리/후처리가 되는 것이라고 해주는 것이다.)
출력결과
init이 호출되기 전에 initPostConstruct가 호출되었고
destroy가 호출된 후에 destroyPreDestroy가 호출되었다는 것을 볼 수 있다.
출처
Seoul Wiz, 신입SW인력을 위한 실전 JSP Servlet 동영상과정, https://www.youtube.com/watch?v=APJAJeePl4g&list=PLYBmkgNU_x7Zj0nCzt5D0qV33C_rU1NK2