본문 바로가기

JSP/JSP Programming

[JSP] 자바 빈(Bean)을 이용한 JSP 로직 모듈화

반응형

■ 자바 빈 만들기

 -. 자바 빈은 자바 진영의 컴포터는이므로 클래스로 구성된다.

    그러므로 빈의 구성요소 역시 클래스를 구성하는 요소인 필드와 메소드가 된다.

구성요소

의                미

필드

 -. 빈이 가진 속성을 의미한다 멤버변수 형태로 제공된다.

메소드

 -. 빈을 외부에서 조작할 수 있도록 하는 방식들을 제공해 준다. 멤버함수 형태로 제공된다.


# 자바 빈 만들기

예         제

 package hello;      // 패키지 선언

 

 public class HelloBean {      // 클래스 선언


       private int age = 20;      // 필드 선언

       // 정수형태로 나이를 저장할 age는 자바의 캡슐화라는 개념에 입각해서

       // 필드에 접근하지 못하게 하기 위해서 접근(엑세스) 지정자 private로 한다.

 }


① set

 public void setAge(int age) {


       this.age = age;

 }

 -. 프로퍼티에 값을 저장하기 위한 방법으로 제공되는 메소드는 set으로 시작하며 set다음에는 프로퍼티의 이름이 따른다.

 -. setAge는 외부에서 값을얻어와서 필드에 값을 저장해야 하기에 전달인자가 필드와 동일한 자료형태(int)로 선언

 -. 전역(멤버)변수와 이름이 동일한 경우에는 전역(멤버)변수의 앞에 this를 붙여서 전달인자와 구분해 준다.


② get

 public int getAge() {


       return age;

 }

 -. 프로퍼티에 값을 불러오기 위한 방법으로 제공되는 메소드는 get으로 시작하며 get다음에는 프로퍼티의 이름이 따른다.

 -. getAge는 내부에서 저장된 값을 외부에 알려주어야 하기 때문에 전달인자는 없고

    메소드의 리턴형이 필드와 동일한 자료형태(int)로 선언되어 있다.


# 자바 빈(Bean) 만들기

 HelloBean.java

package hello;

public class HelloBean {

    // 빈이 가진 속성의 필드 선언
    private String name = "흔들바람";
    private int age = 20;
   
    // private 으로 선언된 필드 값을 얻어오기 위한 메소드(getter) 정의
    // <jsp.getProperty> 태그를 사용하여 호출한다.

    public String getName() {
       
        return name;
    }
   
    public int getAge() {
       
        return age;
    }

    // private으로 선언된 필드에 새로운 값을 설정하기 위한 메소드(setter) 정의
    // <jsp.setProperty> 태그를 사용하여 호출한다.

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

    public void setAge(int age) {
       
        this.age = age;
    }
}




■ 자바 빈(Bean)관련 액션태그

태그의 종류

 설                        명

 jsp:useBean

 -. 빈(Bean)을 생성하고 사용하기 위한 환경을 정의하는 액션태그이다.

 jsp:setProperty

 -. 액션태그는 빈에 속성 값을 할당한다.

 jsp:getProperty

 -. 액션태그는 빈에서 속성 값을 얻어올 때 사용한다.



01. <jsp:useBean> 액션태그

 -. JSP에서 빈(Bean) 객체(인스턴스)를 생성하기 위해서는 <jsp:useBean> 액션 태그를 사용한다.

 -. 액션태그의 기본 형식

형   식

<jsp:useBean class = "자바 빈 클래스이름" id = "빈 이름" scope = "범위"/>

예   제

<jsp:useBean class = "hello.HelloBean" id = "myBean" scope = "page"/>

                              ①                             ②                     ③


① 클래스(Class)

 -. JSP에서 빈(Bean) 객체(인스턴스)를 생성하기 위해서는 클래스를 지정하여야 한다.

 -. Class 다음에는 자바 빈의 실제 클래스 이름을 기술한다.

 -. 특정 패키지에 존재한느 클래스일 경우에는 패키지 이름과 클래스 이름을 동시에 기술한다.

<jsp:useBean class = "hello.HelloBean" id = "myBean" scope = "page"/>


② 아이디(id)

 -. id 속성에 지정한 이름인 "myBean"으로 메소드를 호출할 수 있다.

 <jsp:useBean class = "hello.HelloBean" id = "myBean" scope = "page"/>

 ...

 이름 : <%= myBean.getName( ) %><br/>

 나이 : <%= myBean.getAge( ) %>



※ java 객체 생성과 자바 <jsp:useBean>의 비교



③ 스코프(scope)

 -. scope 속성은 <jsp:useBean> 태그의 id 속성에 의해 생성된 인스턴스가 사용될 수 있는 기간을 설정한다.

 -. 빈 객체가 언제까지 메모리에 존재하여 사용도리 수 있도록 할지 기간을 결정한다.

 -. scope 속성 값으로는 page | request | session | application 네 가지 중 하나로 지정할 수 있다.

스코프

의                                      미

page

 -. 객체는 생성된 페이지 내에서만 접근되어 사용될 수 있다.

request

 -. 객체가 생성된 요청을 수행하는 페이지들에서 사용될 수 있다.

session

 -. 객체가 생성된 세션에서 요청을 처리한느 페이지들에서 사용된다.

application

 -. 객체가 생성된 응용프로그램에 포함된 페이지들에서 사용된다.

 -. 만일 scope 속성 값을 지정하지 않으면 디폴트 page가 설정된다.


※ 디폴트(default)

 -. 응용 프로그램에서 사용자가 별도의 명령을 내리지 않았을 때, 시스템이 미리 정해진 값이나

    조건을 자동으로 적용시키는 것


# <jsp:useBean> 태그를 사용하는 간단한 예제

 helloBean.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<title>태그를 사용하는 간단한 예제</title>
<%-- 빈 객체(인스턴스)를 생성하기 --%>
<jsp:useBean id = "myBean" class = "hello.HelloBean" scope = "page"/>
<hr/>
<%-- 빈에 저장된 기본값을 바로 출력한다. --%>
◎ 빈 생성 후 저장된 값 출력하기<br/><br/>
이름 : <%= myBean.getName() %><br/>
나이 : <%= myBean.getAge() %>
<hr/>
◎ 값을 변경한 후 값 출력하기<br/><br/>
<%-- 빈에 값을 새롭게 입력훈 후 --%>
<% myBean.setName("사악미소"); %>
<% myBean.setAge(26); %>

<%-- 저장된 값을 출력한다. --%>
이름 : <%= myBean.getName() %><br/>
나이 : <%= myBean.getAge() %>
<hr/>

 출력화면



02. <jsp:getProperty> 액션태그

 -. <jsp:getProperty> 액션태그는 빈 객체의 프로퍼티 값을 되돌려 주는 기능을 제공한다.
 -. 매핑구조



03. <jsp:setProperty> 액션태그

 -. <jsp:getProperty> 액션태그는 빈의 프로퍼티에 값을 설정하는 기능을 제공한다.
 -. 매핑구조



# 회원 정보를 저장하는 빈(Bean) 만들기

 MemberBean.java

package magic;

public class MemberBean {

    private String id;        // 아이디
    private String pw;        // 비밀번호
    private String name;    // 회원이름
    private int mclass;        // 회원구분 코드
    private String phone1;    // 전화번호1
    private String phone2;    // 전화번호2
    private String phone3;    // 전화번호 3
   
    public MemberBean() { }    // 이클립스에서 자동 추가된 기본(디폴트) 생성자

    public String getId() {
       
        return id;
    }

    public void setId(String id) {
       
        this.id = id;
    }

    public String getPw() {
       
        return pw;
    }

    public void setPw(String pw) {
       
        this.pw = pw;
    }

    public String getName() {
       
        return name;
    }

    public void setName(String name) {

        this.name = name;
    }

    public int getMclass() {
       
        return mclass;
    }

    public void setMclass(int mclass) {
       
        this.mclass = mclass;
    }

    public String getPhone1() {
       
        return phone1;
    }

    public void setPhone1(String phone1) {
       
        this.phone1 = phone1;
    }

    public String getPhone2() {
       
        return phone2;
    }

    public void setPhone2(String phone2) {
       
        this.phone2 = phone2;
    }

    public String getPhone3() {
       
        return phone3;
    }

    public void setPhone3(String phone3) {
       
        this.phone3 = phone3;
    }
}

 usingBeanAddForm.jsp

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>폼 양식에 입력한 내용을 자바 빈으로 처리하기</title>
</head>
<body>
<form method = "post" action = "usingBeanAddForm.jsp">
<table>
    <tr>
        <td align = "center">아이디</td>
        <td><input type = "text" name = "id" size = "20"></td>
    </tr>
    <tr>
        <td align = "center">비밀번호</td>
        <td><input type = "password" name = "pw" size = "20"></td>
    </tr>
    <tr>
        <td align = "center">회원이름</td>
        <td><input type = "text" name = "name" size = "20"></td>
    </tr>
    <tr>
        <td align = "center">회원구분</td>
        <td><input type = "radio" name = "mclass" value = "1">일반회원
            <input type = "radio" name = "mclass" value = "2">교수님
        </td>
    </tr>
    <tr>
        <td align = "center">전화번호</td>
        <td>
            <select name = "phone1">
                <option value = "010">010</option>
                <option value = "011">011</option>
                <option value = "016">016</option>
                <option value = "017">017</option>
                <option value = "018">018</option>
                <option value = "019">019</option>
            </select>
            -
            <input type = "text" name = "phone2" size = "4" maxlangth ="4">
            -
            <input type = "text" name = "phone3" size = "4" maxlangth ="4">
        </td>
    </tr>
    <tr colspan = 2>
        <td align = "center">
            <input type = "submit" value = "전송">
            <input type = "reset" value = "취소">
        </td>
    </table>
</form>
</body>
</html>

 출력화면

 usingBeanAddForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
    // 폼 양식에서 전달되는 요청 파라미터 값에 대한 한글처리
    request.setCharacterEncoding("utf-8");   
%>
<%-- MemberBean 클래스로 객체 생성해서 memBean이란 이름으로 지정 --%>
<jsp:useBean class = "magic.MemberBean" id = "memBean"/>

<%-- 폼 양식에서 전달되는 파라미터 값 얻어와서 memBean 객체의 프로퍼티 값으로 저장 --%>
<jsp:setProperty name = "memBean" property = "*"/>
<html>
<body>
<h3>당신이 입력한 정보입니다.</h3>
<hr/>
아이디 : <jsp:getProperty name = "memBean" property = "id"/><br/>
이름 : <jsp:getProperty name = "memBean" property = "name"/><br/>
<%
    if (memBean.getMclass() == 1) {
       
        out.println("일반회원");
    }
   
    else {
       
        out.println("교수님");
    }
%>
<br/>
전화번호 :
<jsp:getProperty name = "memBean" property = "phone1"/> -
<jsp:getProperty name = "memBean" property = "phone2"/> -
<jsp:getProperty name = "memBean" property = "phone3"/>
</body>
</html>

 출력화면


반응형