Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- ajax
- cache
- r
- libuv
- effective
- mongodb
- 네트워크
- Lombok
- Heap
- reactor
- html
- reactive
- socket
- nodejs
- javascript
- network
- github
- AWS
- Linux
- Static
- HTTP
- Elk
- git
- redis
- 데이터통신
- VCS
- NoSQL
- spring
- Java
- mybatis
Archives
- Today
- Total
빨간색코딩
서블릿 (servlet, jsp와 차이점, 컨테이너, 동작원리, web.xml) 본문
서블릿(servlet) from JungHoon Lee
1. 서블릿이란?
- HTTP protocol 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속하여 개발하며, Servlet은 컨테이너에 의해서 실행되고 관리된다.
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.
- 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답한다.
2. JSP와 서블릿의 차이점
- JSP : HTML 문서 안에 java 코드를 포함하고 있다. MVC에서 View 역할
- 서블릿 : 자바 코드 안에 HTML을 포함하고 있다. 주로 MVC에서 컨트롤러 역할
3. 서블릿 컨테이너(톰캣 등)란?
- HTTP 요청을 받아서 Servlet을 실행하고 생명주기를 관리하는 역할을 한다.
- servlet과 웹서버가 통신할 수 있는 방법을 제공
- 멀티 스레딩을 지원하여 클라이언트의 다중 요청을 알아서 처리
4. 서블릿의 동작 원리
- 사용자가 URL을 클릭하면 HTTP Request를 Servlet Container에 보낸다. = ① 에 해당
- Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다. = ② 에 해당
- 사용자가 요청한 URL을 분석하여 어느 서블릿에 대한 요청인지 찾는다. (web.xml를 참조)
- 만일 그 클래스가 서블릿 컨테이너에서 한 번도 실행된 적이 없거나, 현재 메모리에 생성된 인스턴스(프로세스)가 없다면 새로 인스턴스를 생성하고(메모리에 로드하고) init()메소드를 실행하여 초기화 한 뒤 스레드를 하나 생성한다. 이미 인스턴스가 존재할 경우에는 새로 인스턴스를 생성하지 않고 기존의 인스턴스에 스레드만 하나 새로 생성한다. 각 서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재하기 때문에 init() 메소드는 각 서블릿 당 한 번씩만 호출된다. = ③ 에 해당
- 컨테이너는 서블릿 service() 메소드를 호출하며, POST, GET여부에 따라 doGet() 또는 doPost()가 호 출된다. = ⑤ 에 해당
- doGet() 또는 doPost() 메소드는 동적인 페이지를 생성한 후 HttpServletResponse객체에 응답을 보낸다. = ⑥ 에 해당
- 응답이 완료되면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킨다.
5. 배포서술자(DD, web.xml)
- Servlet, Error page, Listener, Fillter, 보안 설정 등 웹 애플리케이션의 설정 파일이다.
- URL과 실제 서블릿의 매핑 정보도 갖고 있다.
- 하나의 웹 애플리케이션에 하나만 존재
- 보통 Web Document Root 에 WEB-INF 디렉터리 아래에 있다.
'Java' 카테고리의 다른 글
time 패키지 (util.Date와 util.Calendar의 문제, LocalDate, LocalDateTime, DateTimeFormatter) (0) | 2018.02.25 |
---|---|
enum (이전 방식, 개념, 동작방식, 사용예제, 관련메소드) (1) | 2018.01.12 |
static 키워드 (메모리 상 위치, 클래스 변수, 클래스 메소드, static 블록) (0) | 2017.12.29 |
접근제어자 (public, protected, private, getter, setter) (0) | 2017.12.29 |
생성자 (constructor, this, 오버로딩) (0) | 2017.12.28 |
Comments