21 03 06 (서블릿, JSP)
1. 서블릿(Servlet)
클라이언트의 요청을 처리하고, 그 결과를 반환하는
Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
서블릿의 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- MVC 패턴에서 Controller로 이용된다.
- Java Thread를 이용하여 동작한다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
- html을 사용하여 요청에 응답 할 수 있다.
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.
2.서블릿 컨테이너(Servlet Container)
서블릿을 관리해주는 컨테이너
- 서블릿을 만들었다고 해서 스스로작동하는 것이 아니고, 서블릿을 제어 해주는 역할이 필요한데, 그 역할을 서블릿 컨테이너가 가짐
서블릿 컨테이너의 역할
1. 웹서버와의 통신 서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해줍니다. 일반적으로 우리는 소켓을 만들고 listen, accept 등을 해야하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다. 그래서 개발자가 서블릿에 구현해야 할 비지니스 로직에 대해서 집중 할 수있게 도와줍니다.
2. 서블릿 생명주기(Life Cycle 관리)
서블릿의 시작과 끝을 관리합니다.
- 요청받음 : 클라이언트가 서비스 요청시 HTTP 프로토콜 기반으로 요청정보가 만들어져 웹서버에 전달
- 웹서버에서 컨테이너 : 웹서버에서는 전달 받은 요청을 살펴보고 요청받은 정보가 서블릿이라면 서블릿 컨테이너에게 넘김
- URL 매핑 확인 : 서블릿 매핑이 담긴 문서(web.xml or @WebServlet)를 참조하여 어떤 URL과 매핑되었는지 확인하고
- 최초 요청 여부 판단 : 매핑된 서블릿을 실행하는데 컨테이너는 해당 서블릿이 메모리에 있는지 확인하고
- 서블릿 객체 생성 : 최초의 서블릿이라면 해당 서블릿을 메모리에 로딩하고 서블릿 객체를 생성합니다.
- init() 메소드 실행 : init()은 서블릿객체가 생성된 다음에 호출되는 메소드로 서블릿객체의 초기화 작업이 구현되있습니다.
- HttpRequest,Response 객체 생성
- Service 메소드 실행 : Service 메서드는 HTTP 요청의 METHOD에 대응되는 메서드를 호출한다.(form tag에서 method 부분)
- destroy 메소드 실행 : 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.
JSP(Java Server Page)
- JSP란 HTML 코드에 JAVA 코드를 넣어 동적웹페이지를 생성하는 웹어플리케이션 도구
- JSP는 WAS(Web Application Server)에 의하여 서블릿 클래스로 변환하여 사용됨
JSP 동작 과정
- 클라이언트로 JSP 파일 요청이 들어오면 .java(Servlet)파일로 변환(Translation)
- 컴파일하여 .class 파일이 만들어짐
- 컴파일된 서블릿 클래스는 서블릿 컨테이너에 의해서 서블릿 객체로 동작.
- jspInit, jspService, jspDestory 과정 실행
## References.
https://mangkyu.tistory.com/14
https://hackr.io/blog/jsp-interview-questions
https://altera520.github.io/posts