JSP(java server page)
- 마이크로소프트에서 ASP(Active Server Pages)라는 웹을 쉽게 개발할 수 있는 스크립트 엔진을 발표(1998) -> 보다 앞선 97년에 발표된 서블릿은 ASP에 비해 상대적으로 개발방식이 불편 -> 자바 진영(썬마이크로시스템즈)에서도 대항하기 위해서 JSP를 발표
- JSP는 서블릿 기술을 사용한다
- WAS에서 JSP를 실행하면, 몇 가지 약속된 기호들을 이용해서 JSP는 서블릿으로 변경하여 실행된다
- <%@ : 지시자
- <%@ page : 페이지 지시자
- <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> : 페이지 지시문- jsp 파일 내에서 자바 언어의 사용, 컨텐츠 타입과 문서 인코딩 정보를 알려준다
<%! %> : 선언식(Declaration)
- JSP 페이지 내에서 필요한 멤버변수나 메소드가 필요할 때 선언해 사용하는 요소, 전역변수 선언 및 메소드를 선언할 때 사용한다
- _jspService() 메서드 외부, 클래스 블럭에 코드가 위치하게 된다
<% %> : 스크립트릿(scriptlet)
- 내부에 실행할 자바 코드를 입력한다, 가장 일반적으로 많이 쓰이는 스크립트 요소
- 프로그래밍 코드, 로직 기술에 사용
- 서블릿으로 변환되어 jspService() 메서드 내부에 위치하게 된다
- 스크립트릿에서 선언된 변수는 지역변수
<%= %> : 표현식(Expression)
- 브라우저로 보낼 응답 결과에 넣을 값들(자바 코드)을 입력한다, 화면에 출력할 내용 기술
- servlet에서의 out.print();와 같은 역할을 수행한다
- 표현식 사용 대신 스크립트릿 내에서 JSP의 내장객체인 out객체의 print() 또는 println() 메소드를 사용해서 출력할 수도 있다
주석(Comment)
- HTML 주석, 자바 주석, JSP 주석 3가지 모두 사용 가능
- JSP 주석(<%-- --%>)은 서블릿으로 변환시 포함되지 않는다 (JSP 주석이므로 JSP 엔진에서 주석 처리)
- 자바 주석(// or /* */)은 서블릿으로 변환될 때 자바의 주석 코드로서 같이 변환된다, 주로 스크립트릿이나 선언문에서 사용되는 주석
- HTML 주석()은 자바 코드로 변환되고, 자바로 실행된다, 응답결과에 포함도 된다 -> 그러나, 응답결과로 브라우저에 넘어갔을 때, 브라우저에서는 이를 주석으로 인지하므로, 화면에 나타나는 요소는 아니다
JSP의 실행순서
- 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달
- 해당 JSP가 최초로 요청되었을 경우에(JSP에 해당되는 서블릿이 없을 경우에) JSP로 작성된 코드를 서블릿으로 코드로 변환 (java 파일 생성)
- 서블릿 코드를 컴파일해서 실행 가능한 bytecode로 변환 (class 파일 생성)
- 서블릿 클래스를 로딩하고 인스턴스를 생성
- 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성
JSP 라이프싸이클
- WAS는 웹 브라우저로부터 JSP에 대한 요청을 받게 되면, JSP코드를 서블릿 소스코드로 변환한 후 컴파일 하여 실행
- 서블릿으로 컴파일되어 실행될 때 상황에 따라서 어떤 메소드들이 실행되는지 잘 알아야, JSP를 알맞게 작성할 수 있다
- 이클립스의 워크스페이스 내부 디렉토리 경로 중 위에 해당하는 위치에 jsp가 서블릿으로 변환되고 바이트코드(.class)로 컴파일되어 존재한다
- eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\프로젝트명\org\apache\jsp
- 내부에 존재하는 public void _jspInit(), public void _jspDestroy(), public void _jspService() 주요 3가지 메소드
- jspInit() 과 jspDestroy() 메소드를 직접 선언식 내에서 작성할 수도 있다
- jspService() 내에서 개발자가 작성한 프로그래밍 코드(로직)가 동작하도록 변환된다
- 결국 JSP도 서블릿의 라이프싸이클과 동일하게 동작하는 것을 알 수 있다
참고
- eclipse-workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps 내부에는 해당 워크스페이스에 만들어둔 프로젝트들의 webapp 내부 파일들이 존재한다
내장 객체
- JSP를 실행하면 서블릿 소스가 생성되고 실행되는데, JSP에 입력한 대부분의 코드는 생성되는 서블릿 소스의 _jspService() 메소드 안에 삽입되는 코드로 생성
- _jspService()에 삽입된 코드의 윗부분에 미리 선언된 객체들이 존재하며, 해당 객체들은 jsp에서도 사용 가능
- _jspService() 메서드 안에서 선언된 지역객체
- response, request, application, session, out과 같은 변수를 내장객체
출처) 부스트코스 풀스택 강의 정리
'Spring' 카테고리의 다른 글
Java config를 이용하여 스프링 컨테이너(ApplicationContext) 설정하기 (0) | 2021.07.10 |
---|---|
스프링 Ioc/DI 컨테이너 사용 (xml 파일 이용) (0) | 2021.07.08 |
forward & redirect (0) | 2021.07.01 |
Servlet과 JSP연동 (0) | 2021.07.01 |
Servlet 이란? (0) | 2021.07.01 |