JSP lifestyle
JSP의 대략적인 처리 방식
JSP lifestyle에 대해 자세히 알아보자.
Dynamic Web Project : HelloJSP 생성
JSP 파일 : ex01.jsp 생성
브라우저에서 ex01.jsp를 호출해보자
톰캣 : ex01._jsp.java – ( 컴파일 ) → ex01._jsp.class – ( new ex01.jsp(); ) → 객체 생성하여 메모리에 적재시킴
- 처음 실행할 때만 jspInit( ) 메서드 호출
- 새로고침을 누를 때마다 변수 num1의 값 증가
왜 num1의 값만 계속 증가하는 걸까? 스크립트 요소에 대해 알아보자
▷ 스크립트 요소
JSP Page에서는 선언문(Declaration), 스크립트릿(Scriptlet), 표현식(Expression)이라는 3가지의 스크립트 요소를 제공함
① 선언문(Declaration) <%! %>
- JSP Page 내에서 멤버변수(전역변수)나 메서드가 필요할 때 선언해 사용하는 요소
- 서블릿으로 변환 시, _jspService( ) 메서드 외부에 선언됨
② 스크립트릿(Scriptlet) <% %>
- 가장 일반적으로 많이 쓰이는 스크립트 요소
- 주로 프로그래밍의 로직을 기술할 때 사용 → JSP Page가 요청을 받을 때 실행되어야 할 자바 코드를 작성하는 영역
- 서블릿으로 변환 시, _jspService( ) 메서드 외부에 선언됨
- 스크립트릿에서 선언된 변수는 지역변수
- 선언부에서 정의한 메서드 호출만 가능, 다은 메서드 선언 불가
③ 표현식(Expression) <%= %>
- JSP Page에서 웹 브라우저에 출력할 부분을 표현 → 즉, 화면에 출력하기 위한 것으로 실행 결과 하나의 값이 남는 문장
- 스크립트릿 내에서 출력한 부분은 내장객체인 out 객체의 print( ) 또는 println( ) 메서드를 사용해서 출력
• 브라우저에서 동일한 요청을 한 경우
: _jspService( ) 메서드만 호출되어 응답함
⇒ 변수 num1 : 멤버변수
변수 num2 : 지역변수 ( ∵ _jspService( ) 메서드 내에 Scriptlet 존재 )
∴ 동일한 요청을 할 때마다 num1의 값만 연속적으로 증가
• 만약 jsp 파일의 내용이 수정된 경우
톰캣은 다시 java파일 생성, 컴파일 진행하여 객체 생성시켜야 함
현재 메모리에 동일한 이름의 객체가 존재 → Destroy( ) 메서드 호출 : 객체 제거 → Init( ) 메서드 호출 : 초기화 작업
→ Service( ) 메서드 호출을 통해 응답
• 톰캣에 의해 생성된 java파일과 class파일은 아래의 경로에 생성됨 ( 즉, 이 파일로 서비스함 )
/Users/dahee/Desktop/dev/server/apache-tomcat-9.0.75/work/Catalina/localhost/ROOT/org/apache/jsp
다시 정리해보자면,
- 웹 브라우저(클라이언트)가 jsp를 요청할 경우
① WAS 내 웹 서버가 jsp임을 확인하고 Web Container로 전달
② Web Container에서는 서블릿 클래스에 이 jsp와 맞는 클래스 파일이 존재하는지 확인
③ 없는 경우, jsp → java(servlet) → class로 컴파일까지 진행
④ 서블릿 컨테이너, JSP 컨테이너에서 해당 class 파일을 실행하여 비즈니스 로직, DB 연동 처리 후 나온 HTML 결과를 웹 서버에 전달
⑤ 웹 서버에서는 전달을 확인하고 클라이언트에게 응답함
- Web Container(JSP Container = Servlet Container) 를 통해 jsp파일을 컴파일하는 과정에서 java코드를 실행하여 HTML 결과를 생성함
[ 참고자료 ]
https://maivve.tistory.com/179
'백엔드 > JSP' 카테고리의 다른 글
JSP Servlet 기초 (3) : JSP 태그 (0) | 2023.06.11 |
---|---|
내장객체 request와 response (0) | 2023.06.11 |
JSP Servlet 기초 (2) (0) | 2023.06.09 |
JSP Servlet 기초(1) (0) | 2023.06.08 |
Tomcat 다운로드 및 서버 연동시키기 (0) | 2023.06.07 |