액션태그란?
액션 태그는 태그 형태로 제작되므로, 자바 문법과는 사용방법에 있어 차이가 있다.
액션 태그의 형태
JSP 페이지 제작 시 사용하는 여러 스크립팅 요소들과 마찬가지로 JSP 페이지 내 작성된 액션 태그도 서블릿 클래스로 변환될 때 해당 태그가 수행되어야 코드들로 변경된다.
액션 태그는 JSP 페이지의 표준으로 지정된 기술이므로 별도의 설치나 JSP 페이지 내 임포트 없이 바로 사용이 가능하다.
액션 태그의 일반적인 형태는 다음과 같이 접두어 "jsp"와 ":" 뒤의 사용할 태그의 이름, 사용할 액션 태그 내 지정 가능한 속성과 속성값으로 구성된다.
<jsp:태그 이름 속성="속성값" 속성="속성값".../>
태그 가장 앞에 위치한 'jsp:'와 같은 접두어는 액션 태그 외에도 JSP 페이지에서 사용 가능한 외부 태그를 지정하기 위해 사용된다.
액션 태그를 제외한 JSP 페이지에서 사용가능한 외부 태그를 통틀어 커스텀 태그(Custom Tag)라고 하며 대표적인 커스탬 태그에는 JSTL(JSP Standard Tag Library)이 있다. JSTL은 아래와 같은 형태를 띤다.
<c:태그 이름 속성="속성값" 속성="속성값".../>
JSTL과 커스텀 태그는 액션 태그에서 지원하지 않는 다양한 기능들을 구현하거나 프로그래머가 직접 수행할 기능을 정의하기 위해 사용한다.
액션 태그의 분류
액션 태그는 사용용도에 따라 크게 페이지 흐름 제어, 자바 빈 클래스 사용, 애플릿/빈 객체의 포함과 스크립팅 요소의 사용 등 네가지로 분류할 수 있다.
이들 분류에 따른 액션 태그의 종류는 다음과 같다.
페이지 흐름 제어
forward : 페이지 포워딩
include : 페이지 인클루드
param : 파라미터 전송
자바 빈 사용
useBean : 자바 빈 객체 생성
setProperty : 자바 빈 멤버 변수 값 저장
getProperty : 자바 빈 멤버 변수값 불러오기
애플릿/빈 객체 포함
plugin : 자바 애플릿, 빈을 JSP 페이지 내에 포함
스크립팅 요소 사용
scriptlet : 자바코드 작성, 서블릿 클래스 변환시 _jspService() 메서드에 포함
expression : 변수, 메서드의 리턴, 연산 등의 결과값을 출력
declartion : 멤버변수 및 멤버 메서드 선언
액션 태그의 사용
액션 태그를 사용하면 지금까지 보아왔던 방식과는 다른 방식으로 JSP 페이지의 기능을 구현하게 된다.
그러나 본래 자바 언어를 통해 구현할 수 있는 기능을 간단하게 제작하기 위해 액션 태그를 사용하기 때문에 기존 기능 구현에 대한 이해가 되어 있다면 그리어렵지 않게 사용할 수 있다.
액션태그는 서블릿 형태의 클래스로 변환 시 형식에 맞는 정해진 자바코드로 가공되어 삽입된다.
페이지 흐름 제어
페이지 흐름 제어 기능에 사용할 수 있는 액션 태그에는 forward, include param 세가지가 있다.
forward와 include 액션 태그는 pageContext 내장 객체에서 사용했던 forward(), include() 메서드와 동일한 효과를 가진다.
param 액션 태그는 포워딩 방식이나 인클루드 방식을 사용할 때 함께 전송할 데이터를 파라미터로 등록하여 사용한다.
forward 액션 태그
forward 액션 태그는 pageContext 내장 객체의 forward() 메서드와 동일한 역할을 하는 액션 태그로, 현재 페이지의 요청/응답 처리 제어권을 포워딩 대상이 되는 페이지로 넘겨줄 때 사용한다.
<jsp:forward page ="포워딩 대상 페이지"/>
forward 액션 태그안에 param 액션 태그와 같이 바디 영역에 들어갈 내용이 있다면 아래와 같이 시작태그와 종료 태그로 나누어서 사용할 수 도 있다.
<jsp:forward page ="포워딩 대상 페이지">
바디영역
<\jsp:forward>
JSP 페이지에 태그 형태로 구현하는 액션 태그 역시 실제 실행 단계에서는 서블릿 형태의 클래스 내 자바 코드로 변경된다.
즉 forward 액션 태그도 서블릿 형태 클래스로 변환시 pageContext 내장객체의 forward() 메서드를 호출하여 실행된다.
include 액션 태그
include 액션 태그도 forward 액션태그와 방식이 똑같다.
pagaContext 내장객체의 include() 메서드와 동일한 방식으로 작동한다.
include 방식은 포워딩 방식처럼 대상 페이지로 요청과 응답의 제어권을 넘겨주지만, 대상 페이지 실행이 종료되면 다시 제어권을 돌려받는다는 점에 차이가 있다.
<jsp:include page ="인클루드 대상 페이지"/>
:include 액션 태그안에 param 액션 태그와 같이 바디 영역에 들어갈 내용이 있다면 아래와 같이 시작태그와 종료 태그로 나누어서 사용할 수 도 있다.
<jsp::include page ="인클루드 대상 페이지">
바디영역
<\jsp::include>
param 액션태그
param 액션 태그는 forward나 include 액션 태그처럼 특정 웹 페이지로 요청, 응답 제어권을 넘겨 대상 웹페이지 내용을 수행할 때전달한 데이터를 첨부하기 위해 사용한다.
기본적으로 수행 대상이 될 웹페이지에 전달하기 위한 데이터들은 request 내장 객체에 담겨 있지만, param 액션 태그는 request 내장 객체에 지정된 데이터 이외의 값을 사용하거나 이미 저장되어 있는 값을 변경할 때 요기하게 사용한다.
<jsp:param name="파라미터이름" value="파라미터값"/>
param 액션 태그는 forward나 include 액션 태그 하위 태그로 사용하여 여러 파라미터 지정이 가능하다.
이처럼 전달해야 할 파라미터를 직접 request 요청 객체에 지정하여 전송하는 기능을 수행한다.
이외에도 param 액션 태그는 이미 먼저 정의된, 즉 request 내장객체에 이미 특정 파라미터가 존재할 때 그 파라미터 값을 임의로 변경하여 전송하는 것도 가능하다.
이는 param 액션 태그에 정의된 파라미터가 request에 지정된 파라미터 보다 우선되기 때문이다.
자바 빈(Java Bean) 사용
자바 빈 클래스는 게시판의 글 정보나 회원정보와 같이 웹 서비스에서 여러 종류의 데이터가 하나의 정보를 구성할 때 각 데이터를 관리하기 위해 제작하는 클래스이다.
useBean, setProperty, getPropery 액션 태그를 사용하면 JSP 페이지 내 자바 코드 사용없이 간단히 자바 빈 클래스의 객체를 생성하여 활용할 수 있다.
자바 빈 클래스
자바 빈 클래스는 웹 애플리케이션의 특정 기능을 수행하기 위한 다양한 데이터를 한 번에 관리 및 활용하기 위해 제작하는 클래스이다.
웹 서비스에서는 이후 웹 애플리케이션을 데이터베이스에 연동하여 JSP 페이지와 데이터베이스 사이에서 전송되어야 할 데이터를 담는 방식으로 밚이 활용한다.
자바 빈 클래스는 애플리케이션 내 데이터 관리라는 목적을 가진 클래스이므로, 제작 시 지켜야할 사항이 몇가지 존재하며 이를 자바 빈 규약이라고 한다.
- 자바 빈 클래스는 입력 파라미터가 없는 기본생성자를 포함해야 한다.
- 자바 빈 크래스의 프로퍼티는 get/set/is 메서드로 접근하며, 메서드명은 표준 명명 규칙을 따라만든다. set 메서드의 경우, 입력 파라미터를 하나 이상 가질 수 있다.
- 자바 빈 클래스는 객체의 직렬화를 위해 java.io.Serializable 인터페이스를 구현한다.
위 규약과 더불어 자바 빈 클래스는 프로퍼티가 될 변수를 private로 선언하고, 해당 변수의 값을 불러오거나 저장히기 위해 사용하는 set/get/is 메서드들은 public 으로 성너한ㄴ다.
이는 접근 제어자를 통해 변수의 접근을 메서드만을 통해 허용하기 위함이다.
useBean 액션태그
userBean 액션 태그는 자바 빈 클래스의 객체를 생성하기 위해 사용하는 액션 태그이다.
JSP 페이지에서 일반적으로 특정 클래스를 사용하려면 page 지시자의 import 속성을 이용하여 사용할 클래스를 JSP 페이지에 명시한 후 참조 변수와 생성자를 통해 객체를 생성하지만, useBean 액션 태그를 사용할 경우 자바 빈 클래스의 객체 생성을 태그 형식으로 간단히 사용할 수 있다.
userBean 액션 태그에서 사용할 수 있는 속성은 아래와 같으며, 일반적으로 id와 class 두 가지 속성을 지정하여 자바 빈 클래스 객체를 생성한다.
id : scope 범위에서 사용될 자바 빈 객체의 변수명
class : 객체 생성을 위한 클래스의 패키지를 포함한 클래스명의 경로
scope : 자바 빈 객체가 사용될 수 있는 범위를 기술 , page(기본값), request, session, application의 값을 가질 수 있음
beanName : 객체 생성을 위한 클래스 명
type : 객체의 데이터 타입을 지정, class 속성에 사용된 클래스(기본값) 혹은 해당 클래스의 부모 클래스나 인터페이스로 지정
따라서 useBean 액션 태그를 사용한 객체 생성은 아래와 같이 id 속성에 생성할 객체명을 지정하고, class 속성에는 객체를 생성할 자바 빈 클래스를 지정하는 형태로 작성할 수 있다.
<jsp:useBean id="myMember" class"Member"/>
==
Member myMember = new Member();
setProperty 액션 태그 & getProperty 액션 태그
serProperty 액션 태그는 자바 빈 객체의 속성값을 지정하기 위해 사용되며, JSP의 스크립팅 요소를 이용하여 자바 빈 클래스이 setter 메서드를통해 자바 빈 객체 내 변수의 값을 할당하는 기능과 동일한 기능을 제공한다.
name : 자바 빈 객체의 변수명 (set & get)
property : 값을 지정해줄 name으로 지정된 객체 내 멤버 변수명 (set & get)
value : property에 지정된 멤버 변수에 지정할 값 (set)
param : propery에 지정된 멤버변수에 지정할 값을 request 내장객체에 담긴 파라미터 명을 사용해 해당 파라미터의 값으로 지정하기 위해 사용 (set)
일반적으로 serPropery 액션 태그를 사용하여 자바 빈 객체의 프로퍼티에 값을 설정할 경우, value 속성이 자주 사용되며, request 내장객체 내 파라미터의 값을 지정하려 할 때는 param 속성을 사용할 수 있다.
<jsp:setProperty name="myMember" propery ="id" value="OKJSP"/>
==
myMember.setId("OKJSP");
<jsp:getProperty name="자바빈 객체명" propery="속성(변수명)"/>
==
myMember.getId()
스크립팅 요소
JSP 페이지의 스크립팅 요소들도 액션 태그로 사용이 가능하다.
scriptlet 액션 태그
바디영역
</jsp:scriptlet>
expression 액션 태그
바디영역
</jsp:expression>
declaration 액션 태그
바디영역
</jsp:declaration>