JSP-JAVA Bean

임재헌·2023년 4월 12일
0

JSP

목록 보기
15/33

자바 웹페이지의 개발방식의 흐름

servlet(.java)  -> jsp  -> servlet(.java)

서블릿의 이해

  1. 서블릿을 이용한 구성
  • 자바로 개발된 .class 파일
  • JSP에 비하여 컴파일 단계가 생략되기 때문에 속도가 빠르다.
  • 서블릿의 단점 : 디자인 부분과 혼합하여 작업하기가 매우 어렵다.
  1. JSP(Java Server Page)를 이용한 구성
  • .jsp 파일
  • Servlet의 불편한 디자인 부분을 좀더 간결하게 제작하도록 개선된 서버 스크립트
  • 하나의 JSP페이지에는 HTML, CSS, JavaScript, Java Code등이 혼합되어 코딩이 이루어 진다.
  • 유지보수 및 보안 문제, 기능 확장이 어려워 개발시 JSP와 Beans로 분리한다.
  1. JSP + Beans 를 이용한 구성
  • .jsp + .java 파일로 구성
  • BEANS는 콤포넌트 자바 개발자가 Business Logic(Process Logic)를 구현하는 목적으로 사용된다.
  • DB관련해서 INSERT, UPDATE, DELETE, SELECT등 구현시 주로 사용한다.

Beans의 이해

  • jsp페이지에 나열되는 자바 처리로직은 디자인 코드와 함께 매우 복잡한 코드를 구성한다.
    이로인해 디자인 변경시 자바코드가 영향을 받아 오류가 자주 발생되며,
    코드 수정시 코드를 알아볼 수 없어 유지보수가 어렵다.
    또한 작업 도중 자바 코드가 JSP 페이지에 반복적으로 사용될 수 있으며,
    코드의 노출로 저작권등 보안에 심각한 문제가 발생된다.
    이러한 반복되는 자바 코드들을 JAVA파일안에 저장하여 사용하는 형태를 빈즈라고 한다.
  • 데이터를 출력하는 레이어와 데이터를 처리하는 레이어를 분리(Manager, Process class)하여
    유지보수 시간을 단축 시키 수 있으며 코드의 가독성을 높일 수 있다.
  • 확장자는 *.java 이며 컴파일해서 .class형태로 배포한다.

  • 빈즈는 dll과 같은 원리를 가지고 있다.

  • 빈즈의 종류

    DTO(Data Transfer Object) class
    Manager(Process) class
    DAO(Data Access Object) class


DTO (Data Transfer Object) 데이터 전송 객체

  • 사용자가 입력한 값을 객체형태로 받을수 있게 클래스를 구성한다
  • 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 될 수 있다.
  • 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있다.
  • 레코드가 50개이면 DTO 객체도 50개가 만들어 진다.
  • 한개의 레코드는 빈즈 클래스 객체 하나로 매핑된다.
  • 한개의 컬럼은 멤버 변수로 매핑된다.
  • 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체이다.
  • DTO는 VO로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바빈즈를 말한다.

DAO (Data Access Object)

  • Insert, delete, update, select등 레코드 처리를 주 목적으로 한다.
  • DTO 객체를 데이터베이스 서버에 저장한다.
  • 데이터베이스 서버로 부터 레코드를 SELECT한 후, DTO 객체로 변경해 가져온다.
  • SQL을 직접 실행하는 기능을 가지고 있다.
  • JSP에서 데이터베이스 접속 로직을 Beans로 작성하여 DB정보 변경시 쉽게 변경사항을 구현할 수 있다.
  • 데이터 접근을 목적하는 객체이다.
  • 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것
  • DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.

직접 해보기

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>computeForm.jsp</title>
</head>
<body>
	<h3>* 계산기 *</h3>
	
	<!-- 1) JSP 메소드
	<form action="computeok1.jsp">
	-->
	
	<!-- 2) new 연산자
	<form action="computeok2.jsp">
	-->

	<!-- 3) Jave Bean -->
	<form action="computeok3.jsp">	
	<table border="1">
	  <tr>
	    <th>숫자1</th>
	    <td><input type="number" name="num1" size="5"></td>
	  </tr>
	  <tr>
	    <th>숫자2</th>
	    <td><input type="number" name="num2" size="5"></td>
	  </tr>
	  <tr>
	    <td colspan="2">
	       <input type="submit" value="계산">
	    </td>
	  </tr>  
	</table>
	</form>
</body>
</html>

JSP 메소드를 이용한 계산
computeok1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>computeOK1</title>
</head>
<body>
<h3>계산결과</h3>
<h4>메소드 호출</h4>
<%
int num1=Integer.parseInt(request.getParameter("num1").trim());
int num2=Integer.parseInt(request.getParameter("num2").trim());

out.print(num1+"+" +num2 +"="+add(num1,num2));
out.print("<hr>");
out.print(num1+"-" +num2 +"="+sub(num1,num2));
out.print("<hr>");
out.print(num1+"*" +num2 +"="+mul(num1,num2));
out.print("<hr>");
out.print(num1+"/" +num2 +"="+div(num1,num2));
out.print("<hr>");
out.print(num1+"%" +num2 +"="+mod(num1,num2));
out.print("<hr>");

%>

<%!
//jsp 작성 영역
public int add(int a, int b){return a+b;}
public int sub(int a, int b){return a-b;}
public int mul(int a, int b){return a*b;}
public int div(int a, int b){return a/b;}
public int mod(int a, int b){return a%b;}
%>
</body>
</html>

new 연산자를 이용해서 객체를 생성한 후 메소드 호출

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="net.testbean.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>computeok2</title>
</head>
<body>
<h3>계산 결과</h3>
<h4>new 연산자를 이용해서 객체 생성후 메소드 호출</h4>

<%
int num1=Integer.parseInt(request.getParameter("num1").trim());
int num2=Integer.parseInt(request.getParameter("num2").trim());
	
	//객체 생성
	//-> Ram의 heap영역에 메모리가 할당되는 것
	Compute com=new Compute();
	out.print(num1+"+" +num2 +"="+ com.add(num1,num2));
	out.print("<hr>");
	out.print(num1+"-" +num2 +"="+com.sub(num1,num2));
	out.print("<hr>");
	out.print(num1+"*" +num2 +"="+com.mul(num1,num2));
	out.print("<hr>");
	out.print(num1+"/" +num2 +"="+com.div(num1,num2));
	out.print("<hr>");
	out.print(num1+"%" +num2 +"="+com.mod(num1,num2));
	out.print("<hr>");

%>
</body>
</html>

JAVA Bean클래스 작성

package net.testbean;

public class Compute {
	public int add(int a, int b){return a+b;}
	public int sub(int a, int b){return a-b;}
	public int mul(int a, int b){return a*b;}
	public int div(int a, int b){return a/b;}
	public int mod(int a, int b){return a%b;}
}

Jave Bean을 이용한 계산

<%@ 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>

<%--
    ● [액션태그]
      <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하고 테스트할것!!	    
 --%>

<!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>Insert title here</title>
</head>
<body>
<form action="calcok.jsp">
<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>

CalcBean.java

package net.testbean;

public class CalcBean {
    
	public int abs(int su){  //절대값 구하기
        return Math.abs(su);
    }//abs() end
    
    public long fact(int su){ //팩토리얼값 구하기
        return (su==0) ? 1 : su*fact(su-1);    
    }//fact() end
    
}//class end

calcok.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <jsp:useBean id="calc" class="net.testbean.Calcbean" scope="page"></jsp:useBean>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>절대값 팩토리얼 구하기</title>
</head>
<body>
<%
int num=Integer.parseInt(request.getParameter("num").trim());
out.print(calc.abs(num));
out.print("<hr>");

out.print(calc.fact(num));
out.print("<hr>");

%>	
</body>
</html>

0개의 댓글