액션태그
JSP 페이지 내에서 특정 작업을 수행하도록 지시하는 태그입니다.
JSP 액션 태그는 각 페이지 간 플로우를 제어하고 Java Beans를 사용하는 데에 사용됩니다.
액션 태그 |
설명 |
jsp:forward |
- 요청과 응답을 다른 리소스로 전달합니다.
- 다른 페이지의 이동과 같은 페이지의 흐름을 제어합니다.
- JSP 페이지의 프로그램 제어를 이동할 때 사용합니다.
|
jsp:include |
- 외부 페이지의 내용을 포함하거나 페이지를 모듈화합니다.
- include한 파일을 실행 시점에서 호출합니다.
|
jsp:useBean |
- Java Beans를 사용하기 위해 Java class를 선언하고 초기화합니다.
|
jsp:param |
- 파라미터 값을 설정합니다.
- name 및 value 속성을 이용하여 설정합니다.
|
jsp:setProperty |
- Java Beans의 property 값을 설정합니다.
- Java Beans의 setter() 메서드를 이용하여 멤버 변수의 값을 저장합니다.
|
jsp:getProperty |
- Java Beans의 property 값을 얻습니다.
- Java Beans의 getter() 메서드를 이용하여 멤버 변수의 값을 가져옵니다.
|
1. forward
<jsp:forward page = "이동할 파일명"/>
- JSP container가 forward 액션을 만나면, 출력 버퍼에 저장되어있는 내용을 삭제하고, forward 액션 태그에 작성한 페이지로 프로그램의 제어가 이동합니다.
- 사용자가 입력한 값에 따라서 접속하는 페이지가 다른 경우에 사용하면 좋습니다.
- 간결하고 구조적으로 웹/JSP 프로그래밍을 할 수 있습니다.
- 각 조건을 처리하는 JSP를 분리하여서 기능 별로 모듈화가 가능합니다.
forward 액션 태그 처리 과정
- 클라이언트(웹 브라우저)가 서버로 JSP 페이지를 요청합니다.
- 요청된 JSP 페이지를 수행합니다.
-
<jsp:forward page = "이동할 파일명"/>
이러한 forward 액션 태그를 만나면 출력 버퍼에 저장되어있는 내용을 삭제하고, 프로그램 제어를 이동할 파일명.jsp로 이동시킵니다.
- 이동할 파일명.jsp 페이지를 수행합니다.
- 이동할 파일명.jsp 페이지를 수행한 결과를 클라이언트(웹 브라우저)에 응답합니다.
2. include
<jsp:include page = "외부 파일명" flush = "false"/>
- 현재 JSP 페이지에서 특정 영역에 외부 파일의 내용을 포함시킵니다.
- HTML, JSP, Servlet 페이지 모두 포함 가능합니다.
- 다소 동적인 페이지들에 유리합니다.
- 전송 데이터에 따라서 출력 결과가 달라지는 동적 디자인을 하는 경우 사용됩니다.
flush 속성
- JSP 페이지는 출력할 내용을 버퍼에 저장하는데 포함될 페이지로 제어가 이동할 때, 현재 페이지가 지금까지 출력 버퍼에 저장한 내용을 어떻게 처리할 것인지 결정합니다.
-
true - 포함될 페이지로 제어가 이동이 될 때, 지금까지 버퍼에 저장한 내용을 웹 브라우저에 출력하고 버퍼를 비웁니다.
-
false - 결과를 합쳐서 출력하기 전까지 버퍼에 출력 내용을 저장합니다.
-
true로 하게 되면, 출력 버퍼는 비워지고 출력 버퍼를 웹 브라우저에 전송하게 되는데, 이 때, 헤더 정보도 같이 전송됩니다. 이렇게 헤더정보가 웹 브라우저로 전송된 이후에는 헤더 정보를 추가하더라도 결과가 반영되지 않습니다.
- 예를 들어, 최초 flush 시에 정상적으로 수행되어 http status 200이 전송되었는데, include된 파일이 문제가 있다고 500 에러로 바꿀 수 없습니다.
include 지시어 vs include 액션 태그
- include 지시어
- 두 개의 JSP가 Servlet으로 변환되는 시점에서 코드를 하나로 합친 다음 변환합니다.
- 코드레벨에서 코드 자체를 포함하는 방식입니다.
- include 지시어를 작성한 페이지에서 변수를 선언하고 include 지시어로 포함시킨 파일에서는 선언하지 않고 사용하는 것도 가능합니다.
- 주로 정적인 페이지를 포함시킬 때 사용합니다.
- include 액션 태그
- 내부적으로 include 액션 태그로 포함시킨 페이지로 흐름이 이동되었다가 포함되는 페이지의 처리가 끝이 나면 흐름이 호출한 쪽으로 돌아오는 방식으로 동작합니다.
- 즉, 두 개의 변환된 Servlet이 동작합니다.
- request 내장객체의 attribute 또는 param 액션태그를 통해 변수나 데이터를 전달합니다.
- JSP 페이지처럼 동적인 페이지를 포함시킬 때 사용합니다.
include 액션 태그 처리 과정
- 클라이언트(웹 브라우저)가 JSP 페이지를 서버에 요청합니다.
- 서버가 JSP 페이지를 처리하고, 페이지 내부의 출력 내용을 출력 버퍼에 저장하는 등의 작업을 합니다.
-
<jsp:include page = "외부 파일명" flush = "false"/>
이러한 include 액션 태그를 만나면 작업을 멈추고, 외부 파일명.jsp로 프로그램 제어를 이동시킵니다.
-
외부 파일명.jsp 페이지를 처리하고, 해당 페이지 내의 출력 내용을 출력 버퍼에 저장합니다.
-
외부 파일명.jsp 페이지의 처리가 끝나면, 다시 요청한 JSP 페이지로 프로그램의 제어가 이동합니다. 이동할 때, 이동의 위치는 include 액션 태그의 다음 행입니다.
-
요청한 JSP 페이지의 나머지 부분을 처리하고, 출력 내용을 출력 버퍼에 저장합니다.
-
출력 버퍼의 내용을 클라이언트(웹 브라우저)로 응답합니다.
3. param
<jsp:param name = "파라미터의 이름" value = "파라미터의 값"/>
forward 액션 태그 또는 include 액션 태그의 바디에 사용하는 액션 태그입니다.
프로그램의 제어가 이동할 때, JSP 페이지로 값을 전달할 때 사용합니다.
여러 개의 값을 전달할 때는 다중의 param 액션 태그를 사용할 수도 있습니다.
- name 속성
- 프로그램 제어가 이동할 때, JSP 페이지에 전달할 파라미터의 이름을 정합니다.
- value 속성
- 프로그램 제어가 이동할 때, JSP 페이지에 전달할 파라미터의 값을 정합니다.
4. useBean
<jsp:useBean id = "Beans의 이름" class = "Java Beans 클래스의 이름" scope = "범위"/>
Java Beans를 사용하기 위해 실제 Java class를 선언하고 초기화하는 태그입니다.
useBean 액션 태그를 사용하여 객체 생성을 할 수 있습니다.
- id: JSP 페이지에서 Java Beans 객체에 접근할 때 사용되는 이름입니다.
- class: 패키지 이름을 포함한 Java Beans 클래스의 완전한 이름을 입력합니다.
- scope: Java Beans 객체가 저장될 영역을 지정합니다. 기본값은 page이고, page, request, session, application 중 하나를 값으로 갖습니다.
5. setProperty
<jsp:setProperty name = "Beans의 이름" property = "property 이름" value = "값"/>
- 자바 Beans의 setter() 메서드에 접근하여 Java Beans의 멤버 변수인 property의 값을 저장하는 태그입니다.
- useBean 액션 태그와 함께 사용됩니다.
- 전달되는 요청 파라미터의 값을 직접 저장할 수 있습니다.
- Java Beans의 property 이름과 동일하게 요청 파라미터를 설정할 수 있습니다.
웹 서버에서 객체 또는 변수가 생성된 후에 유효할 수 있는 범위를 뜻합니다.
4가지의 scope가 존재합니다.
scope 종류 |
유지 범위 |
JSP 내장 객체 |
page |
- 요청된 page 내부에서만 사용합니다.
- 페이지 내에서 지역변수처럼 사용됩니다.
|
pageContext |
request |
- request부터 response까지 사용합니다.
- HTTP 요청을 받아서 웹 브라우저에게 응답할 때까지 변수가 유지됩니다.
|
request |
session |
- 웹 브라우저가 종료될 때까지 혹은 설정한 시간 동안 유지됩니다.
- 웹 브라우저 별로 변수가 관리되는 경우에 사용합니다.
|
session |
application |
- 모든 클라이언트에게 공통적으로 무언가를 보여줄 때 사용합니다.
- 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지됩니다.
|
application |