[JSP] 액션 태그

JunHyeok_Yoo·2022년 10월 9일
post-thumbnail

액션태그

XML형식 <jsp: .../> 로 사용 (액션태그는 반드시 /> 로 마무리 해여함)

  • 서버나 클라이언트에게 어떤 행동(액션)을 하도록 명령하는 태그
  • JSP 페이지에서 페이지와 페이지 사이를 제어
  • 다른 페이지의 실행 결과 내용을 현재 페이지에 포함
  • 자바빈즈 기능 제공

forward 액션 태그

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

현재 JSP 페이지에서 다른 페이지로 이동하는 태그

  • 컨테이너는 현재 JSP 페이지에서 forward 액션태그 만날시
    그 전까지 출력 버퍼에 저장되어 있던 내용 모두 삭제 + forward로 설정된 페이지로 프로그램 제어가 이동

  • page : 현재 jsp 페이지에서 이동할 페이지의 외부 파일명

  • 액션 태그는 스크립트 태그를 이용하여 JSP 페이지에 직접 자바코드를 작성하는 것을 피하기 위해 사용 (유지보수를 효율적으로 하게 하기 위해)

forward 액션태그의 페이지 흐름 처리과정

  • 처음에 요청한 URL, first.jsp 파일의 내용은 없고 second.jsp 파일의 내용만 있음 그러나 웹 브라우저의 주소란은 처음에 요청한 first.jsp
  • 현재 페이지에서 선언된 지점 이전 까지의 HTML 코드는 손실(출력버퍼를 지움)
  • 그러나 현재 페이지가 이미 전달 버퍼로 채워진 경우, 전달이 중단될 때까지 해당 내용을 웹 서버에서 응답으로 보냄 (잘못된 페이지가 클라이언트에게 전송될 가능성이 있음)

include 액션 태그

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

include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일을 포함

  • page : 현재 jsp 페이지에서 이동할 페이지의 외부 파일명
  • flush :기본값은 false, 설정한 외부 파일로 제어가 이동할 때 현재 JSP 페이지가 지금까지 출력 버퍼에 저장한 결과를 처리, true로 설정시 외부파일로 제어가 이동시 현재 JSP페이지가 지금까지 출력버퍼에 저장한 내용을 웹 브라우저에 출력하고 비움

flush를 true로 해버린다면 include 액션태그로 인해 제어가 이동시 액션태그를 읽기전 출력버퍼에 들어있던 헤더정보를 웹브라우저에 보내버리고 그렇게되면 제어가 이동한 파일에서 헤더정보를 수정할 수 없게된다.

include 액션태그의 페이지 흐름 처리과정

  • 처음에 요청한 URL, first.jsp 파일의 내용과 second.jsp 파일의 내용이 같이 있음 웹 브라우저의 주소란은 처음에 요청한 first.jsp임
  • JSP 컨테이너가 first.jsp를 실행하다가 include 액션 태그를 만나면, 이 태그의 page 속성값인 second.jsp로 이동 그리고 second.jsp가 실행완료시 first.jsp로 제어를 반환합니다.

include 액션 vs 디렉티브

  • include 디렉티브 태그는 단순하게 다른 페이지의 내용이 텍스트로 포함
  • include 액션 태그는 다른 페이지의 처리 결과 내용 포함
  • 특히 액션 태그는 request 객체 혹은 param 액션 태그로 파라미터 전달
  • 디렉티브 태그는 페이지 내의 변수를 선언한 후 변수에 값을 저장

param 액션 태그

<jsp:forward page ="파일명">
  <jsp:param name="매개변수명1" value="변수 값1"/>
  <jsp:param name="매개변수명2" value="변수 값2"/> ... 
</jsp:forward>

현재 JSP 페이지에서 다른 페이지에 정보(파라미터)를 전달

  • 단독으로 사용되지 못하고 forward나 include 태그 내부에서 사용
<!-- 건네주는 파일-->
<jsp:include page ="받는 파일명">
  <jsp:param name="count" value="3"/>
</jsp:include>

<!-- 받는 파일-->
<p> count is = <%=request.getParameter("count")%>

자바빈즈 액션태그

자바빈즈란 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 법

  • JSP 페이지에서 화면을 표현하기 위한 계산식, 자료 처리를 담당하는 자바코드를 따로 분리 작성
  • JSP 페이지가 HTML같이 쉽고 간단한 코드만으로 구성
  • 프로그램의 효율을 높이기 위해 <화면 출력 부분>, <데이터 처리하는 부분>(자바빈즈) 구분하여 작성
  • 자바빈즈 = 프로퍼티 + 메소드

자바빈즈 작성시 규칙
1. 자바 클래스는 java.io.Serializable 인터페이스를 구현해야함
2. 인수가 없는 기본 생성자가 있어야 함
3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야함
4. 모든 멤버 변수인 프로퍼티는 getter/setter( ) 메소드가 존재해야함

자바빈즈 작성 예시
package ch04.com.dao;

import java.io.Serializable;

public class Person implements java.io.Serializable { //serializable 인터페이스 구현
	private int id = 201811111;
	private String name = "홍길동";
    //멤버변수 private로 정의

	public Person() { //기본 생성자
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
    //멤버변수 getter/ setter 정의
}

useBean 액션태그

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

JSP 페이지에서 자바빈즈를 사용하기 위해 실제 자바 클래스를 선언하고 초기화 하는 태그

  • id 속성과 scope 속성을 바탕으로 자바빈즈 객체를 검색, 객체가 발견되지 않으면 빈 객체

scope 속성값

  • page: 해당 JSP 페이지 내에서만 존재
  • application: 해당 app 살아있는 동안
  • request: 사용자 요청을 처리하는 동안만 존재
  • session: 사용자가 최초 접속하여 접속 종료할 때 까지 존재

setProperty 액션 태그

<jsp:setProperty name="자바빈즈 식별 이름" property = "프로퍼티 이름" value = ""/>
<!--이때 name 속성의 값은 useBean태그의 id 속성값-->
<!-- 즉 setProperty를 사용하려면 useBean액션 태그의 id 속성값이 설정되어있어야함 -->


<jsp:useBean id = "person" class="ch04.com.dao.Person" scope = "request"/>
<!-- ch04.com.dao.Person을 person이라는 식별자로 사용함-->
<jsp:setProperty name = "person" property = "id" value ="admin"/>
<!-- person의 id 프로퍼티를 admin으로 설정-->

useBean 액션 태그와 함계 자바빈즈 setter 메소드에 접근하여 자바빈즈의 프로퍼티의 값을 저장

  • 폼 페이지로부터 전달되는 requset 파라미터의 값을 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있음

  • 모든 자바빈즈 프로퍼티 이름과 동일하게 request 파라미터를 설정할 수 있음

설정한 프로퍼티는

<% out.println("아이디 : " + person.getId()); %>

와 같이 out 내장객체를 사용하여 자바빈즈 getId 메소드로 출력 가능

setProperty시 경우의 수

  1. 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하는 경우
    폼페이지는 id라는 변수에 admin을 담아 보내고
    JSP 페이지는 person 자바빈즈에 id 프로퍼티에 폼페이지에서 받은 admin을 넣음
<!-- form page-->
<form action = "process.jsp" method = "post">
  <input name = "id" value = "admin">
</form>

<!-- proces.jsp page -->
<jsp:useBean name= "person" class = "ch04.com.dao.Person" scope = "page"/>
<jsp:setProerty name = "person" property = "id"/>
  1. 요청 파라미터 이름과 자바빈즈 프로퍼티 이름이 일치하지 않는 경우
    폼페이지는 userId라는 변수에 admin을 담아 보내고
    JSP페이지는 person 자바빈즈에 id 프로퍼티에 userId라는 파라미터로 받은 값을 넣음
<!-- form page-->
<form action = "process.jsp" method = "post">
  <input name = "userId" value = "admin">
</form>

<!-- proces.jsp page -->
<jsp:setProperty name = "person" property = "id" param ="userId"/>
  1. 요청 파라미터 이름과 자바빈즈 프로퍼티 이름이 모두 일치하는 경우
    property속성을 *로 설정시 모든 요청 파라미터가 자바빈즈 프로퍼티에 setter로 전달됨
<!-- form page-->
<form action = "process.jsp" method = "post">
  <input name = "id" value = "admin">
  <input name = "pw" value = "1234">
</form>

<!-- proces.jsp page -->
<jsp:setProperty name = "person" proerty = "*"/>

getProperty 액션태그

<jsp:getProperty id = "person" property = "id" />

프로퍼티의 값을 가져오는 태그

자바빈즈의 멤버변수(프로퍼티)에 저장된 값을 가져온다는 점에서 아래 두 코드는 동일하게 동작한다.

<jsp:getProperty id = "person" property = "name"/>
<% out.println(person.getName()); %>

태그 속성 정리

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

<!-- param -->
<!-- 건네주는 파일-->
<jsp:include page ="받는 파일명">
  <jsp:param name="count" value="3"/>
</jsp:include>

<!-- 받는 파일-->
<p> count is = <%=request.getParameter("count")%>
  
<!-- useBean -->
<jsp:useBean id = "자바빈즈 식별 이름" class = "자바빈즈 이름" scope = "범위" />
  
<!-- setProperty -->
<jsp:useBean id = "person" class="ch04.com.dao.Person" scope = "request"/>
<!-- ch04.com.dao.Person을 person이라는 식별자로 사용함-->
<jsp:setProperty name = "person" property = "id" value ="admin"/>
<!-- person의 id 프로퍼티를 admin으로 설정-->

<!-- setProperty param태그 -->
<!-- form page-->
<form action = "process.jsp" method = "post">
  <input name = "userId" value = "admin">
</form>

<!-- proces.jsp page -->
<jsp:setProperty name = "person" property = "id" param ="userId"/>

<!-- getProperty -->
<jsp:getProperty name = "person" property = "id" />
profile
just do it

0개의 댓글