[JSP] JavaBean
- -
JavaBean 자바 빈이란 무엇인가?
자바 빈은 자바 빈 규약 또는 자바 빈 관례에 따라 만들어진 클래스입니다. 원래 자바빈은자바 빈은 비주얼 툴에서 조작하는 컴포넌트를 의미했습니다. 그러나 비주얼 툴이 쇠퇴하고 자바의 플랫폼이 웹 기반 엔터프라이즈가 많이 사용되기 시작하며 Java EE의 JSP 빈, Enterprise JavaBean과 같이 오픈 소스 기술을 통해 발전되어왔습니다. 이제, 자바 빈은 원래 네 가지 규약 중 두 가지를 따라 만들어진 클래스를 의미합니다. 아래 네 규약 모두 원래의 자바 빈이 따랐던 것이고, 그중 아래 두 가지가 요즘 자바 빈이라고 불리는 것의 규약입니다.
- 자바 빈 클래스는 'default' 패키지가 아닌 '특정' 패키지에 속해야 한다
- 기본 constructor가 선언이 되어야 한다
- 멤버 변수는 Property라고 부르며, 접근자는 private으로 선언되어야 한다
- getter와 setter가 있어야 하며 이는 public으로 선언되어야 한다
자바 빈은 왜 사용될까?
JSP 작업은 보통 프로그래머와 디자이너가 함께 작업을 합니다. 프로그래머는 로직 단의 처리를 하고 디자이너는 UI 요소를 구현합니다. 이렇게 공동으로 작업을 하면, 디자이너는 프로그래머가 작성한 자바 코드를 마주칠 때도 있습니다. JSP 파일 내에 스크립트(declaration, scriptlet, expression)를 이용하여 자바 코드를 넣을 수 있는데, 디자이너가 볼 때는 혼란을 줄 수 있습니다. 이 부분을 고려하여 자바 코드를 최대한 줄이기 위해 JavaBean을 사용합니다.
JavaBean은 다음과 같이 사용이 가능합니다.
- <jsp:useBean id="fruit1" class="test.fruit" scope="page" />
- jsp에서 JavaBean을 통해 새로운 객체 즉, JavaBean을 생성할 때는 생성자 역할인 jsp:useBean 태그를 사용해야 합니다.
- id는 객체의 이름이라고 생각하면 됩니다.
- class에는 package명. class명으로 적어줍니다.
- scope는 page, request, session, application 네 가지가 있습니다. 보통 한 페이지 내에서만 사용하기 위해, page를 사용합니다. 이는 나중에 더 자세히 다룰 것입니다.
- <jsp:setProperty name="fruit1" property="name" value="Apple" />
- 생성된 객체의 변수에 값을 넣기 위해 사용됩니다. setter 역할이죠.
- name은 useBean에서 지정한 id를 적습니다.
- property는 객체의 변수를 의미합니다. java의 멤버 변수 이름을 적습니다.
- value는 넣을 값을 적습니다.
- <jsp:getProperty name="fruit1" property="name" />
- 객체의 값을 각져옵니다. getter 역할입니다. getProperty를 사용하면 페이지에 바로 값을 출력합니다.
- name은 useBean에서 지정한 id를 적습니다.
- property는 가져올 값의 property(자바의 멤버변수)를 적습니다.
코드의 마지막 부분에 다시 fruit1의 JavaBean을 setProperty 이용하여 값을 'Canada'로 지정하였습니다. 여기서 볼 수 있듯이, JavaBean의 장점은 재사용이 가능하다는 것입니다. 자원의 낭비를 막을 수 있는 것이죠. 이것이 자바빈을 사용하는 두 번째 이유입니다. 이외에도 forward, include, plug-in 등이 있습니다.
📑<jsp:setProperty>와 <jsp:getProperty> 액션태그
package com.dololak;
//default 패키지가 아닌 com.dololak.servlet 패키지에 속함
public class User {
//멤버 변수의 접근 제어자는 private
private String name;
private Long age;
private String address;
//기본 생성자가 존재함
public User() {}
/*
* 멤버 변수에 대한 getter setter가 존재하며,
* get 또는 set 이후에 첫글자는 멤버변수명의 대문자로
* 그 이후는 소문자로 함
*/
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Long getAge() { return age; }
public void setAge(Long age) { this.age = age; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
}
📌<jsp:setProperty> 액션태그
<jsp:setProperty name="myUser" property="name" value="kim dololak" /> --> myUser.setName("kim dololak") 메서드를 호출
-
name 속성 - <jsp:useBean>에서 자바빈 객체를 생성할때 사용했던 id 값을 사용합니다.
-
property 속성 - 속성하려는 멤버변수명을 입력합니다. 내부적으로 set + 첫글자를 대문자로 바꾼 setter 메서드를 실행합니다. 즉 위 예시와 같이 name을 지정한 경우 setName() 메서드가 호출됩니다. property 속성에 *(asterisk) 를 사용하게 되면 요청 파라미터를 검사하여 속성명이 동일한 멤버변수를 찾아 값을 할당합니다.
-
value 속성 - 멤버변수에 설정할 값을 지정합니다. 값을 설정할때에는 표현식(<%= %>) 나 EL(${}) 를 사용할 수도 있습니다. 만약 value 값을 "" 와 같이 공백으로 두는경우 해당 멤버변수 타입의 기본값이 할당됩니다.(예 Long은 0L)
-
param 속성 - 위 예시에는 나와있지 않지만 HTTP 요청 파라미터(쿼리 스트링)를 자바빈 객체에 설정할 때 사용합니다. 브라우저에서 호출한 요청파라미터 속성을 지정해주면 해당 속성의 값이 빈 객체의 값으로 할당됩니다.
<jsp:getProperty name="myUser" property="name" /> --> myUser.getName() 메서드를 호출
-
name 속성 - <jsp:useBean>에서 자바빈 객체를 생성할때 사용했던 id 값을 사용합니다.
-
property 속성 - 속성하려는 멤버변수명을 입력합니다. 내부적으로 get + 첫글자를 대문자로 바꾼 getter 메서드를 실행합니다. 즉 위 예시와 같이 name을 지정한 경우 getName() 메서드가 호출됩니다.
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head>
</head>
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name" value="kim dololak"/>
<jsp:setProperty name="myUser" property="age" value="28"/>
<jsp:setProperty name="myUser" property="address" value="seoul"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body>
</html>
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name"/>
<jsp:setProperty name="myUser" property="age"/>
<jsp:setProperty name="myUser" property="address"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body>
<%
User user = new User();
user.setName(request.getParameter("name"));
user.setAge(Long.valueOf(request.getParameter("age")));
user.setAddress(request.getParameter("address"));
%>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="name" param="paramNm"/>
<jsp:setProperty name="myUser" property="age" param="paramAge"/>
<jsp:setProperty name="myUser" property="address" param="paramAddr"/>
<%
User user = new User();
user.setName(request.getParameter("paramNm"));
user.setAge(Long.valueOf(request.getParameter("paramAddr")));
user.setAddress(request.getParameter("paramAddr"));
%>
<jsp:setProperty name="myUser" property="*" />
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head>
</head>
<body>
<jsp:useBean id="myUser" class="com.dololak.servlet.User" scope="request"/>
<jsp:setProperty name="myUser" property="*"/>
이름 : <jsp:getProperty name="myUser" property="name"/><br>
나이 : <jsp:getProperty name="myUser" property="age"/><br>
주소 : <jsp:getProperty name="myUser" property="address"/><br>
</body>
</html>
💯멤버변수,DB 테이블의 컬럼이름 JSP의 parameter이름이 다 같아야 자동매칭이 가능한다.
출처: https://dololak.tistory.com/531 [코끼리를 냉장고에 넣는 방법:티스토리]
'개인공부 > JSP' 카테고리의 다른 글
[JSP] PreparedStatement 와 Statement 차이점 (0) | 2022.10.07 |
---|---|
[JSP] 커넥션 풀 (0) | 2022.10.07 |
java, jstl, html, javascript 빌드 순서 (1) | 2022.09.21 |
에러페이지 예외처리 (0) | 2022.09.18 |
jsp scope객체 (0) | 2022.09.16 |
소중한 공감 감사합니다