: 동적 콘텐츠 개발을 위해 자바 코드를 사용하여 자바 클래스로 로직을 작성하는 방법
: jsp 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것을 말한다.
: jsp 페이지가 html 과 같이 쉽고 간단한 코드만으로 구성될 수 있도록 함
: 자바 클래스에 java.io.Serializable 인터페이스를 구현해야 한다
= implements Serializable 해주어야 한다
: 인수가 없는 기본 생성자가 있어야 한다
: 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다
: 모든 멤버 변수인 프로퍼티는 getter/setter() 메소드가 존재해야한다
import java.io.Serializable;
// 자바 빈즈로 만들기
// 1. implements Serializable
public class MemberBean implements Serializable {
// 2. 속성은 private
private int id;
private String name;
// 3. 인수없는 기본 생성자
public MemberBean() {}
// 4. getter/setter 메소드가 모두 있어야 한다.
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
이게 받아오는게 두 가지이다.
1. id="자바 빈즈의 식별이름" class="불러올 자바파일"
scope="자바 빈즈가 저장되는 영역
(현재페이지냐 요청하는 곳이나 섹션의 자료나 또 다른 어플리케이션이냐 등등)"
<jsp:useBean id="member" class="a1.MemberBean"/>
2. 위의 액션태그를 코드로 바꾸면 아래와 같다
MemberBean member = (MemberBean)request.getAttribute("member");
if(member == null){
member = new MemberBean();
request.setAttribute("member", member)
}
이걸 body 에 넣어 불러오면 된다.
package a1;
import java.io.Serializable;
public class Calculator implements Serializable{
public int hap(int n) {
return n*n*n;
}
}
<body>
<!-- java.util.Date 파일을 가져와 날짜 표시하기-->
<jsp:useBean id="date" class="java.util.Date" />
<p> 오늘의 날짜 및 시간 :<br>
<%= date %>
<hr>
<!-- Calculator.java 연결하기 -->
<jsp:useBean id="cal" class="a1.Calculator" />
<%
int result = cal.hap(2);
%>
<p> 2의 세제곱 : <%= result %>
</body>
파일에서 잘 불러오는 모습 확인
: useBean 액션 태그와 함께 자바빈즈의 setter() 메소드에 접근하여, 자바빈즈의 멤버 변수인 프로퍼티의 값을 저장하는 태그
: 폼 페이지로부터 전달되는 요청 파라미터의 값을 직접 저장하거나 자바빈즈의 프로퍼티로 변경하여 값을 저장할 수 있다.
<jsp:setProperty name="member" peoperty="id" value="admin" />
or <jsp:setProperty name="member" peoperty="id" param = "userid" />
Person.java 파일 작성
public class Person implements Serializable {
private int id=20210427;
private String name="홍길동";
private String pw = "777";
private String phone = "1234-5668";
public Person() { }
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getPw() { return pw; }
public void setPw(String pw) { this.pw = pw; }
public String getPhone() { return phone; }
public void setPhone(String phone) { this.phone = phone; }
}
useBeanPerson.jsp 파일 작성
<body>
<p> 자바빈즈 Person 생성 후, useBean 액션태그를 사용하여
Person 클래스를 사용하기</p>
<hr>
<jsp:useBean id="person" class="a1.Person" scope="request"/>
<p> 아이디 : <%= person.getId() %> </p>
<p> 이름 : <%= person.getName() %> </p>
</body>
<jsp:useBean id="person" class="a1.Person" scope="request" />
을 해서 파일을 연결하고
<%
// 값을 보내준다
person.setId(20200427);
person.setName("이순신");
%>
전체 코드 확인하기
<body>
<p> 기본 </p>
<jsp:useBean id="person" class="a1.Person" scope="request" />
<p> 아이디 : <%= person.getId() %> <br>
이 름 : <%= person.getName() %> </p>
<p> ----------------------------------------------------- </p>
<p> Person의 아이디와 이름을 useBean으로 넣어주기 <br>
= jsp 자료를 자바에 넣기 </p>
<%
// 값 보내주기
person.setId(20200427);
person.setName("이순신");
%>
<p> 아이디 : <%= person.getId() %> <br>
이 름 : <%= person.getName() %> </p>
<!-- 다른 곳에 연결해서 불러와도 이 페이지에서 이미 값을 보내줬기 때문에
보내준 이후 값이 출력된다 -->
<jsp:include page="1_useBeanPerson.jsp" />
<hr>
<p> 수고하셨습니다 </p>
</body>
처음에는 값을 재설정 없이 그대로 가져와 출력해주었고,
그 다음은 자바 식으로 값을 재설해 출력해주었다.
이미 값을 보내서 변경한 다음이기 때문에 해당 페이지에서 다음에 또 파일을 불러오면 변경된 값이 출력된다.
그때 사용하는 것이 setProperty 이다.
<jsp:setProperty property="id" name="person" value="20201225" />
이런식으로 value 뒤에 변경할 값을 적어주면 되는 것이다. 자바 식으로 값을 보내고 getter로 다시 받아오는 것에 비해 코드가 간단해진다.
<body>
<p> setProperty 액션태그로 자바빈즈 Person에 값을 보내 아이디와 이름 설정하고 출력하기 </p>
<jsp:useBean id="person" class="a1.Person" scope="request" />
<p> setProperty의 속성에서<br>
property="person클래스의 setName()을 가져오려면 set빼고 name을 적어주면 된다" </p>
<jsp:setProperty property="id" name="person" value="20201225" />
<jsp:setProperty property="name" name="person" value="김자바"/>
<jsp:setProperty property="pw" name="person" value="6789"/>
<jsp:setProperty property="phone" name="person" value="98766-5432"/>
<p> 이름 : <%= person.getId() %> <br>
아이디 : <%= person.getName() %> <br>
비밀번호 : <%= person.getPw() %> <br>
핸드폰 : <%= person.getPhone() %> </p>
</body>
적어놓은 것처럼 setProperty의 property 부분에는 가져올 person.getName()
의 name
만 적어주면 되고, name에는 연결할 useBean의 id을 적어주면 된다.
값을 가져오기만 할거라면 setProperty를 사용하지 않아도 된다. getProperty를 사용해도 가져올 수 있다.
<jsp:getProperty property="name" name="person" />
모양은 setProperty와 다르지 않다.
<body>
<p> 자바빈즈의 Person을 이용하여 아이디와 이름을 가져와 출력하기 </p>
<jsp:useBean id="person" class="a1.Person" scope="request" />
<p> 이 름 : <jsp:getProperty property="name" name="person" /> <br>
아이디 : <jsp:getProperty property="id" name="person"/> <br>
비밀번호 : <jsp:getProperty property="pw" name="person"/> <br>
전화번호 : <jsp:getProperty property="phone" name="person"/> </p>
<hr>
<p> getProperty로는 값을 변경해 가져올 수 없다.<br>변경하고 싶다면 setProperty를 사용합시다
<jsp:setProperty property="id" name="person" value="1" />
<jsp:setProperty property="name" name="person" value="김자바"/>
<jsp:setProperty property="pw" name="person" value="1357"/>
<jsp:setProperty property="phone" name="person" value="4653-1111"/>
<p> 이 름 : <jsp:getProperty property="name" name="person" /> <br>
아이디 : <jsp:getProperty property="id" name="person"/> <br>
비밀번호 : <jsp:getProperty property="pw" name="person"/> <br>
전화번호 : <jsp:getProperty property="phone" name="person"/> </p>
</body>
1) java 파일 만들기
import java.io.Serializable;
public class GuGuDan implements Serializable {
public String process(int dan) {
String result = "";
for (int i = 1; i <= 9; i++) {
result += dan + " * " + i + " = " + (dan * i) + "<br>";
}
return result;
}
}
원래는 public int process
의 모습으로 리턴해주려 했으나 계속 오류가 났기 때문에.. 숫자계산하는 부분을 따로 만들어주고 전체적으로 String형태로 바꾸어 리턴하게끔 되었다.
2) jsp 파일 만들기
<body>
<h4> 구구단 출력하기 </h4>
<jsp:useBean id="gugudan" class="dao.GuGuDan" scope="request" />
5단 <br>
<%= gugudan.process(5) %>
</body>
메소드를 불러와 계산할 단 수를 () 안에 넣어주면 된다.
값을 변형없이 가져오기만 하겠다 : getProperty 사용
값을 변형해서 사용하고 싶다 : setProperty 사용