Search

서블릿 & JSP (1)

서블릿과 컨트롤러 비교

서블릿
WebServlet : @Controller + @RequestMapping
클래스 단위의 URL 매핑으로, 여러 개의 클래스 필요
HttpServlet 상속 필수
service 메소드 사용
TwoDiceServlet.java
컨트롤러
@Controller와 @RequestMapping 사용
메소드 단위의 URL 매핑으로, 하나의 클래스만으로도 OK
상속을 받지 않음.
main 메소드 사용
필요한 매개변수만 적어줌.
TwoDice.java

서블릿의 생명 주기

@WebServlet("/hello") public class HelloServlet extends HttpServlet { @Override public void init() throws ServletException { // 서블릿 초기화 - 서블릿이 생성 또는 리로딩 때, 단 한번만 수행됨. System.out.println("[HelloSerlvet] init()"); } @Override // 호출될 때마다 반복적으로 수행됨. public void service(HttpServletRequest request, HttpServletResponse response) { // 1. 입력 // 2. 처리 // 3. 출력 System.out.println("[HelloSerlvet] service()"); } @Override public void destroy() { // 뒷정리 작업 - 서블릿이 제거(unload)될 때, 단 한번만 수행됨. System.out.println("[HelloSerlvet] destroy()"); } }
Java
1. 서블릿에 요청이 들어옴.
Servlet Context에서 서블릿 인스턴스의 존재 확인
2.
존재 X
서블릿 클래스 로딩 & 인스턴스 생성
init()service()destroy()
3.
존재 O
service()destroy()
서블릿은 Singleton
1개의 인스턴스를 계속 재활용 : 하나의 객체로 여러 요청 처리
lay -init
스프링도 마찬가지
하지만 스프링은 early - init

JSP (Java Server Pages)

HTML 안에 Java 코드를 넣어둔 형태
TwoDice.jsp
서블릿과 같은 역할 : JSP는 자동으로 Servlet으로 변환
TwoDiceServlet.java
JSP 파일의 위치는 src/main/webapp
호출은 별다른 매핑 처리 필요 없이 파일 이름으로
localhost/ch2/twoDice.jsp

JSP의 호출 과정

1.
JSP 파일 요청
JspServlet이 서블릿 인스턴스 존재 확인
2.
존재 X
서블릿 소스 파일로 변환 후 컴파일하여 서블릿 클래스 파일 생성
.jsp_jsp.java_jsp.class
인스턴스 생성
_jspInit()
서블릿 인스턴스
_jspService()
3.
존재 O
서블릿 인스턴스
_jspService()
JSP 파일이 수정되면 다시 위의 과정 반복

JSP의 기본 객체

생성없이 사용 가능한 객체
yoilTeller.jsp

유효 범위(scope)와 속성(attribute)

HTTP는 상태 정보를 저장하지 않음. Stateless
저장소 필요
접근 범위생존 기간에 따른 4개의 저장소가 존재
pageContext
페이지 내로 제한된 저장소
지역변수(lv)와 기본 객체를 저장
→ 직접 접근이 불가한 EL 사용을 위해 저장소에 따로 저장
읽고 쓰기 가능
요청할 때마다 초기화
application
WebApp 전체에서 접근 가능한 공통 저장소
쓰기와 읽기 가능 : setAttribute()getAttribute() 사용
session
클라이언트와 1대 1로 대응하는 개별 저장소
전체와 공유하는 application에 저장하기 힘든 개별 정보(id, password 등) 를 저장
사용자 수 만큼 객체가 필요하므로 서버 부담을 줄이기 위해 최소한의 데이터만 저장
request
request 객체가 가지고 있는 저장소
요청을 받은 JSP가 다른 JSP가 응답해야 하는 경우 forwarding할 때 필요
메모리 부담이 적은 request 객체를 가능한 되도록 사용

유효 범위

1.
pageContext : 1개 JSP 페이지
JSP 페이지의 시작부터 끝까지. 해당 JSP 내부에서만 접근 가능
페이지당 1개
2.
request : 1+개 JSP 페이지
요청의 시작부텉 응답까지. 다른 JSP로 전달 가능
요청마다 1개
3.
session : n개 JSP 페이지
session의 시작부터 종료까지(로그인 ~ 로그아웃)
클라이언트마다 1개
4.
application : context 전체
Web Application의 시작부터 종료까지
context 내부 어디서나 접근 가능
모든 클라이언트가 공유
context 마다 1개

속성 관련 메소드

1.
void setAttribute(String name, Object value)
지정된 값(value)을 지정된 속성 이름(name)으로 저장 → 쓰기
2.
Object getAttribute(String name)
지정된 이름(name)으로 저장된 속성의 값 반환 → 읽기
3.
void remove Attribute(String name)
지정된 이름(name)의 속성 삭제
4.
Enumeration getAttributeNames()
기본 객체에 저장된 모든 속성의 이름 반환