본문 바로가기
Spring

JSP 란?

by seeker00 2021. 7. 1.

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의 실행순서

  1. 브라우저가 웹서버에 JSP에 대한 요청 정보를 전달
  2. 해당 JSP가 최초로 요청되었을 경우에(JSP에 해당되는 서블릿이 없을 경우에) JSP로 작성된 코드를 서블릿으로 코드로 변환 (java 파일 생성)
  3. 서블릿 코드를 컴파일해서 실행 가능한 bytecode로 변환 (class 파일 생성)
  4. 서블릿 클래스를 로딩하고 인스턴스를 생성
  5. 서블릿이 실행되어 요청을 처리하고 응답 정보를 생성

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과 같은 변수를 내장객체
 
출처) 부스트코스 풀스택 강의 정리