ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JSP | JavaBean 자바빈
    JAVA/JSP 2020. 2. 20. 17:07

    JavaBean 자바빈

    웹상에서 불러다 사용하는 자바 클래스(DTO)
    DTO: Data Transfer Object


    JavaBean 개요

    • 자바빈은 자바로 작성된 컴포넌트들을 일반적으로 일컫는 말
    • 자바는 프로그램 기본 단위가 클래스이며
      자바빈은 클래스들이 복합적으로 이루어진 구조
    • 자바빈은 자바 언어의 프로그램 작성 규칙과 문법을 따름

    JavaBean 등장 배경

    • JSP 페이지에는 디자인과 로직 코드가 같이 기술되기 때문에 한눈에 파악하기 어려움
    • 디자인과 로직이 공존하는 코드는 재사용하기가 어려움
    • 따라서 디자인과 로직 코드가 복잡하게 구성되는 것을 가능한 피하고
      JSP 페이지의 로직 부분을 분리해서 코드를 재사용하고
      프로그램의 효율을 높이기 위해 자바빈 사용

    JavaBean 작성

    Java의 클래스를 만드는 것과 같은 규칙을 가짐

    • 이클립스에서 자바빈을 생성할 때는 src폴더에 Class 파일 생성
      ↔ 서블릿은 Servlet 파일
    • main 메소드를 작성하지 않음
    • 패키지 이름으로 기능별로 자바빈 파일 분류
    • 파일 이름은 일반적으로 ~DTO.java로 작성
    • JSP 페이지에서 객체를 생성하는 가장 보편적인 방법

    JavaBean 전체 구조

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    package packageName; // 생략 가능
    import packageName.className;    // 생략 가능
     
    // 필수 정의, 생략 불가
    class className {
        // property
        private 자료형 변수명;
     
        // Setter Method
        public void setXXX(Parameter param){
            // Java code
        }
     
        // Getter Method
        public 자료형 getXXX(){
            return 변수명;
        }
     
    }
    http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
     

    JavaBean Class 구조

    접근 제어자 [키워드] class 클래스명{}
    • Access Modifier(접근 제어자): public, private, default(아무것도 없는 경우)가 올 수 있는데
      웹에서는 불특정 다수의 접근을 허용해야 하기 때문에 주로 public 사용
    • Keyword(키워드): final, abstract, static 등이 있지만 자바빈 클래스에서는 사용 하지 않음
    • Class name(클래스명): 첫 글자는 대문자로 나머지는 소문자로 작성
      단어가 이어지는 경우에는 이어지는 단어의 첫 글자를 대문자로 작성

    Property

    데이터를 저장하기 위한 멤버 변수

    • 자바빈의 프로퍼티(property)는 값을 저장하기 위한 멤버 필드로
      캡슐화를 위해 private 접근 제어자를 사용함
    • 프로퍼티는 자바의 멤버 변수와 동일한 역할이며
      JSP 페이지의 내용을 DB에 저장하거나
      DB에 저장된 내용을 JSP페이지에 표시할 때 중간 데이터 저장소로 사용
    • 프로퍼티에 private 접근 제어자가 부여되기 때문에
      외부에서 프로퍼티에 접근하기 위해서는 Setter/Getter 메소드가 필요

    Setter/Getter Method

    Setter

    프로퍼티의 값을 설정하는 메소드

    • 외부에서 접근이 가능해야 하기 때문에 public 접근 제어자 사용
    • 반환값이 없기 때문에 메소드명 앞에 void를 작성
    • 프로퍼티에 저장하기 위한 값을 매개변수로 전달 받음
    • 메소드의 이름은 setXxx로 지정, Xxx는 프로퍼티의 이름

    Getter

    프로퍼티의 값을 반환하는 메소드

    • Setter와 마찬가지로 public 접근 제어자 사용
    • 반환값에 맞는 자료형을 메소드명 앞에 작성
    • 메소드의 이름은 getXxx로 지정

    예제

    ① form.jsp에 데이터를 입력하면 bean2.jsp에서 변수에 저장
    ② 이름과 주소 데이터를 저장하고 반환하는 src/BeanDTO.java 자바빈 작성
    ③ bean2.jsp에서 test.BeanDTO import 후 BeanDTO 객체를 생성해서
    이름과 주소를 객체에 저장하고 반환하도록 함
    ④ BeanDTO 자바빈 클래스를 사용하면 이름과 주소를 처리하는 모든 페이지에서
    동일한 프로퍼티와 Setter, Getter 메소드를 사용할 수 있게 됨


    form.jsp

    데이터를 입력받는 페이지
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <!-- 사용자로부터 데이터를 입력받는 form -->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>JavaBean 입력 폼</title>
    </head>
    <body>
     
    <!-- name값은 빈즈 클래스의 프로퍼티 이름과 동일해야 함 -->
    <form action="bean2.jsp" method="post">
        이름: <input type="text" name="name" /> <br />
        주소: <input type="text" name="addr" /> <br />
        <input type="submit" value="전송" />
    </form>
     
    </body>
    </html>
    http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter
     

    bean2.jsp

    BeanDTO 자바빈 클래스의 객체를 생성하고 Setter, Getter 메소드를 호출하는 JSP 페이지
     
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    <!-- page 디렉티브에서 BeanDTO 클래스 import, 패키지명.클래스명-->
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="test.BeanDTO"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    <%
        // 한글 처리
        request.setCharacterEncoding("utf-8");
     
        String name = request.getParameter("name");
        String addr = request.getParameter("addr");
        System.out.println("name: " + name + ", addr: " + addr);
     
        // JavaBean 객체 생성
        BeanDTO bd = new BeanDTO();
     
        // 프로퍼티 개수만큼 Setter 메소드 호출
        bd.setName(name);
        bd.setAddr(addr);
     
        // 필요에 따라 Getter 메소드 호출
        out.println("이름: " + bd.getName() + "<br/>");
        out.println("주소: " + bd.getAddr());
    %>
    </head>
    <body>
        <!-- 표현식으로도 호출 가능 -->
        <h2>
            이름: <%=bd.getName()%>
        </h2>
        <h2>
            주소: <%=bd.getAddr()%>
        </h2>
    </body>
    </html>
    http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

    src/BeanDTO.java

    자바빈 클래스인 BeanDTO를 작성한 .java 파일
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    // 패키지명
    package test;
     
    // 클래스는 반드시 public 접근 제어자 사용
    public class BeanDTO {
     
        // property, 반드시 private 선언
        private String name;
        private String addr;
     
        // Setter, public 지정
        public void setName(String name) {
            this.name = name;
        }
     
        public void setAddr(String addr) {
            this.addr = addr;
        }
     
        // Getter, public 지정
        public String getName() {
            return name;
        }
     
        public String getAddr() {
            return addr;
        }
    }
    http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

    결과


    JSP 페이지로부터 로직 코드를 분리하여 작성하도록 하는 자바빈에 대해 살펴보았습니다.

    자바빈은 기본적으로 자바파일이며 자바 클래스 작성 규칙을 따릅니다.

    자바빈 클래스를 따로 작성하면 동일한 프로퍼티와 Setter, Getter 메소드를 필요로 하는

    모든 JSP페이지에서 해당 클래스의 객체를 생성하고 메소드를 호출할 수 있게됩니다.

    즉, 재사용 가능한 코드를 작성함으로써 효율적인 작업이 가능하도록 하고
    아주 많은 페이지가 있다고 상정하면 코드의 양을 획기적으로 줄일 수 있게 되는 것입니다.

    'JAVA > JSP' 카테고리의 다른 글

    JSP | Cookie  (0) 2020.02.22
    JSP | JavaBean Action Tag 자바빈 연동 액션 태그  (0) 2020.02.20
    JSP | Template Page  (0) 2020.02.20
    JSP | forward 액션 태그  (1) 2020.02.19
    JSP | include 액션 태그  (0) 2020.02.19

    댓글

Designed by Tistory.