제5장 JSP 기본 문법
1. 주석
2. 지시어
3. 액션
4. 선언과 표현식
5. 스크립트릿
01 주석
• 주석은 프로그램 소스에 텍스트로 된 간단한 설명문 넣는 것
• C 언어를 비롯한 대부분의 프로그램 언어가 주석 사용하기 위한 문법 제공
• JSP는 특성상 자바, HTML, JSP 코드가 섞여 있으므로 주석도 혼용해서 사용
• HTML 주석 : 클라이언트로 전달되는 주석
• 일반적인 HTML 문서에서 사용 가능한 주석으로 화면에는 보이지 않지만 브라우저 소스보기를 하면 내용이 노출됨
• JSP 주석 : 클라이언트로 전달되지 않는 주석
• JSP 파일에서만 사용 가능한 주석으로 브라우저 소스보기를 해도 내용이 노출되지 않음
• 주석 포함된 JSP 실행하여 결과 확인하기(jspbook 프로젝트의 Webcontent.ch05 폴더의 Ex5_1_Comment.jsp)
• HTML 주석은 소스 파일에 남아 있으나 JSP 주석은 소스에 없음
주석 포함된 JSP 문서
실행결과에서 주석 표시 여부 확인
- 웹 브라우저에서 <마우스 오른쪽> 버튼을 클릭하고 [소스 보기] 명령을 선택
02 지시어(Directives)
JSP 파일을 처리하기 위한 정보를 JSP 컨테이너에게 알려주는 정보 기술하는 부분
JSP 컨테이너에게 해당 페이지를 어떻게 처리해야 하는지 전달하기 위한 내용 포함
지시어는 page, include, taglib 으로 구성되며, 각 지시는 HTML 태그 형태로 속성과 속성값
1. page 지시어
page 지시어는 현재 JSP 페이지를 컨테이너에서 처리하는 데 필요한 각종 속성을 기술
보통 JSP 페이지 맨 앞에 위치
여러 줄에 나누어 작성할 수도 있음.
이클립스 개발 도구를 이용해 jsp 파일을 생성하는 경우 기본적인 page 지시어는 자동 생성
다음의 여러 속성 중 필요한 속성 선택하여 page 지시어 작성하면 됨
page 지시어와 JSP의 한글 처리
page 지시어에서 중요한 부분 중 하나는 한글 처리 부분임.
JSP 에서는 캐릭트 셋 설정 방법 및 우선순위
위 설정 방법으로 캐릭터 셋 설정되지 않으면 ISO8859-1을 적용
페이지 지시어에 다음과 같이 한글 속성 설정
• pageEncoding="UTF-8", contentType="text/html;chatsert=UTF-8"
page 지시어의 import 속성
• Import 속성은 JSP 문서에서 자바 클래스를 사용하는 경우 해당 클래스의 패키지에 대한 import 설정으로 기본적으로 자바에서와 유사
• 다만 패키지 import 구분을”,” 을 이용하거나 라인 단위로 작성해야 한함
• page 지시어에서 import 속성의 다양한 사용 예
session
• 세션은 웹 브라우저와 웹 서버가 지속적인 클라이언트 인식을 위해 필요한 정보를 임시로 저장해두는 방법
• 주로 웹 사이트에 로그인하거나 쇼핑몰에서 장바구니 등을 구현할 때 사용
• 기본 값이 true(세션을 사용한다)이므로, 일부러 사용을 제한할 목적이 아니라면 별도로 설정하지 않아도 됨
• 세션과 관련한 자세한 내용은 6장에서 다룸
buffer
• JSP 페이지 데이터를 출력하기 위한 JspWriter 즉 out 내장객체의 버퍼 크기 지정
• 기본값은 8KB 이고 JSP 페이지에 동적으로 많은 내용이 포함될 경우 버퍼 크기 조정이 필요할 수도 있으나 일반적으로는 변경하지 않아도 됨
autoFlush
• autoFlush는 버퍼를 자동으로 비울 것인지를 지정하는 속성으로, 기본 값은 true
• 버퍼 속성에 지정되어 있는 크기만큼 버퍼를 유지하고 있다가 버퍼가 다 차면 자동으로 전송
isThreadSafe
• 기본적으로 서블릿은 스레드로 동작하기 때문에 스레드로 인한 동기화 문제를 해결하기 위한 옵션
• 기본값은 true로, 일반적으로 false로 설정하는 경우는 거의 없음
info
• 해당 JSP에 대한 간단한 설명으로 저작권이나 작성일 등 간단한 정보 기술에 사용
page 지시어의 errorPage, isErrorPage 속성
- Jsp 문서에서 Java 프로그램 실행 중 발생하는 오류 처리를 위한 속성
- errorPage 속성: 현재 페이지에 Java 오류 발생시 오류 처리 위해 호출할 페이지 지정하는 속성
isErrorPage 속성: 해당 페이지가 오류 발생시 호출되어 오류 처리 오류 처리 위한 전용 페이지임을 알리는 속성으로 오류 정보는 exception 내장 객체 통해 전달되므로 이를 이용해 오류 처리
errorPage 속성 지정 통해 보다 다양한 방법으로 페이지 오류 관리 가능: 오류 페이지는 오류 발생한 페이지 수정 않고서 오류 처리 방법 변경 가능
JSP 문서에서 발생한 Java 오류 처리 결과 (Ex5_2_2_Error.jsp에서 오류 처리)
JSP 문서에서 발생한 오류에 대한 오류 페이지 미지정시
(Ex5_2_1_ErrorTest.jsp의 페이지 지시어에서 에서 errorPage="Ex5_2_2_Error.jsp“ 삭제)
contentType
- 현재 JSP 페이지를 클라이언트에서 처리하기 위한 콘텐츠 유형을 지정하는 부분
- 윈도우에서 파일 확장자(.doc, .hwp등)에 따라 연결 프로그램이 동작하는 것과 마찬가지로 웹 브라우저에서도 contentType에 따라 전달되는 내용을 어떻게 처리할지 결정할 수 있음
- text/html이 아니라 application/msword 로 지정할 경우 브라우저는 서버가 전달하는 콘텐츠를 ms word 문서로 인식해 처리할 것은 사용자에게 요청(예제 Ex5_3_content_test.jsp)
MS 워드가 실행된 결과 화면
pageEncoding 속성
• pageEncoding은 컨테이너에서 처리할 JSP 파일의 인코딩을 설정.
• JSP 2.0 스펙에 추가된 속성으로, 이전 버전을 지원하는 컨테이너의 경우에는 사용할 수 없음
Extends 속성
• JSP가 서블릿으로 변환될 때 상속받을 슈퍼클래스를 지정할 수 있는 부분
• 일반적으로는 사용할 일이 없으며 톰캣의 경우 org.apache.jasper.runtime.HttpJspBase 클래스를 상속받게 됨
2. include 지시어
• include 지시어: 현재 JSP 파일에 다른 HTML이나 JSP 문서를 포함하기 위한 기능 제공
• include 지시어는 다음에서 살펴볼 include 액션과 비슷한 기능 가짐
• 네이버와 같은 인터넷 포털사이트의 화면처럼 여러 정보의 조합으로 한 화면을 구성할 때 유용하게 사용됨.
• include 지시어를 사용하면 기능 혹은 화면을 모듈화할 수 있어 화면 구성이나 재활용이 용이
➊ 배너 화면 구성 : 광고 등 관련 사이트를 배너로 구성
➋ 네이버 서비스 : 디렉터리 데이터베이스 연동 후 등록된 목록
➌ 뉴스캐스트 : 뉴스 데이터베이스 연동 후 조회 수가 높은 최신 기사
제목들
➍ 쇼핑 : 쇼핑몰 데이터베이스 연동 후 인기 상품 이미지와 제품 정보
Include 지시어 이용한 배너 화면 구성(예제 Ex5_4_1_Include_test.jsp)
- 메인 컨텐츠 외에 다른 컨텐츠는 작성된 다른 문서들을 include
- 메인 메뉴(Ex5_4_2_menu.jsp), 뉴스(Ex5_4_2_ news.jsp), 쇼핑(Ex5_4_2_ shopping.jsp) include
3. taglib 지시어
- JSP 기능을 확장하기 위해 만들어진 커스텀 태그 라이브러리를 사용하기 위한 지시어
- 태그 라이브러리는 10장에서 자세히 살펴볼 것이고 여기서는 간단한 문법만 참조
- 커스텀 태그는 공통으로 활용하거나 특정 기능을 HTML 태그 형태로 모듈화 하는 기술
- 다음 예제에서는 GetInfo 라는 커스텀 태그를 사용하는 예로 실제 기능은 별도로 구현되어 있고 실행 결과는 user1 이라는 사용자의 정보를 DB에서 가져와 출력하는 형태
03 액션
1. JSP 액션
- JSP 액션: JSP 고유 기능을 태그 형태로 제공하기 위한 JSP 전용 태그
- 문서 포함, 다른 페이지로 이동, 빈즈 클래스 연동 등의 기능을 태그 형태로 구성하게 함
- Java 코딩 부분을 태그 형태로 변환한 것
- <jsp:action_name attribute=“value” /> 형태로 HTML 태그와 형태는 유사
- 중요 액션
- include 액션: 페이지 내에 다른 문서 포함
- forward 액션: 다른 페이지로 이동
- param 액션: include 또는 forward될 때 파라미터를 다른 페이지로 전달
- useBean 액션: bean 클래스 객체를 Jsp 문서에서 사용할 수 있게 함
- setProperty 액션: bean 클래스 객체의 필드 값을 저장하게 함
- getProperty 액션: bean 클래스 객체의 필드 값을 가져오게 함
- include 액션과 forword 액션에서는 다른 페이지로 파라미터를 전달가능
<jsp:include page = ”user.jsp” />
<jsp:param name=“user” value=“홍길동” />
</jsp:include>
대표적인 액션의 종류, 형식, 기능
2. include 액션
include 액션 기능
- 다른 파일을 불러와 화면에 추가한다는 측면에서 include 지시어와 기능 유사
- include 지시어는 해당 파일을 포함시킨 후 컴파일하는 것에 비해, include 액션은 실행 시점에서
해당 파일을 호출하여 그 결과를 포함한다는 점에서 차이가 있음
- include되는 페이지로 파라미터 이용하여 정보 전달 가능
동적으로 파일들을 핸들링 하기 때문에 과도한 사용은 성능상에 문제를 줄 수 있음
include 액션은 동적인 페이지 포함시킬 경우에 사용하는 것이 좋고, include 지시어는 잘 바뀌지 않는 정적인 페이지 포함 할 때 사용하는 것이 유리함
사용 형식 및 예
include 액션 사용하여 include 되는 페이지로 이름과 전화번호 파라미터 전달하기(Ex5_5_1_include_action.jsp)
Include 액션으로 user.jsp 파라미터 전달한 후 include한 결과
3. forward 액션 (많이 사용)
forward 액션 기능
- include 액션과 사용법은 유사하지만 요청 페이지로 화면 전환할 때 사용
- forward시킨 페이지는 사라지고 forward된 페이지만 화면에 보임
- forward되는 페이지로 파라미터 이용하여 정보 전달 가능
브라우저 URL 창에는 최초 요청 페이지가 표시, forward된 페이지가 어느 페이지인지 알 수 없음
- 처리 페이지 정보 숨기거나 특정 기능 수행 후 다른 페이지로 이동하는 경우 유용하게 사용 가능
사용 형식 및 예
[실습] forward 액션 사용하기(forward_action.jsp)
- 교재 p.182 ~ 183 참고
[그림 5-16] forward_action.jsp 실행 결과
4. plugin 액션
- 웹 브라우저에서 자바 플러그인 사용하여 자바 애플릿이나 자바 빈즈 컴포넌트 실행
- plugin 액션을 사용하면 자동으로 <OBJECT> 혹은 <EMBED>와 같은 태그를 통해 애플릿 등 실행
- 일반적으로 애플릿을 사용하는 경우가 드물기 때문에 참고만 하면 됨
- 사용 예
5. useBean 액션
- 액션에서 가장 중요한 부분으로, 빈즈 클래스 객체 생성하고 필드에 값 저장, 필드 값 가져오는 기능 제공(7장에서 다룸)
- 사용법
• useBean 액션: 빈즈 클래스를 사용하기 위한 구문이며, class에 지정된 자바 빈즈 클래스 객체를 id라는 변수 이름으로 사용할 수 있게 함
• get/setProperty 액션: id라는 변수 이름의 빈즈 클래스 객체의 속성 이름의 필드에 값을 저장하거나 필드 값을 가져오게 함
• get/setProperty는 빈즈 클래스의 getter/setter 메소드와 연동
04 선언과 표현식
1. 선언
- JSP 페이지에서 메소드나 필드 선언하기 위한 구문
- JSP 가 서블릿으로 변환된 자바 코드에서는 모든 내용이 _jspService() 메소드에 들어가기 때문에 JSP 에서 선언한 변수는 로컬변수가 되고 메소드 안에서 다른 메소드를 선언하는 자바 문법상 잘못된 것이므로 컴파일 에러가 발생하게 됨
- <%! %>는 JSP 페이지에서 이러한 제약 사항 없이 필드와 메소드 선언을 가능하게 함
- 구조적으로 JSP 에서 자바 코드를 사용하는 것은 권장되지 않기 때문에 선언문의 사용 역시 권장되지 않음
- 사용 예) [ 예제 Ex5_7_1_expression.jsp ]
2. 표현식
- <%= %>를 사용해서 상수, 변수 값, 메소드 반환 결과, 생성한 객체, 수식의 결과 값 등을 화면에 출력할 때 사용
- 코드 마지막에 ‘;(세미콜론)’을 사용하지 않는다는 것에 주의
- 표현식은 out.println()의 매개변수로 변환되기 때문에 out.println()의 매개변수로서 적합한 수식 형태로 구성됨
- 표현식 보다는 표현언어(Expression Lanugage) 사용을 권장
- 사용 예) [ 예제 Ex5_7_1_expression.jsp ]
스크립트릿
JSP 문서 내에서 자바 코드 기술할 수 있는 부분으로 JSP의 가장 큰 특징 중 하나
- 초기 JSP 발전에 큰 기여를 하였으나 지금은 JSP내에서 스크립트릿 사용은 권장되지 않음
- JSP 내에서 HTML과 Java 코드 섞여 있으면 유지보수 힘들고 디자이너들과 협업 어려움
- out.println() 메소드 이용하여 브라우저에 전달될 HTML 태그 및 컨텐츠 작성
- GUI(AWT, Swing 등) 제외한 모든 자바 클래스 라이브러리 사용한 프로그래밍 가능함.
사용 예) [ 예제 Ex5_7_2_scriptlet.jsp ]