Servlet JSP
Servlet JSP
Servlet
- 개발자가 직접 HTTP 메시지를 파싱하거나, 응답 메시지를 만드는 등의 작업을 하기에는 너무 번거로움
- 개발자가 HTTP 스펙을 편리하게 사용하기 위한 기술이 필요
- 서블릿은 HTTP 요청에 동적인 처리가 가능한 서버 측의 자바 프로그램 및 그 기술
- 자바 코드 안에 HTML 코드가 있는 형태
Servlet container
- 톰캣과 같이 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
- 다음과 같은 기능 제공
- 서블릿의 생명 주기를 관리
- 소켓을 통해 web server와 통신
- 멀티 스레드를 지원하므로 개발자가 신경 안 써도 됨 (스레드 풀 제공)
- 보안 지원
동작 과정
- HTTP 요청이 서블릿 컨테이너(WAS)로 들어옴
- 서블릿 컨테이너는
HttpServletRequest
,HttpServletResponse
객체를 생성해서 서블릿 객체를 호출- 개발자는
HttpServletRequest
에서 요청 정보를 꺼내거나HttpServletResponse
에 응답 정보를 입력 가능
- 개발자는
- 요청받은 정보에 해당되는 서블릿을 찾음
- 해당 서블릿이 존재하지 않는다면
init
메소드를 실행해서 생성 후 메모리에 올림 - 서블릿에서
service
메소드를 호출한 후 동적인 정보를 담은 HTML 생성 - 서블릿 컨테이너는
HttpServletResponse
객체를 이용해 HTTP 응답 정보를 생성하고 보냄
Servlet 생명 주기
- init
- 서블릿이 메모리에 없는 경우 메모리에 올리고 초기화하는 메소드
- 서블릿 객체는 싱글톤으로 관리됨
- service
- 요청을 받고 응답을 반환할 때 실행되는 메소드
- Get/Post 요청에 따라
doPost
혹은doGet
등을 호출 - 각각의 요청에 따라 개별 스레드에서 실행됨
- destory
- 서블릿 컨테이너가 서블릿에 종료 요청을 하면 실행되는 메소드
- 서블릿 객체를 메모리에서 제거
JSP
- Java를 이용한 서버 사이드 템플릿 엔진
- 서블릿은 자바 코드에 HTML 코드를 넣음
- 고정된 부분까지 자바를 통해 HTML을 만들어야 하고, 이는 비효율적
- HTML 내부에서 동적으로 변경해야 하는 부분만 자바 코드를 넣는 것이 더욱 편리하기 때문에, JSP가 등장함
- HTML 코드에 자바 코드를 넣어 동적인 웹 페이지 생성 가능
- 현재는 다른 템플릿 엔진 (Ex: Thymeleaf)에 밀려 사장되는 추세
JSP와 MVC
- JSP 만으로도 동적인 페이지를 생성 가능함
- 그러나 JSP만 사용하는 경우 다양한 코드가 모두 HTML에 노출되어 있음
- 또한 하나의 JSP 파일에 view 영역과 비즈니스 로직이 섞여 있게 됨
- 이런 이유들로 JSP만 사용해서는 유지보수가 힘듦. 따라서 서블릿과 함께 MVC 패턴으로 사용됨
- 서블릿을 컨트롤러로, JSP를 뷰로 사용함
- 모델은
HttpServletRequest
객체를 사용
Servlet과 JSP
- 서블릿은 컨트롤러에 특화되었다면, JSP는 뷰에 특화됨
- JSP는 수정된 경우 WAS가 처리하므로, 서블릿과 같이 전체를 재컴파일 할 필요가 없음
- JSP는 내부적으로 서블릿으로 변환됨
References
- 김영한 - 스프링 MVC 1편(https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard)
- https://gmlwjd9405.github.io/2018/11/04/servlet-vs-jsp.html
- https://gmlwjd9405.github.io/2018/10/28/servlet.html
- https://gmlwjd9405.github.io/2018/11/03/jsp.html
- https://coding-factory.tistory.com/742
- https://mangkyu.tistory.com/14
기타
2022-12-27, 2022-12-28을 기반으로 내용을 보강해서 작성