GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Servlet

WAS 와 Servlet, lifecycle

Backcoder 2022. 8. 5. 21:30

[ Web Server ]

Web Client : 웹브라우저쪽 
=> HTML / CSS / JS / 

- Web Application Server :  서버쪽 
=> Servlet / JSP / Spring MVC / mybatis 

=> HTTP 요청 응답 방식으로 두 단이 통신

- jsp 파일 
: HTML 태그 + 자바문장 뒤섞인 것 

=> jsp 파일이 들어오면 
- HTML 파일은 WS에서 그대로 보내주고
- 자바문장은 웹서버(WAS)에서 처리하고 응답 

WS+ JSP container / Servlet container = WAS ( Tomcat )

정적인 WS 의 한계를 극복하고 동적인 웹페이지를 구현하기 위해 
나온 것이 Servlet 이고, 이걸 발전시켜서 나온것이 JSP
JSP 에서 발전해서 나온것이 Spring MVC 방식이다 

 

 

 

[ Servlet ] 

- 클라이언트에서 (자바) 로직실행이 필요한 요청이 들어오면
WS는 이를 실행할 수 없음 => WAS 에 위임 
=> WAS(Servlet container)에서 Servlet 이 이를 실행하고 결과반환 
=> 클라이언트에 응답 

- 서블릿은 기본적으로 멀티스레드 방식으로 동작한다 ( WAS 내장 ) 
- 기본적으로 자바 클래스다. 
=> extends HttpServlet  상속해서 메소드 사용 
( 메소드 override 해서 구현 ) 

 

[ Life Cycle ] 

 

- doGet( ) / doPost( ) 
: 가장 기본 메소드로, ( 필수 구현 )
클라이언트 요청이 들어올때마다 실행할 로직을 오버라이딩해서 구현해 놓고 사용 

- init( ) 
: 서버 시작되고, 서블릿 객체 생성하고 메모리 로드될때 처음에 한번 만 호출 
이때 실행할 로직을 구현해 놓고 사용
- 예를들어 DB driver 호출하는 class.forName 같은 로직을 
init 메소드에 구현해 놓고 사용한다. 
( 클라1 요청시에만 호출. 클라2요청은 서버시작후 최초가 아님) 

 


- destroy( )
: 현재 서블릿이 메모리에서 삭제될 때 호출 
이때 실행할 로직을 구현해 놓고 사용
=> 저장,컴파일 해서, 전에 있던 메모리가 destroy삭제될 때 destroy메소드가 호출된다. 
=> 저장, 재실행 할 때 실행할 로직을 구현 ( 삭제시키기 등 )


=> init 메소드로 시작해 doGet/doPost 메소드로 클라이언트 요청을 실행하고 
destroy 메소드까지 실행되는 과정을 servlet의 life Cycle (생명주기)라고 한다. 
( init / destroy 는 필요 시, doGet/doPost는 필수구현 )