본문 바로가기

개발자노트/웹

JSP - Bean 설명과 request 객체설명, 이를 이용한 계산기 예제

Bean

 

- 자바 빈즈
- JSP 서버 프로그래밍에서 로직을 갖는 클래스를 Bean 클래스라고 부름

- '클래스' 이기 때문에 패키지 안에 class 파일을 만들면 된다.

JavaBean
CalcBean

- 멤버변수를 private로 선언하고,

- op 값이 null이 아니게 하기 위해 기본 생성자를 만들어준다.

   ( 초기에 html에서 불러오면서 null값이 들어가게 되는 것을 막기 위해)

- 그리고 private 처리를 하였으니 당연히 get,set을 해주어야겠다.

- 마지막으로 CalBean이 수행할 함수까지 만들어주면 된다.

bean의 calc함수

 

 

CalBean 클래스를 만들었으면 JSP에서 사용하는 법을 설명하겠다.

Bean 사용법

- <jsp:useBean id="cb" class="test.CalcBean"/>   java의 bean을 그대로 데려올 수 있음  
- test 패키지에 CalcBean 클래스를 cb라는 이름으로 객체화
- CalcBean cb= new CalcBean 같은 느낌 

Bean 사용법2


- 그러니 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>