JSP 액션 태그

박승현·2022년 4월 24일

JSP

목록 보기
3/11

액션 태그의 개요

액션태그는 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그로 스크립트 태그, 주석, 디렉티브 태그와 함께 JSP 페이지를 구성하는 태그이다. 액션 태그는 JSP 페이지에서 페이지와 페이지 사이를 제어하거나, 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나, 자바빈즈 등의 다양한 기능을 제공한다.
액션 태그는 다양한 종류가 있으며, <% ... %>와 같은 스크립트 태그의 형식을 따르지 않고 XML 형식 <jsp: ... />를 사용한다. 액션 태그는 반드시 끝나는 태그 />로 마무리해야 한다.

액션태그형식설명
forward<jsp:forward .../>다른 페이지로의 이동과 같은 페이지 흐름을 제어한다.
include<jsp:include .../>외부 페이지의 내용을 포함하거나 페이지를 모듈화한다.
useBean<jsp:useBean .../>JSP 페이지에 자바빈즈를 설정한다.
setProperty<jsp:setProperty .../>자바빈즈의 프로퍼티 값을 설정한다.
getProperty<jsp:getProperty .../>자바빈즈의 프로퍼티 값을 얻어온다.
param<jsp:param ... /><jsp:forward>,<jsp:include>,<jsp:plugin> 태그에 인자를 추가한다.
plugin<jsp:plugin ... />웹 브라우저에 자바 애플릿을 실행한다. 자바 플러그인에 대한 OBJECT 또는 EMBED 태그를 만드는 브라우저별 코드를 생성한다.
element<jsp:element ... />동적 XML 요소를 설정한다.
attribute<jsp:attribute .../>동적으로 정의된 XML 요소의 속성을 설정한다.
body<jsp:body ... />동적으로 정의된 XML 요소의 몸체를 설정한다.
text<jsp:text .../>JSP 페이지 및 문서에서 템플릿 텍스트를 작성한다.

forward 액션 태그의 기능과 사용법

forward 액션 태그는 현재 JSP 페이지에서 다른 페이지로 이동하는 태그로 형식은 다음과 같다. JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용을 모두 삭제한다. 그리고 forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동한다.

<jsp:forward page="파일명" />
또는
<jsp:forward page="파일명" /> </jsp:forward>

여기서 page 속성 값은 현재 JSP 페이지에서 이동할 페이지의 외부 파일명이다. 이때 외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL을 설정해야 한다.

first.jsp
<body>
  <h2>이 파일은 first.jsp입니다.</h2>
  <jsp:forward page="second.jsp" />
  <p>===first.jsp의 페이지===</p>
</body>
second.jsp
<body>
  <h2>이 파일은 second.jsp입니다.</h2>
  Today is : <%=new java.util.Date()%>
</body>
  • forward 액션 태그의 처리과정
    1.웹 브라우저에서 웹 서버로 first.jsp를 요청한다.
    2.JSP 컨테이너는 요청된 first.jsp를 실행한다.
    3.first.jsp를 실행하다가 forward 액션 태그를 만나면 지금까지 저장된 출력 버퍼의 내용을 삭제하고 프로그램 제어를 page 속성에서 설정한다. second.jsp로 이동한다.
    4.second.jsp를 실행한다.
    5.JSP 컨테이너는 second.jsp를 실행한 결과를 웹 브라우저에 응답으로 보낸다.

include 액션 태그의 기능과 사용법

include 액션 태그는 include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함하는 태그로 형식은 다음과 같다. 현재 JSP 페이지에 포함할 수 있는 외부 파일은 HTML, JSP, 서블릿 페이지 등이다.

<jsp:include page="파일명: flush="false"/>

여기서 page 속성 값은 현재 JSP 페이지 내에 포함할 내용을 가진 외부 파일명이다. 이때 외부 파일은 현재 JSP 페이지와 같은 디렉터리에 있으면 파일명만 설정하고, 그렇지 않으면 전체 URL을 설정해야 한다. flush 속성 값은 설정한 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리한다. 기본 값은 false이고, true로 설정하면 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장된 내용을 웹 브라우저에 출력하고 출력 버퍼를 비운다.

flush 속성 값

일반적으로 flush 속성은 false로 지정하는 것이 좋다. true로 지정하면 일단 출력 버퍼를 웹 브라우저에 전송하는데 이때 헤더 정보도 같이 전송된다. 헤더 정보가 웹 브라우저에 전송되고 나면 헤더 정보를 추가해도 결과가 반영되지 않는다.

include 액션 태그는 forward 액션 태그처럼 외부 파일을 포함한다는 점이 비슷하지만 포함된 외부 파일이 실행된 후 현재 JSP 페이지로 제어를 반환한다는 것이 가장 큰 차이점이다. 또한 JSP 컨테이너는 현재 JSP 페이지에서 include 액션 태그를 만나면 include 액션 태그에 설정된 외부 파일의 실행 내용이 현태 JSP 페이지의 출력 버퍼에 추가 저장되어 출력된다.

first.jsp
<body>
  <h3>이 파일은 first.jsp입니다.</h3>
  <jsp:include page="second.jsp" flush="false"/>
  <p>Java Server Page</p>
</body>
second.jsp
<body>
  <h3>이 파일은 second.jsp입니다.</h3>
  Today is : <%=new java.util.Date()%>
</body>
  • include 액션 태그의 처리과정
    1.웹 브라우저에서 웹 서버로 first.jsp를 요청한다.
    2.JSP 컨테인는 요청받은 first.jsp를 처리하고 first.jsp 내의 출력 내용이 출력 버퍼에 저장된다.
    3.이때<jsp:include page="second.jsp" flush="false"/> 문장을 만나면 하던 작업을 멈추고 프로그램 제어를 second.jsp로 이동한다.
    4.second.jsp를 실행하고 second.jsp 내의 출력 내용이 출력 버퍼에 저장된다.
    5.second.jsp의 처리가 끝나면 다시 first.jsp로 프로그램의 제어가 이동하는데, 이동 위치는<jsp:include page="second.jsp" flush="false"/> 문장의 다음 행이 된다.
    6.first.jsp의 나머지 부분을 처리하고 출력할 내용이 있으면 출력 버퍼에 저장한다.
    7.JSP 컨테이너는 출력 버퍼의 내용을 웹 브라우저에 응답으로 보낸다.

include 액션 태그와 include 디렉티브 태그의 차이

구분include 액션 태그include 디렉티브 태그
처리시간요청 시 자원을 포함한다.번역 시 자원을 포함한다.
기능별도의 파일로 요청 처리 흐름을 이동한다.현재 페이지에 삽입한다.
데이터 전달 방법request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터를 전달한다.페이지 내의 변수를 선언한 후 변수에 값을 저장한다.
용도화면 레이아웃의 일부분을 모듈화할 때 주로 사용한다.다수의 JSP 웹 페이지에서 공통으로 사용되는 코드나 저작권과 같은 문장을 포함하는 경우에 사용한다.
기타동적 페이지에 사용한다.정적 페이지에 사용한다.

param 액션 태그의 기능과 사용법

param 액션 태그는 현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그로 형식은 다음과 같다. 이 태그는 단독으로 사용되지 못하며 <jsp:forward><jsp:include> 태그의 내부에 사용된다. 또한 다른 페이지에 여러 개의 정보를 전송해야 할 때는 다중의 param 액션 태그를 사용할 수 있다.

<jsp:forward page="파일명">
  <jsp:param name="매개변수명1" value="매개변수값1"/>
  <jsp:param name="매개변수명1" value="매개변수값1"/>
</jsp:forward>
first.jsp
<body>
	<h3>이 파일은 first.jsp입니다.</h3>
	<jsp:include page="second.jsp">
		<jsp:param name="date" value="<%=new java.util.Date()%>"/>
	</jsp:include>
    <p>Java Server Page</p>
</body>
second.jsp
<body>
	Today is : <%=request.getParameter("date")%>
</body>

자바빈즈 액션 태그의 기능과 사용법

JSP 페이지의 주요 기능 중 하나는 데이터를 보여주는 것이다. 하나의 JSP 페이지에 데이터를 보여주기 위한 자바 코드와 단순히 화면을 출력하는 HTML 코드를 함께 작성하면 기능을 확장하거나 코드를 재사용하는 데 어려움이 있다. 따라서 프로그램의 효율을 높이기 위해 화면을 출력하는 부분과 데이터를 처리하는 로직 부분을 구분하여 작성하며, 로직 부분의 코드에 자바빈즈라는 클래스를 사용한다.

자바빈즈의 개요

자바빈즈는 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법이다. 즉 JSP 페이지에서 화면을 표현하기 위해 계산식이나 자료의 처리를 담당하는 자바코드를 따로 분리하여 작성하는 것이 자바빈즈이다. 따라서 JSP페이지가 HTML과 같이 쉽고 간단한 코드만으로 구성된다.

  1. 웹 브라우저가 JSP 페이지에 요청을 전송한다.
  2. JSP 페이지는 자바빈즈와 통신한다.
  3. 자바빈즈가 데이터베이스에 연결된다.
  4. JSP 페이지가 브라우저에 응답한다.

자바빈즈는 데이터 표현을 목적으로 하는 자바 클래스이므로 기존의 자바 클래스를 작성하는 방법과 동일하게 작성한다. 자바빈즈는 데이터를 담는 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 메소드로 구성된다. 자바빈즈를 작성할 때는 다음 규칙을 따라야 한다.

  1. 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
  2. 인수가 없는 기본 생성자가 있어야 한다.
  3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
  4. 모든 멤버 변수인 프로퍼티는 Getter/Setter() 메소드가 존재해야 한다. Getter() 메소드는 멤버 변수에 저장된 값을 가져올 수 있는 메소드고, Setter() 메소드는 멤버 변수에 값을 저장할 수 있는 메소드이다.

[자바빈즈 작성 예]

package com.dto;
import java.io.Serializable;

public class MemeberBean implements Serializable{
	private int id;
    private String name;
    public MemberBean(){
    }
    public int getId(){
    	return id;
    }
    public void setId(int id){
    	this.id=id;
    }
    public int getName(){
    	return name;
    }
    public void setName(String name){
    	this.name=name;
    }
}

useBean 액션 태그로 자바빈즈 사용하기

usebean 액션 태그는 JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그로 형식은 다음과 같다. useBean 액션 태그는 설정된 id 속성과 scope 속성을 바탕으로 자바빈즈의 객체를 검색하고, 객체가 발견되지 않으면 빈 객체를 생성한다.

<jsp:useBean id="자바빈즈 식별이름" class="자바빈즈 이름" scope="범위"

속성설명
id자바빈즈를 식별하기 위한 이름이다.
class패키지 이름을 포함한 자바빈즈 이름이다. 자바빈즈는 인수가 없는 기존 생성자가 있어야 하며 추상 클래스를 사용할 수 없다.
scope자바빈즈가 저장되는 영역을 설정한다. page(기본값), request,session,application 중 하나의 값을 사용한다.
<body>
  <jsp:useBean id="date" class="java.util.Date"/>
  <p> 
    <%
         out.print("오늘의 날짜 및 시각");
    %>
  </p>
  <p><%=date%></p>
  • 자바빈즈로 Date 클래스를 사용하도록 useBean 액션 태그를 작성한다.
  • out 내장 객체 변수를 통해 설정한 문자열을 출력하도록 스크립틀릿 태그를 작성한다.
  • useBean 액션 태그에 id 속성 값으로 현재 날짜와 시각을 출력하도록 표현문 태그를 작성한다.

setProperty 액션 태그로 프로퍼티의 값 저장하기

setProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 setter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그로 형식은 다음과 같다. setProperty태그는 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다. 또는 모든 자바빈즈 프로퍼티 이름과 동일하게 요청 파라미터를 설정할 수 있다.

속성설명
nameuseBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름이다.
property자바빈즈의 프로퍼티 이름이다. 만약 프로퍼티 이름에 '*'를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 Setter()메소드에 전달됨을 의미한다.
value변경할 자바빈즈의 프로퍼티 값이다. 만약 프로퍼티 값이 null이거나 존재하지 않는 요청 파라미터인 경우에는 SetProperty 액션 태그가 무시된다.
param자바빈즈의 프로퍼티 값을 전달하는 요청 파라미터의 이름이다. param과 value를 동시에 모두 사용할 수 없으며 하나를 선택하여 사용하는 것은 가능하다.

<jsp:setProperty name="member" property="id" value="admin"/>

getProperty 액션 태그로 프로퍼티의 값 가져오기

getProperty 액션 태그는 useBean 액션 태그와 함께 자바빈즈의 Getter() 메소드에 접근하여 자바빈즈의 멤버 변수인 프로퍼티의 값을 가져오는 태그로 형식은 다음과 같다.

<jsp:getProperty name="자바빈즈 식별이름" property="프로퍼티 이름"/>

속성설명
nameuseBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름이다.
property자바빈즈의 프로퍼티 이름이다. 만약 프로퍼티 이름에 '*'를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 Getter() 메소드에 전달됨을 의미한다.
profile
그냥 해보자 안되더라도 해보자 끝까지 해보자

0개의 댓글