[JSP] 13. 표준 액션 태그 (java Bean & java Property)

표준 액션 태그 : 

※ <jsp:useBean , jsp:setProperty, jsp:forward, jsp:include, jsp:param>
※ 앞으로는 DAO와 VO를 페이지를 나누어서 만들도록 하자! 자세한 내용은 JSP 총정리에서 다루겠습니다.
 
우선, 자바빈 태그입니다. 이를 통해서 객체를 만들 수 있어요

<jsp:usbBean>태그

<jsp:useBean id="name" scope="page|request|session|application" class="className" type="typeName" beanName="beanName" />

 

- 속성 설명

  id : JSP 페이지에서 사용할 자바빈의 이름이다.

  class : 자바빈의 패키지명을 포함한 실제 클래스명이다.

  scope : 자바빈의 유효 범위, 디폴트는 page이다.

  type : 자바빈의 타입 기술임.

  beanName : class 속성을 지정하지 않을 경우 자바빈의 이름 기술이다.

 

두번째로는, SetProperty입니다 (= Setter 메서드)

<jsp:setProperty> 태그

<jsp:setProperty name="beanName" property="propertyName" |  property="propertyName" param="parameterName" | property="propertyName" value="propertyValue" />

 

 - 속성설명

  name : <jsp:useBean>의 id속성에 정의된 빈의 이름이다.

  property : 빈의 속성 이름이다.

  param : request parameter의 이름이다.

  value : property에 할당할 값이다.

 

세번째로는, getProperty입니다 (= getter 메서드)

<jsp:getProperty> 태그

<jsp:getProperty name="beanName" property="propertyNmae" />

 

 - 속성설명

  name : <jsp:useBean>의 id속성에 정의된 빈의 이름이다.

  property : 값을 가져 올 빈의 속성 이름이다.

 


(1) beans0.html : 코드, 이름, 가격, 입고량 html만들어서 beans1.jsp로 전송하도록 한다.

 

 jsp로 넘길때는 method가 get이든 post든 상관없다.

(단 한글이 깨질 수 있기때문에 전송값의 인코딩 request.setCharacterEncoding('utf-8');)

 

 

 

 

1
2
3
4
5
6
7
8
9
10
11
12
<body>
<h1> 제품 정보 등록</h1>
<form action="beans1.jsp">  
코드: <input type=text name=code><br>
이름: <input type=text name=name><br>
가격: <input type=text name=price><br>
입고량: <input type=text name=balance><br>
<input type=submit value=등록>
</form>
</body>
 
 
 

 

 

 

 

beans1.jsp : test용도로 <%%>안에서 VO객체만들고 임의의 값 입력해서  <%= %>로 출력해보는 코드이다.

 

- 표준액션태그를 이용해서 id객체를 만든다. class 패키지.클래스를 만들고 

- property안에 setter & getter 값을 넣는다. 그리고 beans2에 전송한다.

 

- html input name속성값 = parameter이름 (이때, bean클래스의 변수명과 같아지게되면 param을 생략해도된다.)

    

- 따라서, html의 name != setter의 property가 같지않다면해당 값은 null이 나오기때문에 param="html의 name값"으로 작성해야한다. (단, property="*"와 같이 작성하면 모든 setter메서드명이게 된다. 편리성과 간결성) 

    

- 객체생성을 위해서는 기본생성자가 무조건 있어야한다. 만약에 기본생성자가 없다면, 객체를 절대로 만들 수 없습니다. 

    

- 추가적으로, 

scope ="page" : 현재페이지만  적용한다. (default), 

scope ="request"request.setAttribute("",)와 같이 공유할 수 있는 기능이 생긴다.

   

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="vo3" class="product.ProductVO" scope="application"/>
추가적으로 <jsp:param > ------- foward나 include에 끼워넣는 태그는 아래의 내용을 대체할 수 있다. 
RequestDispatcher dispatcher = request.getRequestDispatcher("/day3/user3/user3.jsp"); 
request.setAttribute("user3", user3);
dispatcher.forward(request, response);  
--> 
<jsp:getProperty property="code" name="vo3"/><br>
<jsp:getProperty property="name" name="vo3"/><br>
<jsp:getProperty property="price" name="vo3"/><br>
<jsp:getProperty property="balance" name="vo3"/><br>
</body>
</html>
 
 
cs

 

beans2.jsp  : 클래스를 만들면서 전송받은 값을 받아와서 getter값을 통해 출력한다. 

 또한 application메서드를 사용합니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="vo3" class="product.ProductVOscope="application"/> 
 
<jsp:getProperty property="code" name="vo3"/><br>
<jsp:getProperty property="name" name="vo3"/><br>
<jsp:getProperty property="price" name="vo3"/><br>
<jsp:getProperty property="balance" name="vo3"/><br>
</body>
</html>
 
 
 

 

beans3.jsp  :  beans2에서 request를 했다면, beans3에서는 application을 해보는 test를 한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:useBean id="vo3" class="product.ProductVO" scope="application"/>
 
<jsp:getProperty property="code" name="vo3"/><br>
<jsp:getProperty property="name" name="vo3"/><br>
<jsp:getProperty property="price" name="vo3"/><br>
<jsp:getProperty property="balance" name="vo3"/><br>
</body>
</html>
 
 
 


 

ProductVO.java : int code, String name, int price, int balance

기본적인 Data를 저장하는 페이지입니다.

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
package product;
 
public class ProductVO {
    private int code;
    private String name;
    private int price;
    private int balance;
 
    public ProductVO() {
    }
    
    public ProductVO(int code, String name, int price, int balance) {
        this.code = code;
        this.name = name;
        this.price = price;
        this.balance = balance;
    }
    
    public int getCode() {
        return code;
    }
    public void setCode(int code) {
        this.code = code;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
    public int getBalance() {
        return balance;
    }
    public void setBalance(int balance) {
        this.balance = balance;
    }   
}