프로그래밍 언어/jsp

<JSP> 자바파일을 동적으로 JSP파일에 적용하기(자바빈즈, DTO, DAO)

창조적생각 2021. 9. 18. 13:36

용어 풀이

제가 처음 JSP를 배울 때 가르쳐주시는 분께서 DTO, DAO를 클래스 이름으로 사용하셨습니다. 그래서 이게 도대체 뭔가 선생님께서 중국에서 DAO라는 이름을 쓰셔서 지금도 쓰시나 이런 생각도 하고는 했습니다.

알고 보니 약자더군요.

 

1. DTO DAO

 

1) DTO (Data Transfer Object) DTO는 데이터 교환 객체의 약자입니다.

JSP와 자바 등에서의 정보 전송을 위한 클래스입니다.

 

자바빈즈의 DTO를 생성할 때의 규칙이 있습니다.

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

2. 인수가 없는 기본 생성자가 있어야함

3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 함

4. 모든 멤버 변수인 프로퍼티는 getter/setter() 메소드가 존재해야함

여기서 getter는 저장된 값을 불러올 수 있는 메소드이고 setter는 값을 저장하는 메소드입니다.

 

[DTO 예시]

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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package homework;
import java.io.Serializable;
// 1.java.io.Serializable 인터페이스
public class homework implements java.io.Serializable{
//2.기본생성자
public homework() {
        super();
    }

    /**
     * 
    *///3. private 멤버변수
    private static final long serialVersionUID = 1L;
    private String registDay;
    private String subject;
    private String deadStart;
    private String deadEnd;
    private String describe;
    
    private String id;
    private String registdaytime;
   //4.getter setter 메소드
    public String getRegistDay() {
        return registDay;
    }
    public String getSubject() {
            return subject;
        }
    public String getDeadStart() {
        return deadStart;
    }
    public String getDeadEnd() {
        return deadEnd;
    }
    public String getDescribe() {
        return describe;
    }
    public String getId() {
        return id;
    }
    public String getRegistDayTime() {
        return registdaytime;
    }
    
    public void setRegistDay(String registDay) {
        this.registDay=registDay;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public void setDeadStart(String deadStart) {
        this.deadStart= deadStart;
    }
    public void setDeadEnd(String deadEnd) {
        this.deadEnd= deadEnd;
    }
    public void setDescribe(String describe) {
        this.describe=describe;
    }
    public void setId(String id) {
        this.id = id;
    }
    public void setRegistDayTime(String registdaytime) {
        this.registdaytime = registdaytime;
    }
 
}
cs

 

 

2) DAO (Data Access Object) DAO는 데이터 접근 객체의 약자입니다.

 

 

2. 자바빈

1)useBean

1
<jsp:useBean id="homework" class="homework.homework" scope="page" />
cs

 (1) id="homework"

  자바 빈즈를 식별하기 위한 이름입니다. 이 id는 생성자와 같은 역할을 합니다. 즉 homework패키지의 homework 클래스의 생성자의 역할을 한다는 것입니다. 그래서 따로 생성자를 만들지 않고 자바빈즈 아이디를 생성자의 위치에 사용함으로써 DTO에 접근하여 데이터를 교환할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
<jsp:useBean id="homework" class="homework.homework" scope="page" />
 
<%
if(homework.getRegistDay() == null || homework.getSubject() == null || homework.getDeadStart() == null ||
homework.getDeadEnd() == null || homework.getDescribe() == null){ //따로 생성자를 만들지 않고 get메소드를 사용합니다.
%>
<script type="text/javascript">
alert('입력안된 사항이 있습니다.')
history.back()
</script>
cs

이렇게 사용하면 하지만 homework 클래스의 변수들에 값들이 지정되지 않았기에 null이 됩니다. set메서드를 사용하기 위해서는 후술할 setproperty를 사용해줘야합니다. 하지만 먼저 useBean의 구성요소부터 보겠습니다.

 

(2) class="homework.homework"

  패키지 이름을 포함한 자바빈즈 이름입니다. 자바빈즈는 인수가 없는 기존 생성자가 있어야하며 추상 클래스는 사용할 수 없습니다. 즉, 자바빈즈가 변수를 교환할 대상 클래스를 가리킵니다.

 

 (3)scope="page"

  자바빈즈가 저장되는 영역을 설정합니다. page가 기본값이며, request,session, application 중 하나의 값을 사용합니다.

 

 

2)setProperty

1
2
3
4
5
<jsp:setProperty property="subject" name="homework"/>
<jsp:setProperty property="registDay" name="homework"/>
<jsp:setProperty property="deadStart" name="homework"/>
<jsp:setProperty property="deadEnd" name="homework"/>
<jsp:setProperty property="describe" name="homework"/>
cs

  (1) property="subject"

   자바빈즈의 프로퍼티 이름입니다. 요청 파라미터값이 자바빈즈 프로퍼티의 setter 메소드에 전달됩니다.

   즉, property 는 이전에 DTO에서 설정한 변수 subject입니다. setProperty는 DTO에서 설정한 setSubjet()에 값을 

   전달하겠다는 뜻입니다.

   아래에 후술할 value에서 설명하겠지만 앞서 form 태그로 받은 input값의 name이 subject로 동일하다면 자동으로 그         input값을 subject 변수에 넣겠다는 의미입니다.

 

[public_homework.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@ page import="homework.homeworkRepository" %>
<%@ page import="java.io.PrintWriter" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="./resources/css/bootstrap.min.css" />
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form class="form-signin"  action="publish_homework_action.jsp" method="post">
        <div class="form-group row justify-content-center">
            <label class="col-sm-2 fw-bold py-2 text-end">제목</label>
                <div class="col-sm-3 p-1">
                    <input type="text" class="form-control" name="subject">
                </div>
            </div>
</form>
</body>
cs

subject 값을 publish_homework_action.jsp로 보냅니다.

 

[publish_homework_action.jsp]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page import="homework.homeworkRepository" %>
<%@ page import="java.io.PrintWriter" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<% request.setCharacterEncoding("UTF-8"); %>
<jsp:useBean id="homework" class="homework.homework" scope="page" />
<jsp:setProperty property="subject" name="homework"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%=homework.getSubject() %>
</body>
cs

homework.getSubject()로 출력해보면

[실행결과]

이렇게 homework 클래스의 subject변수값이 input name:subject의 파라미터값으로 지정되었음을 알 수 있습니다.

 

  (2) name="homework"

   useBean 태그에 id 속성값으로 설정된 자바빈즈를 식별하기 위한 값입니다. useBean 태그에서는 id로 쓰고 setProperty에서는 name을 쓰는군요. 재미있는 짓입니다.

 

그 외에도 value와 param이라는 속성들이 존재합니다.

value는 모든 것을 무시하고 그냥 변수에 value값을 넣기 위해 존재합니다.

그리고 param은 변수와 파라미터의 이름이 다를 때 즉 위에서 input name이 subject가 아닐때 그 것을 인식시켜주기 위해 새용하는 속성입니다.

728x90