-> 블로그 이전

[JSP] 자바빈(JavaBeans) & <jsp:useBean> 액션 태그

2022. 3. 19. 21:36Language`/JSP (Java Server Page)

자바빈(JavaBeans)

- 객체를 JSP페이지에서 사용하기 위해서 사용

- 자바빈을 사용하면 JSP에서 객체를 사용해서 데이터를 저장하고 불러올 수 있다

- 규격을 갖추지 않고 사용하면 에러가 발생

  1. java.io.Serializable 인터페이스를 구현해야 한다
  2. 인수가 없는 기본 생성자가 있어야 한다
  3. 반드시 패키지화
  4. 멤버변수를 "Property"라고 부른다
  5. 프로퍼티의 접근 지정자는 반드시 private
  6. 프로퍼티마다 getter/setter가 존재해야 한다
  7. 읽기 전용의 경우 getter만 있어야 한다
  8. getter 메소드에는 파라미터가 존재하면 안된다
  9. setter 메소드에는 파라미터가 1개 이상 존재해야 한다
  10. 프로퍼티를 제외한 기본 생성자 & 메소드들은 "public"으로 작성해야 한다

- java.io.Serializable 인터페이스는 생략 가능하나 "자바빈즈 규약"에 명시된 내용을 보면 '자바빈즈에 저장된 프로퍼티를 포함한 채로 파일 시스템에 저장되거나 네트워크로 전송될 수 있도록 객체 직렬화를 제공해야 한다'라고 나와있기 때문에 java.io.Serializable을 implement해야 한다

package chap08.member;

public class MemberInfo implements java.io.Serializable{
    private String id;
    private String password;
    private String name;
    private String address;
    private Date registerDate;
    private String email;
    
    public MemberInfo(){
        
    }

    public String getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getRegisterDate() {
        return registerDate;
    }

    public void setRegisterDate(String registerDate) {
        this.registerDate = registerDate;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

 

<jsp:useBean> 액션 태그

- 자바빈 객체를 생성하는 액션 태그

<jsp:useBean id="[빈 이름]" class="[자바빈 클래스 이름]" scope="[범위]" />
  • id : JSP 페이지에서 자비빈 객체에 접근할 때 사용할 이름 지정 (레퍼런스?)
  • class : 패캐지 이름을 포함한 자바빈 클래스의 완전 이름 입력
  • scope : 자비빈 객체를 저장할 영역 지정 >> 해당 영역에서는 객체가 공유 가능하다
    • page / request / session / application 중 하나
    • default는 page이다

- 이미 해당 scope에 해당 객체가 존재하면 이미 존재하는 객체를 사용한다

- 영역별로 공유할 데이터를 쉽게 저장할 수 있다

 

 

Example)

## makeObject.jsp ##

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:useBean id="info" class="chap08.member.MemberInfo" scope="request"/>
<%
    info.setId("gildong");
    info.setPassword("1234");
    info.setName("홍길동");
    info.setAddress("서울");
    info.setRegisterDate(new Date());
    info.setEmail("gildong@gmail.com");
%>
<jsp:forward page="useObject.jsp"/>
</body>
</html>

>> scope이 "request"니까 "request" 영역 내에 모든 JSP 페이지는 "memberinfo" 객체를 공유한다

 

## useObject.jsp ##

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<jsp:useBean id="info" class="chap08.member.MemberInfo" scope="request"/>
<%
    out.print("아이디 : " + info.getId() + "<br>");
    out.print("비밀번호 : " + info.getPassword() + "<br>");
    out.print("이름 : " + info.getName() + "<br>");
    out.print("주소 : " + info.getAddress() + "<br>");
    out.print("등록 날짜 : " + info.getRegisterDate() + "<br>");
    out.print("이메일 : " + info.getEmail() + "<br>");
%>
</body>
</html>

 

<jsp:setProperty> & <jsp:getProperty>

<jsp:setProperty name="자비빈이름" property="이름" value="값" />
<jsp:getProperty name="자바빈이름" property="이름" />

- name은 <jsp:useBean>에서 지정한 "id"를 기입하면 된다

- <jsp:setProperty>에서 value대신 param을 사용할 수도 있다

  • param을 사용하면 "다른 Property의 값"을 property에 지정한 프로퍼티의 값에 저장한다는 것이다
<jsp:setProperty name="info" property="id" param="memberId" />

<jsp:setProperty name="info" property="id" value="abcde" />

 

<jsp:useBean id="member" class="chap08.member.memberInfo" />
<jsp:setProperty name="member" property="*" />

여기서 property="*"의 의미는 각 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값으로 설정한다는 의미이다

>> name & email 요청 파라미터가 있다고 가정하면, 위 코드는 name 파라미터의 값을 name 프로퍼티의 값으로, email 파리미터의 값은 email 프로퍼티의 값으로 설정한다는 뜻이다

  • 어떤 form을 통해서 user가 회원가입을 하면 해당 form의 각 name별로 각 프로퍼티 값으로 설정?

 

 

Example) 회원가입 양식 폼

package chap08.member;

public class MemberInfo implements java.io.Serializable{
    private String id;
    private String password;
    private String name;
    private String address;
    private String registerDate;
    private String email;
    
    public MemberInfo(){
        
    }

    public String getId() {
        return id;
    }

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

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getName() {
        return name;
    }

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

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getRegisterDate() {
        return registerDate;
    }

    public void setRegisterDate(String registerDate) {
        this.registerDate = registerDate;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

## sign_up.jsp ##

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="/chap08/SignUp/process_signUp.jsp" method="post">
    <fieldset>
        <legend>회원 가입</legend>
        아이디 : <input type="text" name="id"/><br><br>
        비밀번호 : <input type="password" name="password"/><br><br>
        이름 : <input type="text" name="name"/><br><br>
        주소 : <input type="text" name="address"/><br><br>
        이메일 : <input type="email" name="email"/><br><br>
        <input type="submit" value="회원 가입"/>
    </fieldset>
</form>
</body>
</html>

 

 

## process_signUp.jsp ##

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%
    request.setCharacterEncoding("UTF-8");
    SimpleDateFormat sdt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String d = sdt.format(new Date());
%>
<jsp:useBean id="member" class="chap08.member.MemberInfo" />
<jsp:setProperty name="member" property="*" />
<jsp:setProperty name="member" property="registerDate" value="<%=d%>"/>
<html>
<head>
    <title>Title</title>
</head>
<body>
## 회원 가입 완료 & 가입 정보 ##<br><br>
아이디 : <%=member.getId()%> <br><br>
비밀번호 : <%=member.getPassword()%><br><br>
이름 : <%=member.getName()%><br><br>
주소 : <%=member.getAddress()%><br><br>
이메일 : <%=member.getEmail()%><br><br>
가입 시간 : <%=member.getRegisterDate()%>
</body>
</html>

property="*"를 통해서 form의 각 name(id, password, name, address, email)의 value를 memberInfo 객체의 각 프로퍼티에 설정을 해주었다

그리고 registerDate의 경우 SimpleDateFormat을 통해서 "yyyy-MM-dd HH:mm:ss" 형식으로 String 값으로 저장을 하였다