JSP: 액션태그, scope

오태호·2021년 11월 23일
1
post-thumbnail

액션태그

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 액션 태그 처리 과정

  1. 클라이언트(웹 브라우저)가 서버로 JSP 페이지를 요청합니다.
  2. 요청된 JSP 페이지를 수행합니다.
  3. <jsp:forward page = "이동할 파일명"/>
    이러한 forward 액션 태그를 만나면 출력 버퍼에 저장되어있는 내용을 삭제하고, 프로그램 제어를 이동할 파일명.jsp로 이동시킵니다.
  4. 이동할 파일명.jsp 페이지를 수행합니다.
  5. 이동할 파일명.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 액션 태그

  1. include 지시어
    • 두 개의 JSP가 Servlet으로 변환되는 시점에서 코드를 하나로 합친 다음 변환합니다.
    • 코드레벨에서 코드 자체를 포함하는 방식입니다.
    • include 지시어를 작성한 페이지에서 변수를 선언하고 include 지시어로 포함시킨 파일에서는 선언하지 않고 사용하는 것도 가능합니다.
    • 주로 정적인 페이지를 포함시킬 때 사용합니다.
  2. include 액션 태그
    • 내부적으로 include 액션 태그로 포함시킨 페이지로 흐름이 이동되었다가 포함되는 페이지의 처리가 끝이 나면 흐름이 호출한 쪽으로 돌아오는 방식으로 동작합니다.
    • 즉, 두 개의 변환된 Servlet이 동작합니다.
    • request 내장객체의 attribute 또는 param 액션태그를 통해 변수나 데이터를 전달합니다.
    • JSP 페이지처럼 동적인 페이지를 포함시킬 때 사용합니다.

include 액션 태그 처리 과정

  1. 클라이언트(웹 브라우저)가 JSP 페이지를 서버에 요청합니다.
  2. 서버가 JSP 페이지를 처리하고, 페이지 내부의 출력 내용을 출력 버퍼에 저장하는 등의 작업을 합니다.
  3. <jsp:include page = "외부 파일명" flush = "false"/>
    이러한 include 액션 태그를 만나면 작업을 멈추고, 외부 파일명.jsp로 프로그램 제어를 이동시킵니다.
  4. 외부 파일명.jsp 페이지를 처리하고, 해당 페이지 내의 출력 내용을 출력 버퍼에 저장합니다.
  5. 외부 파일명.jsp 페이지의 처리가 끝나면, 다시 요청한 JSP 페이지로 프로그램의 제어가 이동합니다. 이동할 때, 이동의 위치는 include 액션 태그의 다음 행입니다.
  6. 요청한 JSP 페이지의 나머지 부분을 처리하고, 출력 내용을 출력 버퍼에 저장합니다.
  7. 출력 버퍼의 내용을 클라이언트(웹 브라우저)로 응답합니다.

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
profile
자바, 웹 개발을 열심히 공부하고 있습니다!

0개의 댓글