
Servlet
- 자바를 사용하여 웹페이지를 동적으로 생성하는 서버 사이드 프로그램
- 자바 클래스의 일종으로 구현 시 Servlet 인터페이스를 구현
- Servlet 인터페이스의 구현이 용이하도록 GenericServlet, HttpServlet 추상클래스 존재
- 서블릿: HTML in Java
- JSP: Java in HTML
Servlet Life Cycle
- 서블릿 클래스는 서블릿 컨테이너에 의해 관리된다.
- 클라이언트가 요청 시 서블릿 객체를 생성하고 초기화하는데 생성과 초기화는 딱 한번만 이루어진다.
- 요청 마다 service()를 반복 실행하여 요청을 처리한다.
- init(): 초기화
- service(): 서비스 요청 시 → doGet(), doPost() 호출
- doGet(): GET 방식으로 data 전송 시 호출
- doPost(): POST 방식으로 data 전송 시 호출
- destory(): 서블릿이 메모리에서 해제되면 호출
Parameter 전송
MVC
- 자바 Bean: 자바 모듈, 자바 컴포넌트
- JSP: 디자인, 로직이 합쳐진 형태로 속도가 빠르나 종속되는 문제 → 로직을 처리하는 Model과 디자인을 담당하는 View로 나누고 이 둘 사이를 매핑하는 Mapper인 Controller 추가
- 웹 컨테이너: 서블릿, JSP, 서버 사이드 코드 관리. 서블릿 객체를 생성하고 생명주기를 관리하며 요청과 응답 객체를 관리하고 URL을 매핑한다.
JSP
- 실행 시 서블릿으로 변환이 일어남
- Scriptlet 언어와 Compile 언어의 장점을 모두 가지고 있음 → 작성 시엔 Scriptlet, 실행 시엔 Compile
- HTML 내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 언어
스크립팅 요소
- 선언(Declaration): 멤버변수(전역변수) 선언이나 메서드 선언
- <%! 멤버변수 or 메서드 선언 %>
- 멤버변수 이므로 코드의 제일 상위 클래스 이름 밑에 위치
- 스크립트릿(Scriptlet): 클라이언트 요청 시 매번 호출되는 영역으로, service() 메서드에 해당되는 영역. request, response에 관련된 코드를 구현한다.
- 표현식(Expression): 데이터를 브라우저에 출력할 때 사용(HTML 내에 삽입)
- <%= 문자열 %> → <% out.println() %>와 같음
- 주석(Comment):
- <%— —%>
- HTML 주석과 혼용하면 안됨. HTML 주석은 HTML 소스까지 가지만 JSP 주석은 가지 않음.
지시자
- page: 현재 JSP 페이지 처리 방법 정보 제공
- include: 특정 파일을 JSP 페이지에 포함
- taglib: 사용자 정의 커스텀 태그
기본 객체
- request: HTML 폼 요소의 값을 읽어올 때 사용
- response: 응답 처리시 사용
- pageContext: 기본 객체를 얻거나 forward, include 기능 활용할 때 사용
- session: 세션 정보 처리
- application: 애플리케이션 처리와 관련된 정보 처리
- out: output 스트림 처리에 사용
- config: 초기화 환경 처리
- page: 현재 JSP 페이지에 대한 참조 변수
Scope
- pageContext
- 하나의 JSP 페이지를 처리할 때 사용되는 영역
- 한번의 클라이언트 요청에 하나의 JSP 페이지가 호출되며 이때 단 한 개의 page 객체만 대응
- 페이지 영역에 저장한 값은 페이지를 벗어나면 사라짐
- request
- 하나의 HTTP 요청을 처리할 때 사용되는 영역
- 웹 브라우저가 요청 할 때마다 새로운 request 객체 생성
- request 영역에 저장한 값은 요청에 대한 응답이 완료되면 사라짐
- session
- 하나의 웹 브라우저와 관련된 영역
- 같은 웹 브라우저 내에서 요청하는 페이지들은 같은 session 들을 공유(로그인 같은)
- application
- 하나의 웹 애플리케이션과 관련된 영역
- 웹 애플리케이션 당 1개의 애플리케이션 객체가 생성됨
- 같은 웹 애플리케이션에서 요청되는 페이지들은 같은 application 객체를 공유
- forward vs sendRedirect
- forward: 동일 서버 내 경로로 이동하며 기존 URL을 유지하여 실제 이동 주소 확인이 불가하다. 기존의 request와 response가 그대로 전달되며 비교적 빠르다.
- sendRedirect: 동일 서버 포함 타 URL이 가능하며 이동하는 page로 주소가 변화한다. 기존의 request와 response는 소멸되고 새로운 request와 response가 생성되며 forward()에 비해 느리다. request로는 data 저장이 불가능하여 session이나 cookie를 사용한다.