Bean
- 자바 빈즈
- JSP 서버 프로그래밍에서 로직을 갖는 클래스를 Bean 클래스라고 부름
- '클래스' 이기 때문에 패키지 안에 class 파일을 만들면 된다.
- 멤버변수를 private로 선언하고,
- op 값이 null이 아니게 하기 위해 기본 생성자를 만들어준다.
( 초기에 html에서 불러오면서 null값이 들어가게 되는 것을 막기 위해)
- 그리고 private 처리를 하였으니 당연히 get,set을 해주어야겠다.
- 마지막으로 CalBean이 수행할 함수까지 만들어주면 된다.
CalBean 클래스를 만들었으면 JSP에서 사용하는 법을 설명하겠다.
- <jsp:useBean id="cb" class="test.CalcBean"/> java의 bean을 그대로 데려올 수 있음
- test 패키지에 CalcBean 클래스를 cb라는 이름으로 객체화
- CalcBean cb= new CalcBean 같은 느낌
- 그러니 setter들을 호출하여 멤버변수를 초기화 해야함
- 원래라면 cb.setNum1(Integer.parseInt(request.getParameter("num1"))); 같은 행위를 해야하지만,
- <jsp:setProperty property="*" name="cb"/> 를 사용하면 모든 property를 cb에 담을 수 있다.
=> cb라는 이름을 가진 객체의 setter 메서드 자동매핑 호출
- name 속성의 이름과 객체의 멤버변수명(setter)
★이 둘의 이름이 무조건 같아야한다. (형변환도 자동)★
수행과정
1) 기존에 cb 객체가 존재했나?
2-1) T : cb를 기존의 객체로 세팅
2-2) F : cb를 new
--> workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\프로젝트명\org\apache\jsp에 Bean.java파일을 확인해보면
test.CalcBean cb = null;
cb = (test.CalcBean) _jspx_page_context.getAttribute("cb", javax.servlet.jsp.PageContext.PAGE_SCOPE);
// 2-1에 해당
if (cb == null){
cb = new test.CalcBean(); //2-2에 해당
_jspx_page_context.setAttribute("cb", cb, javax.servlet.jsp.PageContext.PAGE_SCOPE);
}
☆request 객체
- jsp를 서비스 할 당시 인자로 만들어준다.
- 선언,초기화, 객체화도 한 적이없음!
- 서블릿에서 자동으로 생성해주는 객체
== JSP 내장 객체, 이 또한 상단 경로 Bean.java 파일을 보면 알 수 있음
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
ex) request, response, pageContext, session, out, application, ...
전체 코드
CalBean
package test;
public class CalcBean {
private int num1;
private int num2;
private String op;
private int result;
public CalcBean() { // op의 값이 null이 아니게 하려고 기본 생성자를 만들어줌( HTML이 상단부터 읽기 때문에 )
this.op="";
}
public int getNum1() {
return num1;
}
public void setNum1(int num1) {
this.num1 = num1;
}
public int getNum2() {
return num2;
}
public void setNum2(int num2) {
this.num2 = num2;
}
public String getOp() {
return op;
}
public void setOp(String op) {
this.op = op;
}
public int getResult() {
return result;
}
public void setResult(int result) {
this.result = result;
}
public void calc() {
if (op.equals("+")) {
result = num1 + num2;
} else if (op.equals("-")) {
result = num1 - num2;
} else if (op.equals("x")) {
result = num1 * num2;
} else if (op.equals("/")) {
result = num1 / num2;
}
}
}
JSP 코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="cb" class="test.CalcBean"/> <!-- java의 bean을 그대로 데려올 수 있음 -->
<%-- test 패키지에 CalcBean 클래스를 cb라는 이름으로 객체화 --%>
<%-- CalcBean cb= new CalcBean 같은 느낌 --%>
<%-- 그러니 setter들을 호출하여 멤버변수를 초기화 해야함 --%>
<jsp:setProperty property="*" name="cb"/>
<%-- cb라는 이름을 가진 객체의 setter 메서드 자동매핑 호출 --%>
<%-- 이름이 무조건 같아야한다. 형변환도 자동 --%>
<% cb.calc(); %> <!-- cb의 calc메서드 호출 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> 계산기 - 2 (Beans)</title>
</head>
<body>
<h1>계산기</h1>
<hr>
<form method="post">
<input type="text" name="num1">
<select name="op">
<option>+</option>
<option>-</option>
<option>x</option>
<option>/</option>
</select>
<input type="text" name="num2">
<input type="submit" value="계산결과보기">
</form>
<hr>
<h2>계산결과 :<jsp:getProperty property="result" name="cb"/> </h2>
<!-- cb의 result를 받고 싶다 -->
</body>
</html>
'개발자노트 > 웹' 카테고리의 다른 글
HTML - JSP 에러 처리 페이지 ( 예외처리 ) (0) | 2022.08.02 |
---|---|
JSP - Servlet +HTML을 사용한 계산기예제 -3 (0) | 2022.08.01 |
JSP - JSP만을 이용한 계산기 예제1 + ( HTTP 상태 500 - 내부 서버 오류) (GET,POST) (0) | 2022.08.01 |
JSP - import, JSP 주석, JAVA를 HTML에서 사용하기 (0) | 2022.08.01 |
JSP 전체 동작 과정 (0) | 2022.08.01 |