JSP는 예전에 했던 지라 기억이 가물가물하고 인텔리제이로 구성해본 적은 없기에, JSP 개념과 JSP 프로젝트 구조를 정리하고 실습하기 위해 작성하는 글이다.

https://www.yes24.com/product/goods/37235901의 내용 위주로 작성되었다.

JSP


JSP는 JavaServer Pages의 약자로, HTML에 자바 코드를 포함시켜 웹 서버에서 동적인 웹 페이지를 생성하는 기술이다. 실행 시에 javax.servlet.http.HttpServlet 클래스를 상속받은 Java 소스 코드로 변환한 다음 컴파일되어 서블릿으로 실행된다.

서블릿과 JSP는 동일한 기술이라 보아도 무방하지만, 서블릿은 Java 코드로 완벽하게 구현해야 하는 반면 JSP는 HTML 페이지 안에서 스크립트 형태로 구현한다. 또한 서블릿 객체의 일부(내장 객체)는 변수 선언과 초기화 작업 없이 사용할 수 있으므로 훨씬 간편하다. 또한 서블릿은 컨트롤러를 만들 때 사용하지만, JSP는 뷰 페이지를 만들 때 사용한다.

쉽게 말하면 MVC2 구조에서 View를 담당하는 부분이며, 불편한 자바 소스로 View를 생성하는 대신 HTML 문서 내부에서 Java 코드(반복문, 조건문, 객체)를 다룰 수 있게 하는 동적 기술이다.

JSP 컨테이너와 JSP의 서블릿 변환


서블릿과 JSP와 같은 어플리케이션은 동적 컨텐츠를 생성하는 컴포넌트이다. 이러한 컴포넌트를 관리하고 저장소 역할, 메모리 로딩, 객체 생성 및 초기화 등 서블릿의 생명주기를 관리하고 JSP를 서블릿으로 변환하는 프로그램이 컨테이너다.

JSP 컨테이너는 JSP를 서블릿으로 변환하는 프로그램으로, 변환된 서블릿의 수행은 서블릿 컨테이너가 담당한다. 예시로 사용할 톰캣 및 대부분의 WAS들은 두 기능을 내장하기 때문에 하나만 설치하면 된다.

변환 과정을 확인하고 싶다면 index.jsp 파일을 한 번 구동하고 경로에 가서 파일을 살펴보면 된다. 인텔리제이 경로는 C:\\Users\\###\\.SmartTomcat\\jsps\\jsps\\work\\Catalina 이하이고, 서블릿에 최초로 요청이 들어오면 index.jsp 파일이 index_jsp.java 로 변환되어 있다. 다음은 _jspService 메서드의 일부이고 JSP가 서블릿으로 바뀌어 기능함을 알 수 있다.

out.write("\\r\\n");
out.write("\\r\\n");
out.write("<html>\\r\\n");
out.write("  <body>\\r\\n");
out.write("    <h1>JSP 테스트</h1>\\r\\n");
out.write("\\r\\n");
out.write("    ");