Servlet을 생성할때는 클래스마다 URL 맵핑을 실시 하기 때문에 클래스를 많이 생성해야 한다.
또한 Servlet 클래스는 HttpServlet을 상속하고 init(), service(), destory() 3개의 매서드를 오버라이드 한다.
init()의 경우는 처음 서블릿을 호출할때 실행되며, 사용자의 요청에 따라 처리되는 내용들은 service() 함수에서 실행된다.
destory() 의 경우 해당 어플리케이션이 종료 되거나 서블릿이 종료될때 사용되어진다.
/hello 를 호출하면
init() 메서드와 service() 메서드가 실행되는것을 확인할 수 있다.
그후 똑같이 /hello를 호출하면
처음 init()이 호출된 이후로 다시 실행되지 않고 service() 메서드만 호출되었다.
또한 코드가 수정되고 톰캣이 재실행되니까
destory() 가 호출된것을 확인 할 수 있다.
//서블릿은 .(싱글톤 방법)으로 객체를 생성한다.
즉 요청이 들어오면 서블릿 인스턴스가 존재하는지 확인한 후
- 인스턴스는 Servlet Context에 Key / Value 값으로 저장되어 있으며 이를 확인하여 존재유무를 확인한다
1. 존재한다면 service() 호출
2. 존재하지 않는다면 서블릿 클래스 로딩 & 인스턴스 생성
3. 서블릿이 메모리에서 제거되면 서블릿 컨테이너에의해서 destory()메서드 호출되어 종료된다.
============================================================================
JSP Servlet
* .jsp 의 요청이 오면 -- > jspServlet에서 서블릿 인스턴스가 존재하는지 확인한 후 -> 없다면 twoDice.jsp를 .java(서블릿)(으)로 변환 -> 컴파일 -> .class -> 객체를 생성 (인스턴스 생성) -> service() 호출한다.
* jsp-> class 변경 후 인스턴스를 생성할때까지 지연된다. 처음에만, 하지만 jsp가 변경되면 위의 과정을 반복해서 수행된다.
* Servlet Layz - init() < ---- > Spring early - init()
- JSP의 기본객체 : 생성없이 사용할 수 있는 객체 : HttpServletRequset:requset, HttpServletResponse:response, HttpSession:session, JspWroter:out 등
-JSP의 경우는 HTTP 안에 JAVA 코드가 있는 것으로 <% %> 안에 자바의 코드를 넣어준다.
- 값출력시 <%= %>
- 인스턴스 변수의 경우 <%! %> 를 사용 (클래스영역)
- 지역변수의 경우 <% %> (서비스 영역)
============================================================================
유효 범위가 속성
> HTTP특징 : 상태정보를 저장하지 않음(Stateless) <-> StateFull (상태정보를 저장)
상태정보를 저장하지 않기 때문에 필요한게 저장소이다.
저장소를 유효범위의 범위에 따라 4개를 제공
* 4개의 저장소의 특징
> 1. 접근 범위
> 2. 생존기간
저장소는 Map형태로 되어있고 Key Value 로 이루어져 있다.
>> setAttribute() - 쓰기(저장) getAttribute() - 읽기
1. PageContext (JSP ) : JSP 페이지의 시작 부터 끝까지. 해당 JSP 내부에서만 접근가능하며, 유효범위는 1개의 JSP
>> lv(지역변수)를 저장한다, 기본객체(Requset, Response 등).. 범위는 해당 페이지 안에서만 접근이 가능하다.
>> EL( == ${ } 이렇게 사용하는 값) 때문에 사용한다.
2. application : 공통저장소 : WebApp 시작 부터 종료까지 Context어디서든 접근가능, 모든 클라이언트 공유
>> WebApp 전체에서 접근가능 (1개의 저장소)
3. Session : 개별저장소 : Client마다 1개씩 : Session의 시작부터 종료까지
>> 로그인시에 id를 저장함 -> 다음 요청시에 로그인한 사람인지 확인 할 수 있음
>> 로그아웃시 개별저장소를 제거(Session 제거) // id나 장바구니 같은것.
>> Session은 사용자 수마다 생성되기 때문에 최소한의data만 저장해야 한다. (서버 부담이 가장 크다)
4. requset : 요청의 시작부터 응답까지 : forward로 다른 JSP로 전달가능
>> requset 객체도 Map으로 데이터를 저장되며 각각의 요청이 올떄마다 독립적인 Requset객체가 생성된다. 또한 하나으 JSP가담당을 한다. 보통은 1개의 JSP에서 끝나지만,
>>첫번째 JSP가 요청을 받았지만 응답할수 있는 내용이 아니면 다른 JSP로 넘겨주는데 이를 forward이라고 한다.(책임 떠넘기기)
>> 1번째 JSP에서 추가적으로 2번째 JSP에 데이터를 넘겨주고 싶으면 Requset객체에 데이터를 추가해서 넘겨주면된다.
사용 메서드로
setAttribute(String name, Object value) : 지정된 값을 지정된 이름으로 저장 (쓰기)
getAttribute(String name) : 지정된 이름으로 저장된 속성의 값을 호출 (읽기)
removeAttribute(String name) : 지정된 이름의 속성을 삭제
getAttributeNames() : 기본 객체에 저장된 모든 속성 이름을 반환
'dev > Servlet' 카테고리의 다른 글
[Servlet] Servlet 특징2 (0) | 2022.05.27 |
---|---|
[Servlet] Servlet, ServletContainer (0) | 2022.01.18 |