본문 바로가기

JSP, Servlet, MySQL/JSP - webmarket

액션 태그 : 상품 목록 표시하기 2

728x90
반응형

chapter4-2

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

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

5.1 자바빈즈 개요

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

jsp 와 자바빈즈의 흐름

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

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

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

 💡 java.io.Serializable 인터페이스는 생략 가능하나 자바빈즈 규약에 명시된 내용으로, 자바빈즈에 저장된 프로퍼티를 포함한 채로 파일 시스템에 저장되거나 네트워크로 전송될 수 있도록 객체 직렬화를 제공해야 하므로 implement 해야 한다.

 

[자바빈즈 작성 예]

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

public class MemberBean implements java.io.Serializable{  //1. 
	private int id;
	private String name; //3. 멤버 변수(프로퍼티) 정의
	public MemberBean(){ //2. 기본 생성자
	}
	public int getId(){
		return id;
	}
	public void setId(int id){   //4. Getter/Setter() 메소드
		this.id=id;
	}
	public String getName(){
		return name;
	}
	public void setName(String name){
		this.name = name;
	}
}

 

💡 자바빈즈를 작성할 떄 멤버 변수의 Getter/Setter()메소드를 직접 작성 하여 만들 수 있으나 멤버 변수가 많으면 상당히 번거롭다. 이럴때는 간단히 이클립스에서 [Source]-[Generate Getters and Setters]메뉴를 선택하면 멤버 변수의 Getter/Setter()메소드를 자동으로 추가 할 수 있다.

 

이렇게 작성된 자바빈즈는 jsp 페이지에서 useBean, setProperty, getPtoperty 등의 자바빈즈 액션 태그와 스크립트 태그에 자바 코드와 같이 사용할 수 있다. 또한 폼 페이지의 입력 데이터나 html 페이지에서 넘어오는 데이터를 쉽게 자바빈즈 객체로 저장 할 수 있다.

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

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

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

useBean 액션 태그의 속성

속성 설명

id 자바빈즈를 식별하기 위한 이름이다.
class 패키지 이름을 포함한 자바빈즈 이름이다. 자바빈즈는 인수가 없는 기존 생성자가 있어야 하며 추상 클래스를 사용할수 없다.
scope 자바빈즈가 저장되는 영역을 설정한다. page(기본값), request, session, application 중 하나의 값을 사용한다.

다음은 앞에서 작성한 자바빈즈 MEmverBeam을 jsp 페이지에서 사용하기 위해 useBean 액션 태그로 자바빈즈를 선언하고 초기화 하는 예이다.

 

[useBean 액션 태그 사용 예]

<jsp:useBean id="member" class="com.dto.MemberBean" scope="page" />

위의 예는 다음 자바 코드와 동일하다.

MemberBean member = (MemberBean) request.getAttribute ("member");
if(member == null){
		member = new MemberBean();
		request.setAttribute("member",member);
}

[useBean액션 태그에 Date 클래스를 사용하여 현재 날짜와 시각 출력하기]

<%@ page contentType="text/html; charset=utf-8" %>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="date" class="java.util.Date"/>
	<p><%
			out.print("오늘의 날짜 및 시각");
		%>
		<%=date %>
</body>
</html>
출력결과:
오늘의 날짜 및 시각 Sat Aug 12 02:56:19 KST 2023

[자바빈즈 Calculator 를 생성하고 useBean 액션 태그에 Calculator 클래스를 사용하여 숫자 출력하기]

package ch04.com.dao;

public class Calculator {

			public int process(int n) {  //정수 유형의 매개변수n의 세제곱을 게산하고          
				return n*n*n;              // 이를 반환하는 process()메소드를 작성 
	}

}
<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="bean" class="ch04.com.dao.Calculator" />
	<%
		int m = bean.process(5);
		out.print("5의 3제곱 : " + m);  //  useBean 액션 태그에 id 속성 값을 통해 Calculator클래스의 process()메소드를 호출하여 반환된 결과 값을 out 내장 객체 변수를 통해 출력하도록 스크립틀릿 태그를 작성
	%> 
</body>
</html>
출력결과:
5의 3제곱 : 125

[자바빈즈 Person 을 생성하고 useBean 액션태그에 Person 클래스를 사용하여 아이디와 이름 출력하기]

package ch04.com.dao;

public class Person {
	private int id = 20181004;
	private String name = "허시아";
	
	public Person() {
	
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
}
<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
	<p> 아이디 : <%=person.getId() %>
	<p> 이 름 : <%=person.getName() %>
</body>
</html>
출력결과:
아이디 : 20181004

이 름 : 허시아

[useBean 액션 태그에 위에서 생성한 자바빈즈 Person으로 아이디와 이름 설정하여 출력하기]

<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
	<p> 아이디 : <%=person.getId() %>
	<p> 이 름 : <%=person.getName() %>
	<%
		person.setId(20180306);
		person.setName("허시후");
	
	%>
	<jsp:include page="useBean03.jsp"/>
</body>
</html>
출력결과:
아이디 : 20181004

이 름 : 허시아
아이디 : 20180306

이 름 : 허시후

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

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

setPeroperty태그는 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다. 또는 모든 자바빈즈 프로퍼티 이름과 동일하게 요청파라미터를 설정할수 있다.

속성 설명

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

다음은 앞에서 작성한 자바빈즈 MemberBean의 멤버 변수인 프로퍼티 id에 admin 값을 저장하기 위한 setProperty 액션 태그의 예이다.

프로퍼티 id에 저장된 값을 출력하려면 name 속성 값 member를 통해 getId()메소드를 호출 하면 된다.

[setProperty 액션 태그 사용 예]

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

[자바빈즈의 프로퍼티 값 출력 예]

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

앞의 예에서 name 속성 값은 자바빈즈를 식별하기 위해 사용한 useBean 액션 태그의 id 속성 값이다. 그러므로 setPerperty 액션 태그를 사용하려면 다음과 같이 useBean 액션 태그에 id 속성 값이 설정되어 있어야 한다.

<jsp:useBean id="member" class="com.dto.MemberBean" scope="page" />

폼 페이지의 입력 데이터나 HTML 페이지로부터 전달되는 데이터를 자바빈즈에 쉽게 저장할 수 있는 다양한 setProperty 액션 태그의 예를 살펴보자.

  • 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치하는 경우: 다음은 폼 페이지에서 요청 파라미터 이름이 자바빈즈의 프로퍼티 이름과 동일하여 id로 값이 전달되는 예이다.
//폼 페이지
<form action="memberProcess.jsp" method="post">
	<input name="id" value="admin" />
</form>
//jsp페이지
<jsp:setProperty name="member" property="id" />
  • 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 일치ㅎ지 않는 경우 : 다음은 폼 페이지에서 요청 파라미터 이름이 자바빈즈의 프로퍼티 이름과 동일하지 않아 id 가 아닌 userId로 값이 전달되는 예이다.
//폼페이지
<form action="memberProcess.jsp" method="post">
	<input name="userId" value="admin" />
</form>
//jsp페이지
<jsp:setProperty name="member" property="id" param="userId" />
  • 요청 파라미터 이름과 자바빈즈의 프로퍼티 이름이 모두 일치하는 경우: 다음은 폼 페이지에서 모든 요청 파라미터 이름이 자바빈즈의 모든 프로퍼티 이름과 동일하게 값이 전달되는 예 이다
//폼 페이지
<form action="memberProcess.jsp" method="post">
	<input name="id" value="admin" />
	<input name="name" value="관리자" />
</form>
//jsp페이지
<jsp:setProperty name="member" property="*" />

[setProperty 액션태그에 자바빈즈 Person 으로 아이디와 이름을 설정하여 출력하기]

<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
		//자바빈즈로 Person 클래스를 사용하도록 useBean 액션 태그를 작성한다.

	<jsp:setProperty property="id" name="person" value="20180306"/>
	<jsp:setProperty property="name" name="person" value="허시후" />
		//useBean 액션 태그의 id 속성 값을 통해 자바빈즈 Person 의 프로퍼티 id와 name 에 값을 저장하도록 setProperty 액션 태그를 작성한다.

	<p> 아이디 : <% out.println(person.getId()); %>
	<p> 이 름 : <% out.println(person.getName()); %>
		//useBean 액션 태그의 id 속성값을 통해 Person 클래스의 getId(),getName()메소드를 호출하여 반환된 값을 out 내장 객체 변수를 이용하여 출려하도록 스크립틀릿 태그를 작성한다. 

</body>
</html>
출력결과:
아이디 : 20180306

이 름 : 허시후

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

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

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

getProperty 액션 태그의 속성

속성 설명

name useBean 태그에 id 속성 값으로 설정된 자바빈즈를 식별하기 위한 이름이다
property 자바빈즈의 프로퍼티 이름이다. 만약 프로퍼티 이름에 ‘*’를 사용하면 모든 요청 파라미터가 자바빈즈 프로퍼티의 Getter()메소드에 전달됨을 의미한다

다음은 앞에서 작성한 자바빈즈 MemberBean 의 멤버 변수인 프로퍼티 name 에 저장된 값을 가져오기 위한 getProperty 액션 태그의 예이다. 프로퍼티 name 에 저장된 값을 출력하려면 name 속성 값 member 을 통해 getName()메소드를 호출하면 된다.

[getProperty 액션 태그 사용 예]

<jsp:getProperty name="member" property="name" />

[자바빈즈의 프로퍼티 값 출력 예]

<%out.println(member.getName()); %>

[getProperty 액션 태그에 자바빈즈 Person 을 이용하여 아이디와 이름을 가져와 출력하기]

<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
	
	<p> 아이디 : <jsp:getProperty name="person" property="id" />
	<p> 이 름 : <jsp:getProperty property="name" name="person"/>
		//useBean 액션 태그의 id 속성값을 통해 자바빈즈 Person의 프로퍼티 id 와 name 에 값을 가져와 출력하도록 getProperty 액션 태그를 작성

</body>
</html>
출력결과:
아이디 : 20181004

이 름 : 허시아

[getProperty 액션 태그에 자바빈즈 Person 을 이용하여 아이디와 전달받아 출력하기]

<%@ page contentType="text/html; charset=utf-8"%>

<html>
<head>
<title>Action Tag</title>
</head>
<body>
	<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
	<jsp:setProperty property="id" name="person" value="20180306"/>
	<jsp:setProperty property="name" name="person" value="허시후"/>
		//useBean 액션 태그의 id 속성 값을 통해 자바빈즈 Person의 프로퍼티 id 와 name 에 값을 저장하도록 setProperty 액션 태그를 작성한다
	
	<p> 아이디 : <jsp:getProperty name="person" property="id" />
	<p> 이 름 : <jsp:getProperty property="name" name="person"/>
//useBean 액션 태그의 id 속성 값을 통해 자바빈즈 Person 의 프로퍼티 id 와 name 에 값을 가져와 출력하도록 getProperty 액션 태그를 작성한다
</body>
</html>
출력결과:
아이디 : 20180306

이 름 : 허시후
728x90
반응형