웹개발 교육/jsp

[50일] jsp (15) - Java Bean

ewok 2022. 10. 7. 11:50

Java Bean

이번에는 Java Bean이라는 것을 이용하여 만들어보겠다.

 

jsp페이지에 나열되는 자바 처리 로직은 디자인 코드와 함께 매우 복잡한 코드를 구성한다.

이로 인해 디자인 변경 시 자바 코드가 영향을 받아 오류가 자주 발생되며, 코드 수정 시 코드를 알아볼 수 없어 유지보수가 어렵다.

또한 작업 도중 자바 코드가 JSP 페이지에 반복적으로 사용될 수 있으며, 코드의 노출로 저작권 등 보안에 심각한 문제가 발생된다. 

 

이러한 반복되는 자바 코드들을 JAVA파일 안에 저장하여 사용하는 형태를 빈즈라고 한다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.testbean.*"%>

<jsp:useBean id="" class="" scope="page""></jsp:useBean>

 

bean을 사용하려면 이처럼 태그를 작성해줘야 한다. 이러한 태그를 액션 태그라고 한다.

<jsp:useBean id=""></jsp:useBean>      객체 생성(Object)
<jsp:forward page=""></jsp:forward>    페이지 이동
<jsp:include page=""></jsp:include>    공통 페이지 가져오기

여러 가지가 있지만 자주 사용하는 몇 가지만 적어봤다.

 

Java Bean도 객체를 생성하여 사용한다. 객체 생성은 태그 안에 속성을 적어주면 된다.

<jsp:useBean id="객체명" class="패키지명.클래스명" scope="page""></jsp:useBean>

 

scope에는 유효 범위가 있다.

scope="page"          현재 페이지에서만 유효. 생략 시 기본값
scope="request"       다른 페이지에서 공유
scope="session"       다른 페이지에서 공유
scope="application"   다른 페이지에서 공유
※ 참고
Java Bean(id)가 제대로 생성 안될 수도 있음.
해당 프로젝트 우클릭 -> Refresh, Validate
                       Project -> Clean 하고 테스트할 것!!

 

 

computeok3.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="net.testbean.*"%>

<jsp:useBean id="comp" class="net.testbean.Compute" scope="page"></jsp:useBean>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>computeok3.jsp</title>
</head>
<body>
	<h3>* 계산 결과 *</h3>
	<h4>3) Java Bean을 이용해서 객체 생성 후 메소드 호출</h4>
<%
	int num1 = Integer.parseInt(request.getParameter("num1").trim());
	int num2 = Integer.parseInt(request.getParameter("num2").trim());
	
	out.print(num1 + "+" + num2 + "=" + comp.add(num1, num2));
	out.print("<hr>");
	out.print(num1 + "-" + num2 + "=" + comp.sub(num1, num2));
	out.print("<hr>");
	out.print(num1 + "*" + num2 + "=" + comp.mul(num1, num2));
	out.print("<hr>");
	out.print(num1 + "/" + num2 + "=" + comp.div(num1, num2));
	out.print("<hr>");
	out.print(num1 + "%" + num2 + "=" + comp.mod(num1, num2));
	out.print("<hr>");
%>

</body>
</html>

 


이번에는 다른 기능을 가진 계산기를 만들어보자

 

calcForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>calcForm.jsp</title>
</head>
<body>
	<h3>* 절대값/팩토리얼 구하기 *</h3>
	<form>
	  <table border="1">
	  <tr>
	    <th>숫자</th>
	    <td><input type="number" name="num" size="5"></td>
	  </tr>
	  <tr>
	    <td colspan="2">
	       <input type="submit" value="계산">
	    </td>
	  </tr>  
	  </table>
	</form>
</body>
</html>

 

calcok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@page import="net.testbean.*" %>

<jsp:useBean id="calc" class="net.testbean.CalcBean" scope="page"></jsp:useBean>

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>calcok.jsp</title>
</head>
<body>
	<h3>* Java Bean 이용한 계산 결과 *</h3>
<%
	int num = Integer.parseInt(request.getParameter("num").trim());
	out.print("절대값 : " + calc.abs(num));
	out.print("<hr>");
	out.print("팩토리얼 : " + calc.fact(num));
%>	
	
</body>
</html>

참고로 팩토리얼 때문인지 음수를 입력하면 StackOverflowError가 발생한다.