본문 바로가기
Backend/JSP

[JSP] 액션 태그

by 그적 2020. 9. 29.

액션 태그란?
: 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
  JSP와 JSP 사이를 제어하거나 다른 페이지의 실행 결과를 현재 페이지에 포함시킬 수 있다.
  XML 형식 : <jsp: .../>  혹은 < jsp: > </jsp: >

(주요 액션 태그)
① forward : 다른 페이지의 이동과 같은 페이지의 흐름을 제어한다. // 컨트롤을 누가 갖고 있냐?
② include : 외부 페이지의 내용을 포함하거나 페이지를 모듈화 한다.  // 디렉티브 include와 차이점
③ param : 파라미터를 얻음
④ useBean : 자바 빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화한다.
⑤ setProperty : 자바빈즈의 property를 설정
⑥ getProperty : 자바빈즈의 property를 얻음

 

① forward 액션 태그
: jsp 컨테이너가 forward 액션 태그를 만나면, 그전까지 출력 버퍼에 저장되어있던 내용을 모두 삭제하고, forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동한다.

<jsp:forward page="이동할 외부 파일명" />

- 액션 태그는 스크립트 태그를 이용하여 jsp 페이지에 직접 자바 코드를 작성하지 않기 위해 사용된다.
- 유지 보수 효율성
- flush된 후에, 컨트롤러가 외부 jsp 파일로 이동한다.
- 컨트롤러는 외부 jsp로 이동하지만, 웹 브라우저의 주소(url)는 처음에 요청한 jsp 파일이다.


② include 액션 태그
: 현재 jsp 페이지의 특정 영역에 외부 파일의 내용을 포함한다.
<jsp:include page="외부 파일명" flush="false" />

- flush 속성 값은 html, jsp, 서블릿 페이지 등 사용 가능하다.
 ** 기본 값은 false, true로 설정하면 외부 파일로 제어권이 이동할 때, 현재 jsp 페이지가 지금까지 출력 버퍼에 저장된 내용을 웹 브라우저에 출력하고 출력 버퍼를 비운다. 
   // 그럼 원래는 출력 버퍼에 저장한 결과를 처리하고 나서 include되는 것이다.
** 일반적으로 flush 값은 false로 해두는 것이 좋다. 왜냐하면 true로 할 경우에는 헤더 값이 다시 같이 전송되는데, 이때 수정된 헤더 정보를 추가해도 이미 헤더 정보는 전송된 후에 지워진 상태라 수정된 헤더를 추가해도 반영이 되지 않는다.


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

1) 동적
2) 처리된 내용을 포함
3) 요청 시 자원 포함
4) 별도의 파일로 요청 처리 흐름을 이동
5) request 기본 내장 객체나 param 액션 태그를 이용하여 파라미터 전달
6) 화면 레이아웃의 일부분을 모듈화할 때 주로 사용 
- include 디렉티브 태그

1) 정적
2) 텍스트로 포함
3) 번역 시 자원 포함
4) 현재 페이지에 삽입
5) 페이지 내의 변수를 선언후에 변수에 값을 저장
6) 공통으로 사용되는 코드나 저작권을 포함하는 경우에 사용한다.

 

③ param 액션 태그
: 현재 jsp 페이지에서 다른 페이지에 정보를 전달하는 태그
<jsp:include page="외부파일명" name="식별자" value="값" />

- 단독으로 사용 못하고, <jsp:forward>나 <jsp:include> 태그의 내부에서 사용된다.
- 다른 페이지에 여러 개의 정보를 전송해야할 때는 다중의 파라미터 액션 태그를 사용한다.
- param 액션 태그로 받아오는 파라미터는 getParameter("식별자"); 를 통해 받을 수 있고, request를 사용하여 현재 페이지에 요청을 보낸다.


④ javaBean 액션 태그
동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법
  (과정) 웹브라우저가 jsp에 request -> jsp는 자바 빈즈를 이용해서 데이터 베이스를 사용함.

- 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것.
- '화면 출력'과 '데이터 처리' 부분을 분리하여 데이터처리를 자바 빈즈를 통해 다룰 수 있도록 작성하는 것.
- 자바 빈즈는 property와 method로 구성한다.

 

1) 자바 클래스는 java.io.Serializable 인터페이스를 구현해야한다.

   // 생략 가능, 저장된 프로퍼티를 포함하여 파일 시스템에 저장 혹은 네트워크로 전송될 수 있도록
      "객체 직렬화"를 제공한다.
2) 인수가 없는 기본 생성자가 있어야 한다.
3) 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
4) 모든 멤버 변수인 프로퍼티는 getter/setter() 메서드가 존재해야 한다.
 - getter() 메서드 : 멤버 변수에 저장된 값을 가져올 수 있는 메서드
 - setter() 메서드 : 멤버 변수에 값을 저장할 수 있는 메서드

 

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

public class MemberBean implements java.io.Serializable{
	private int id;
	private String name;
	public MemberBean(){
	}
	public int getID(){ return id;}
	public void setID(){ this.id=id;}
	public String getName(){ return name;}
	public void setName(){ this.name=name;}
}

⑤ useBean 액션 태그
자바 빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화하는 태그
<jsp:useBean id="식별자" class="자바빈즈 이름" scope="범위" />

- scope 속성 : 자바 빈즈 범위
- page : 해당 jsp 페이지에서만 운영할 것인지.
- request : 사용자의 요청을 처리할 동안에만 할 것인지.
- session : 접속을 종료할 때까지 할 것인지.

 

public class Calculator{
	public int process(int n){
		return n*n*n;
	}
}
<jsp:useBean id="bean" class="java.util.Date" />

 

⑥ setProperty 액션 태그
: 자바 빈즈의 setter() 메서드에 접근하여 자바 빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그
<jsp:property name="식별자" property="프로퍼티 이름" value="값" >

- useBean 액션 태그와 함께 사용된다.
- 전달되는 요청 파라미터의 값을 직접 저장하거나 자바 빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다.
- 혹은 모든 자바빈즈 프로퍼티 이름과 동일하게 요청 파라미터를 설정할 수 있다.
- param 속성과 value 속성을 둘 다 사용할 수 없으므로 하나만 선택해서 사용한다.

 

(ex) 

- 자바빈즈의 프로퍼티 값 출력 >> <% out.println("아이디: "+member.getID()); %>

- setProperty 액션 태그 사용 >> <%jsp:userBean id="member" class="com.dto.MemberBean" scope="page" />


1) 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하는 경우
2) 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하지 않는 경우
3) 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 모두 일치하는 경우
   >> property="*"를 사용하면 모든 요청 파라미터가 자바빈즈의 프로퍼티로 전달된다.

** name에 저장된 값을 가져오기 위해서 사용하는 것이 getProperty() 메서드이다.

댓글