JSP & Servlet :: JSP(Java Server Pages)
🔎 JSP : 웹 프로그램 작성 언어의 한 종류
- 동적(Dynamic)인 웹 페이지를 비교적 간단히 만들 수 있는 방법을 제공하는 자바를기반으로 하고 있는 스크립트로
자바 엔터프라이즈 어플리케이션에서 UI 영역을 담당한다.
- 자바를 서버 환경에서 사용하는 스크립트 방식의 언어로 단일 스레드로 클라이언트의 요청에 서비스한다.
요청이 있을 때 마다.. 즉, 객체가 생성될 때 마다 프로세스를 생성하는 기존의 CGI 와는 달리 하나의 메모리를 공유하면서 서비스되는 원리를 가진다.
이러한 원리는 서버측 부하를 줄여주며, JSP 내부에는 보여주는 코드만 작성하고
직접 작업하는 부분은 자바 빈으로 구성하여 둘을 분리할 수 있다.
이는 서로 영향을 주지 않으면서 수정할 수 있는 장점을 취하며, JAVA 가 갖고 있는 장점인 재사용성을 높일 수 있게 한다.
클라이언트 <---------------------------> 서버
HTML, CSS, Javascript <-----------> JSP(JAVA)
브라우저(IE, CR, FF 등) <----------> 웹서버(톰캣), 오라클
요청 <------------------------------------> 응답(HTML 웹 페이지)
✔ JSP 실행 구조
1단계. 웹 클라이언트에서 웹 서버에 웹 프로그램(페이지) 요청
2단계. 웹 서버에서 웹 클라이언트가 요청한 JSP 프로그램(페이지) 로드
3단계. JSP 페이지에 대한 변환 실행
(※ 이 과정에서 일반 『.java』 인 파일로 변환된다. 『→Servlet』)
4단계. 『.java』 인 파일로 변환된 Servlet의 컴파일(.class) 및 실행
5단계. 실행 결과로 동적 생성된 HTML Document 를 클라이언트 측에 응답
6단계. 웹 클라이언트는 응답받은 HTML Document를 브라우저에서 웹 페이지 형태로 출력
✔ 이클립스 JSP 개발 환경 구축
1. 프로젝트(new) 생성 시 『Dynamic Web Project』 선택
2. 프로젝트 명 입력 시 식별자 작성 규칙을 준수
원래 규칙에 따르면 『JspTest001.jsp』와 같이 명명해야 하지만,
클라이언트 측에서 (대소문자 구분없이) 좀 더 편하게 사용할 수 있도록
일단 지금은(당분간은) 『jsptest001.jsp』와 같이 명명한다.
3. Target Runtime 지정 → 톰캣 설치 디렉터리 연결
4. 프로젝트 생성 후에는 Server 탭에서 톰캣 서버 등록
(단, 서버 를 새로 등록했을 경우 서버 관련 설정을 재구성)
5. 톰캣 서버에 프로젝트 등록 → add and remove
6. 톰캣 서버 시작(재시작)
※ 이 시점에서...
포트번호 설정 및 확인 필요
(오라클이 웹 상에서 port 8080 을 사용하기 때문에 충돌 방지)
『Project Explorer』의 『Server』 디렉터리 노드를 확장하면
『server.xml』 파일이 존재하며, 이 파일을 열어 63 ~ 65 정도 라인의 내용을 수정한다.
<Connector URIEncoding="UTF-8" ... port="3303" />
----------------------------- -----------------
↑ 추가 삽입 ↑ 수정 (기본 8080)
※ xml 파일을 수정한 후에는 반드시 서버를 재시작 해야 한다.
7. JSP 페이지 작성(확장자 『.jsp』)
→ WebContent 디렉터리 하위에 작성
※ 페이지 작성 전에 Encoding 방식을 체크 및 설정한다. (UTF-8)
※ JSP 기본 페이지의 템플릿을 HTML5 기반으로 수정하여 설정한다. (기본 HTML 4.01)
8. 톰캣 서버가 실행되고 있는 상태에서 웹 브라우저의 URL 주소 창에 다음과 같은 주소를 요청한다. (클라이언트 입장)
http://서버주소:포트번호/프로젝트이름/파일이름.jsp
http://localhost:3306/WebApp004/jsptest001.jsp
---------
127.0.0.1
※ 원격 접속인 경우는 localhost(127.0.0.1) 대신 목적지의 서버 IP Address 를 작성해야 한다.
✔ JSP 구성 요소
1. 디렉티브(지시어) : 페이지에 대한 설정 정보지정. 클래스 속성을 변경.
<%@ %>
1) page
- 페이지에 대한 기본 정보 입력 (생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등)
- 현재 문서를 나타내는 객체
- page 디렉티브는 JSP 페이지와 관련된 속성을 정의하고, 이 속성들은 웹 컨테이너에 정보를 제공한다.
- 또한, 한 페이지에 page 디렉티브는 여러 번 등장할 수 있고 위치도 관계가 없다.
- 하지만 보통 페이지 상단에 기술한다.
· 주요 속성
- language : 스크립트 코드에서 사용되는 프로그래밍 언어 지정
- contentType : 생성할 문서 타입
- import : 사용할 자바 클래스 지정
- session : 세션 사용 여부 지정
- buffer : 출력 버퍼 크기 지정
- autoFlush : 출력 버퍼가 다 채워졌을 경우, 자동으로 버퍼에 있는 데이터를 비우게 만들지의 여부 지정
- info : 페이지에 대한 설명
- errPage : 실행 도중 에러 발생 시 보여줄 페이지 지정
- pageEncoding : 페이지 자체의 캐릭터 인코딩 지정
2) taglib
- 태그 라이브러리(tag library)
- 사용자가 만든 태그 모음(사용자가 직접 기능 설정)
3) include
- 다른 문서를 포함하는 기능
- 여러 JSP 페이지에서 공통적으로 포함하는 내용이 있을 때, 이러한 내용을 매번 반복해서 입력하지 않고
별도의 파일에 저장해 두었다가 JSP 파일에 삽입하도록 하는 것
→ 생산성 향상
- include 디렉티브 처리 과정은
정적으로 include 지시자를 사용한 JSDP 페이지가 컴파일 되는 과정에서
include 되는 JSP 페이지 소스 내용을 그대로 포함해서 컴파일한다.
즉, 복사&붙여넣기 방식으로 두 개의 파일을 하나로 구성한 후
같이 변환되고 컴파일된다.
2. 스크립트 요소 : 스크립트 릿(Scriptlet).
JSP 에 자바 코드를 기술
<% %>
- JSP 문서 내에 JAVA 코드를 기술하는 부분이기 때문에 오로지 자바 코드만 올 수 있다.
스트립트 릿에 선언된 변수는 지역 변수의 성격을 가지게 되며
(서블릿 안에 있는 service() 메소드 안에 선언된 변수이므로...)
자바에서 메소드 내에 선언된 변수라고 할 수 있다.
1) 표현식(Expression)
HTML 문서 결과값에 포함시키고자 할 때 사용
<%= %>
(즉, 브라우저에 등장시킬 수 있는 영역)
2) 선언부(Declaration)
스크립트릿이나 표현식에서 사용할 수 있는 함수 작성 시 사용.
<%! %>
스크립 트 릿이나 표현식에서 사용할 수 있는 변수나 메소드를 정의하는 부분이기 때문에
선언부에서 선언된 변수는 서블릿으로 변환되는 과정에서
멤버 변수의 입장을 취하게 되며 전역 변수의 성격을 가진다.
또한, 『_jspInit()』, 『_jspDestory()』와 같은 생명주기 운영을 위해
메소드를 재정의할 수 있다.