JSP 프로그래밍1
JSP 프로그래밍
JSP 란
개념
- 동적으로 콘텐츠를 생성하기 위해 프로그래밍 코드가 담긴 스크립트를 포함할 수 있게 하고, HTML과 유사한 태그를 통해 어려운 자바 코딩 없이도 자바 객체를 사용할 수 있음
- JSP 기술의 기반
- 템플릿 데이터
- 동적인 데이터의 추가 - 표현식, EL
- 기능의 추상화 - 자바 빈즈, 태그 라이브러리
장점
- Write Once, Run Anywhere properties
- 역할 분리
- 프레젠테이션 기능과 비즈니스 로직 기능 분리하여 개발자와 디자이너의 역할 분리 가능
- 컴포넌트, 태그 라이브러리 재사용
- 자바 빈즈 컴포넌트, EJB, 태그 라이브러리
- 정적 콘텐츠와 동적 콘텐츠 분리
- 액션, 표현식, 스크립팅 제공
- 액션 : JSP에서 사용되는 요소의 하나. 내장 객체, 서버 측 객체와 상호 동작할 수 있도록 유용한 기능을 추상화한 표준 태그
- 표현식 : 데이터에 접근하기 위해 제공
- 스크립팅 : 이러한 기능들을 서로 엮어서 콘텐츠를 생성해 낼 수 있도록 페이지 내에 자바 코드 삽입할 수 있는 영역 제공
JSP 동작 원리
JSP 기술이 지원하는 주요 항목
- 표준 지시자
- 표준 액션
- 스크립트팅 요소
- 태그 확장 매커니즘
- 템플릿 콘텐츠
웹 애플리케이션
- 서버상에서 동작하는 자바 런타임 환경
- 요청을 처리하고 동적 콘텐츠를 생성하는 JSP
- 요청을 처리하고 동적 콘텐츠를 생성하는 서블릿
- 서버 측 자바빈즈 컴포넌트
- HTML, DHTML, XHTML, XML 등의 페이지
- 클라이언트 측 자바 애플릿, 자바빈즈 컴포넌트, 자바 클래스 파일들
- 클라이언트 측에서 동작하는 자바 런타임 환경
컴포넌트와 컨테이너
- 컴포넌트와 컨테이너를 분리하여 컴포넌트의 재사용 가능
변환과 실행
- 변환 : 컨테이너가 JSP를 해석하여 실행될 수 있는 서블릿 클래스 파일로 변환
- 실행 : 요청이 있을 때마다 발생
스크립트 기반 태그
- 스크립트 기반 태그
-
<% %>
형식
-
<%@ %>
페이지에 대한 정보 설정
-
<%! %>
멤버변수 또는 메소드 선언
-
<% %>
_jspService() 내에 그대로 옮겨짐
-
<%= %>
_jspService() 내에 out.print()로 변경되서 옮겨짐.
- 주석문
- 지시자
- page : JSP 페이지에 종속적인 설정 정보들을 알려주기 위한 수단
- include : 다른 파일에 있는 코드를 가져다 사용
- 스크립트릿
- JSP 페이지가 요청될 때마다 수행되어야 하는 자바 코드를 추가할 때 사용
- JSP 태그를 사용하다 HTML 태그를 사용하려면 JSP 태그를 닫고 써야 함
- 표현식
- 동적인 데이터를 응답 결과에 포함하기 위해 사용
<%= 실행문 %>
- 선언문
- JSP 페이지 내의 스크립트 코드에서 사용할 멤버 변수를 선언하거나 메소드 정의
-
<%! 변수 선언 %>
<%! 메소드 선언 %>
- XML 기반 태그
내장 객체
- JSP 파일이 자바 소스 파일로 변환될 때 _jspService() 메소드 내에 자동으로 선언 및 초기화되는 변수들
request, response
- HttpServletRequest, HttpServletResponse 타입으로 요청 정보와 응답 정보를 처리하는 객체
session
- javax.servlet.http.HttpSession의 내장 객체
- 클라이언트마다 하나씩 생성되며, 클라이언트 단위로 정보를 유지하고자 할 때 사용
out
- javax.servlet.jsp.JspWriter 타입
- 버퍼 관련 메소드, 출력 관련 메소드
application
- javax.servlet.ServletContext 타입
- 웹 애플리케이션마다 하나씩 서비스가 시작될 때 생성되는 객체
- 서버에 대한 정보 추출과 웹 애플리케이션 단위로 상태 정보 유지하기 위해 사용
pageContext
- javax.servlet.jsp.PageContext 타입
- JSP 페이지당 하나씩 자동으로 생성
표준 액션 태그, JSP 자바빈즈
표준 액션 태그
- 미리 정해진 기능들을 JSP 스펙에 명시함으로써 모든 컨테이너가 동일하게 구현하는 태그
- 모든 JSP 컨테이너에서 기본으로 제공
태그 라이브러리 이름
- 표준 액션 태그를 사용하거나 다른 개발자들이 만든 커스텀 태그 사용 가능
-
<태그 라이브러리 이름 : 태그 이름>
⇒ <jsp : output>
-
<jsp:forward>
<jsp:forward page="경로" || "<%= %>" || "${ }" />
- 서블릿에서 RequestDispatcher 객체의 forward() 메소드 기능 실행
- 다른 페이지로 이동할 때 사용하는 태그
-
<jsp:include>
<jsp:include page="경로" || "<%= %>" />
- 다른 페이지를 현재 페이지에 포함하고자 할 때 사용
JSP 자바빈즈
- JSP의 표준 액션 태그로 접근할 수 있는 자바 클래스
- 값을 가지는 속성(멤버 변수)과 값을 설정하는 메소드(setter), 값을 추출하는 메소드(getter)로 구성
- 하나의 JSP 페이지에 종속되지 않고 여러 JSP 페이지에서 사용
- 장점
- 폼 데이터 처리 용이 - 클라이언트로부터 전달된 데이터를 쉽게 추출하고 다른 페이지에서 참조할 수 있음
- 자바빈즈 활용 범위 확장 용이 - 자바빈즈를 활용하여 쉽게 상태 유지 ⇒ 여러 범위에서 사용
- 컴포넌트 기반 구현 - JSP 페이지 크기 작아짐 ⇒ 컴포넌트 재활용, 개발 용이
개발 규약
- 패키지화
- 기본 패키지에 있으면 인식 안됨. 패키지화 필요
- 기본 생성자 존재
- 객체가 생성될 때 기본 생성자를 이용하기 때문에 반드시 기본 생성자가 있어야 함
- 멤버변수의 접근자는 private로 선언
- getter, setter 메소드 작성, public 접근자 선언
- 직렬화 구현(선택 사항)
- 객체 정보를 기본형 데이터와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환시켜 입출력
사용
HelloBean hello = new HelloBean(); == <jsp:useBean class="HelloBean" id="hello">
hello.getName(); == <jsp:getProperty property="name" name="hello">
- 자바빈즈 클래스의 객체를 생성하거나 이미 생성된 객체를 추출하는 기능
-
<jsp:useBeam 속성 />
- id : 유일한 값, 대소문자 구분, 영문 / 숫자 / _로 시작
- class
- type : 생략 ⇒ 기본으로 주어진 자바빈즈 클래스 타입으로 접근, 부모 type으로 접근하게 하려면 type 속성을 사용하여 부모 타입 지정
- scope
- page : 하나의 JSP 페이지에서만 사용
- request : 요청이 처리되는 동안 forward, include된 페이지 간에 사용
- session : 클라이언트 단위로 사용
- application : 웹 애플리케이션 단위로 사용
- getter 메소드를 호출하여 필요한 기능을 수행하고 그 결과를 주어진 위치에 출력할 때 사용
- name : 사용하려는 자바빈 태그에서 정의한 id 속성값과 동일하게 지정
- property : 값을 추출하려는 자바빈즈 객체의 멤버변수 이름 지정
- setter 메소드 호출하는 표준 액션 태그
- name : 사용하려는 자바빈 태그에서 정의한 id 속성값과 동일하게 지정
- property : 값을 수정하려는 자바빈즈 객체의 멤버변수 이름 지정
- value : 자바빈즈 객체의 속성을 변경하려는 값 지정
- param : 질의 문자열에서 param 속성에 할당된 값과 같은 name의 값으로 자바빈 속성값 설정
- 설정 값 생략 : 질의 문자열에서 멤버변수와 같은 name 찾아 자동으로 설정
- property = “*” :