반응형
JSP
jsp의 개념
- JSP(Java Server Page)는 Java를 이용하여 동적인 웹 페이지를 만들기 위해 Sun Microsystems사가 개발한 기술이다.
- 사용자의 요청에 맞는 결과를 동적으로 표시해주는 웹 페이지를 웹 서버 측에서 사용자에게 전송해 주기 위해서는 요청의 처리결과에 따라서 자동으로 응답을 생성할 수 있는 역할을 한다.
- html 코드 안에 java코드가 삽입된 형태이다.
- 〈%...%>,<%!...%>, <%=•••%> 와 같은 형태의 코드가 자바 코드이다.
JSP가 html과 java코드를 동시에 사용할 수 있는 이유
- JSP 파일이면 웹 컨테이너는 먼저 JSP 파일을 파싱(Pairsmg)하여 자바 코드로 변환한다.
- 파싱이란 코드를 해석해서 그에 맞는 변환 코드로 바꾸는 작업이다.
- 각각의 패그를 자동으로 감지하여 〈%...%>,<%!...%>, <%=•••%> 등 자바 코드 부분은 그대로 사용한다.
- 그 외의 H1ML 태그로 된 부분들은 서블릿 소스에서 write() 메소드를 사용하는 방식으로 변환한다.
- 자바 코드 파일을 컴파일하여 서블릿 클래스 파일을 작성한다.
- 만들어진 서블릿 클래스가 실행되면 가장 먼저 인스턴스를 생성하고 init() 메소드에 의해 초기화
- service() 메서드를doGet() 또는 doPost() 메소드가 실행되어 HTML 코드로 이루어진 결과 페이지가 생성한다.
Servlet
Servlet의 개념
- 브라우저는 기본적으로 HTML 형식의 문서만을 표시할 수 있기 때문에 동적인 처리 불가하다.
- 웹 서버 측에서 사용자의 요구에 따라 자동으로 생성된 HTML형식의 페이지를 생산해 전송해 줄 수 있는 여러 기술이 개발되었고 그중 자바 진영의 기술이다.
- 서블릿은 웹 서버 상에서 실행되는 자바의 클래스 파일이라고 할 수 있기 때문에 기본적으로 자바의 모든 API를 그대로 사용할 수 있으며 객체 지향성 등 자바의 장점을 모두 가질 수 있다.
Java class와의 차이점
- 서블릿은 반드시 javax.servlet.Servlet 인터페이스를 구현(Implements)해서 작성해야만 한다.
- 입력과 출력을 HTTP 프로토콜의 요청(Request)과 응답(Response)의 형태로 다룬다.
Web Container란?
- JSP 파일의 실행 요청을 처리한다.
- 웹 서버 내부에서 서블릿 클래스 또는 JSP 파일을 실행하기 위한 실행 환경을 제공하는 역할이다.
- 어떤 주소에(URL) 대한 요청 → HTTP 서버 → 그 주소에 미리 매핑되어 있는 콘텐츠(HTML 파일이나 이미지 등)를 사용자의 브라우저에 응답 형태로 전송한다.
Servlet의 동작 원리
1. 사용자의 URL 요청
- 어떤 사용자의 URL 요청이 서블릿 요청이라는 것을 웹 서버가 알기 위해서는 사전에 웹 서버측에 URL과 서블릿 클래스를 미리 매핑 시켜놓은 배포 서술자(Deployment Descriptor)가 필요하다.
- 웹 서버가 배포 서술자를 통해 지금 받은 요청이 서블릿 요청이라는 것을 알게 되면 서블릿을 담당하는 웹 컨테이너로 그 요청을 전달한다.
2. request, response 객체 생성
- 웹 컨테이너는 받은 요청을 처리하기 위해 HTTP 요청 (Request)을 처리하기 위한 request 객체와 HTTP 응답(Response)을 위한 response 객체를 생성한다.
3. 서블릿 인스턴스와 스레드 생성
- request, response 객체가 생성된 뒤 사용자의 URL 요청이 어떤 서블릿 클래스를 필요로 하는지 배포 서술자(xml)를 통해 알아낸다.
- 만일 그 클래스가 웹 컨테이너에서 한 번도 실행된 적이 없거나, 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init() 메소드를 실행하여 초기화한 뒤 스레드를 하나 생성한다.
- 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 스레드만 하나 새로 생성한다.
- 각 서블릿 인스턴스는 웹 컨테이너당 하나만 존재하기 때문에 init() 메소드는 각 서블릿당 한 번씩만 호출한다.
4. service() 메소드 호출과 서블릿 클래스 실행
- 스레드가 생성되면 각 스레드에서 service() 메소드 호출한다.
- service() 메서드가HTTP 요청 방식이 GET 방식일 경우에는 서블릿 클래스의 doGet() 메서드,POST 방식일 경우에는 doPost() 메서드가request, response 객체를 인자로 자동으로 호출한다.
- 개발자가 실제로 동적인 웹 페이지 생성을 할 수 있는 코드를 만들어야 하는 부분이 바로 doGet()과 doPost() 메소드 부분이다.
5. 응답과 스레드의 소멸
- doGet() 또는 doPost() 메소드가 호출되어 사용자의 요청에 따른 동적인 웹 페이지를 생성하면 그 결과물이 담긴 response 객체를 웹 컨테이너가 HTTP 응답(Response) 형태로 바꾸어 웹 서버로 전송된다.
- 사용이 끝난 request와 response 객체를 소멸시키고 스레드를 종료한다.
반응형
'Language > Java' 카테고리의 다른 글
[Java] syncronized: multi-thread 환경에서 동기화 문제를 해결하는 키워드 (0) | 2020.06.22 |
---|---|
[Java] JVM의 Runtime Area (0) | 2020.01.13 |
[Java] Lombok 사용하기 (0) | 2019.11.15 |
[Java] JVM 가상머신과 Java Language의 이식성, 호환성 관계 (0) | 2019.11.10 |
[Java] Garbage Collector란? (0) | 2019.11.10 |