JSP 자바빈즈는 JSP의 표준 액션 태그로 접근할 수 있는 자바 클래스로서 값을 가지는 속성(멤버변수)과 값을 설정하는 메소드(setter), 값을 추출하는 메소드(getter)로 이루어져있다.
자바빈즈는 하나의 JSP 페이지에 종속적으로 사용되는 것이 아니라, 여러 JSP 페이지에서 사용될 수 있다.
또한 자바빈즈는 다른 자바 클래스와 마찬가지로 자바 객체입니다.
1. 자바 웹페이지의 개발방식의 흐름
1) servlet(.java) → 2) jsp → 3) servlet(.java)
과거에는 .java로만 웹페이지를 만들었다.
장점도 분명히 있었지만 단점도 분명했다. 프론트 단의 구현이 어려웠기 때문이다.
그래서 과거에는 1) .java와 .asp로 웹페이지를 만들었다.
그러다 인터넷으로 쇼핑도 하고 결제도 하고 여러 보안이 필요한 업무들이 사용이 되면서 2) jsp가 활성화되기 시작했다.
그러나 jsp는 보안이 서블렛보다 굉장히 취약한 편이다.
그래서 현재는 3) jsp와 servlet을 병행하여 사용하는 흐름으로 웹페이지가 제작되어지고 있다.
2. 서블릿의 이해
1) 서블릿을 이용한 구성
- 자바로 개발된 .class 파일
- JSP에 비하여 컴파일 단계가 생략되기 때문에 속도가 빠르다.
- 서블릿의 단점 : 디자인 부분과 혼합하여 작업하기가 매우 어렵다.
2) JSP(Java Server Page)를 이용한 구성
- .jsp 파일
- Servlet의 불편한 디자인 부분을 좀더 간결하게 제작하도록 개선된 서버 스크립트
- 하나의 JSP페이지에는 HTML, CSS, JavaScript, Java Code등이 혼합되어 코딩이 이루어 진다.
- 유지보수 및 보안 문제, 기능 확장이 어려워 개발시 JSP와 Beans로 분리한다.
3) JSP + Beans 를 이용한 구성
- .jsp + .java 파일로 구성
- BEANS는 콤포넌트 자바 개발자가 Business Logic(Process Logic)를 구현하는 목적으로 사용된다.
- DB관련해서 INSERT, UPDATE, DELETE, SELECT등 구현시 주로 사용한다.
3. Beans의 이해
- jsp페이지에 나열되는 자바 처리로직은 디자인 코드와 함께 매우 복잡한 코드를 구성한다.
이로인해 디자인 변경시 자바코드가 영향을 받아 오류가 자주 발생되며,
코드 수정시 코드를 알아볼 수 없어 유지보수가 어렵다.
또한 작업 도중 자바 코드가 JSP 페이지에 반복적으로 사용될 수 있으며,
코드의 노출로 저작권등 보안에 심각한 문제가 발생된다.
이러한 반복되는 자바 코드들을 JAVA파일안에 저장하여 사용하는 형태를 빈즈라고 한다.
- 데이터를 출력하는 레이어와 데이터를 처리하는 레이어를 분리(Manager, Process class)하여
유지보수 시간을 단축 시키 수 있으며 코드의 가독성을 높일 수 있다.
- 확장자는 *.java 이며 컴파일해서 .class형태로 배포한다.
- 빈즈는 dll과 같은 원리를 가지고 있다.
- 빈즈의 종류
DTO(Data Transfer Object) class
Manager(Process) class
DAO(Data Access Object) class
4. DTO (Data Transfer Object) 데이터 전송 객체
- 사용자가 입력한 값을 객체형태로 받을수 있게 클래스를 구성한다
- 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환 될 수 있다.
- 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있다.
- 레코드가 50개이면 DTO 객체도 50개가 만들어 진다.
- 한개의 레코드는 빈즈 클래스 객체 하나로 매핑된다.
- 한개의 컬럼은 멤버 변수로 매핑된다.
- 데이터가 포함된 객체를 한 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체이다.
- DTO는 VO로 바꿔 말할 수 있는데 계층간 데이터 교환을 위한 자바빈즈를 말한다.
5. DAO (Data Access Object)
- Insert, delete, update, select등 레코드 처리를 주 목적으로 한다.
- DTO 객체를 데이터베이스 서버에 저장한다.
- 데이터베이스 서버로 부터 레코드를 SELECT한 후, DTO 객체로 변경해 가져온다.
- SQL을 직접 실행하는 기능을 가지고 있다.
- JSP에서 데이터베이스 접속 로직을 Beans로 작성하여 DB정보 변경시 쉽게 변경사항을 구현할 수 있다.
- 데이터 접근을 목적하는 객체이다.
- 커넥션 같은 것을 하나만 두고 여러 사용자가 DAO의 인터페이스를 사용하여 필요한 자료에 접근 하도록 하는 것
- DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트를 말한다.
※ VO(Value Object)
- DB 혹은 어떠한 물체 틀(형상화)을 잡고 이 틀을 잡기 위한 변수들을 모아둔 것이다.
- DTO와 동일한 개념이나 차이점은 read only 속성을 갖는다.
- 관계데이터베이스의 레코드에 대응되는 자바클래스이다.
형태는 DB레코드를 구성하는 필드들을 Value Object의 Attribute로 하고
해당 변수에 접근 할 수 있는 Getter Setter 메소드의 조합으로 클래스를 형성되어진 클래스이다.
- 대체로 불변성이고 equals()로 비교할 때 객체의 모든 값을 비교해야 한다.
※ VO와 DTO는 데이터를 객체에 저장 담당 클래스를 말하고 DAO는 DB의 데이터 사용,수정,삭제 기능 담당 클래스를 의미한다.
실제 객체는 데이터와 기능을 같이 가지고 있지만 프로그래밍에서는 분리시켜서 사용하는게 개발에 용이하다.
※ CRUD란?
- DAO가 접근하는 것은 DB, File, Application일수 있고 이것들을 접근하는 기술이 CRUD이다.
- Create, Read, Update, Delete 또는 Create, Retrieve, Update, Destroy를 묶어서 이야기 하는 용어로
대부분의 software가 가지는 기본적인 데이터 처리기능을 지칭한다.
- Create(생성), Read/Retrieve(읽기/인출), update(갱신), Delete/Destroy(삭제/파괴)의 기능을 하지 못하는
소프트웨어는 완전하다고 할 수 없다는 말이 있을 정도로 기본적인 기능에 속하기 때문에 한묶음으로 이야기 되어진다.
이러한 기능을 하는 대표적인 프로그램들로는 주소록앱이나 달력앱 그리고 Mysql같은 DB관리 software등이 있다.
6. 웹페이지의 SCOPE 유효범위
1) application - 모든 사용자가 공유하는 값
2) session - 각 사용자별로 개별적으로 구분 및 적용
3) request - 서로 요청한 페이지에서 유효
4) page - private속성과 비슷. 해당 페이지에서 유지되는 값. 생략가능
7. 자바빈즈 예재
- WebContent/testbean 테스트 페이지 작성 폴더 생성
- computeForm.jsp 예제를 1,2,3 경우로 나누어서 별도로 테스트.
1) JSP 메소드 호출
----------------------------- /WebContent/testbean/computeForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/test/computeForm.jsp</title>
</head>
<body>
<!--
1)JSP 메소드 호출
<form name="computefrm" method="post" action="computeok1.jsp">
2)new 연산자
<form name="computefrm" method="post" action="computeok2.jsp">
3)자바 빈즈
-->
<form name="computefrm" method="post" action="computeok3.jsp">
<table border="1">
<tr>
<th>첫번째 수</th>
<td><input type="text" name="num1" size=3></td>
</tr>
<tr>
<th>두번째 수</th>
<td><input type="text" name="num2" size=3></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="계산">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
------------------------------ /WebContent/testbean/computeok1.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/testbean/computeok.jsp</title>
</head>
<body>
1)jsp페이지 메소드 호출방식<br/><br/>
<%
int num1=Integer.parseInt(request.getParameter("num1"));
int num2=Integer.parseInt(request.getParameter("num2"));
out.print(num1+"+"+num2+"="+add(num1,num2));
out.print("<br/>");
out.print(num1+"-"+num2+"="+sub(num1,num2));
out.print("<br/>");
out.print(num1+"*"+num2+"="+mul(num1,num2));
out.print("<br/>");
out.print(num1+"/"+num2+"="+divi(num1,num2));
out.print("<br/>");
out.print(num1+"%"+num2+"="+mou(num1,num2));
out.print("<br/>");
%>
<%!
// JSP 메소드 작성 영역
public int add(int n1,int n2) { return n1+n2; }
public int sub(int n1,int n2) { return n1-n2; }
public int mul(int n1,int n2) { return n1*n2; }
public int divi(int n1,int n2) { return n1/n2; }
public int mou(int n1,int n2) { return n1%n2; }
%>
</body>
</html>
2) new 연산자로 객체 생성후 메소드 호출
----------------------------- Compute.java
package net.testbean;
public class Compute {
public int add(int n1,int n2) { return n1+n2; }
public int sub(int n1,int n2) { return n1-n2; }
public int mul(int n1,int n2) { return n1*n2; }
public int divi(int n1,int n2) { return n1/n2; }
public int mou(int n1,int n2) { return n1%n2; }
}
----------------------------- /WebContent/testbean/computeok2.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="net.testbean.Compute"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>computeok2.jsp</title>
</head>
<body>
2)자바 클래스파일 사용<br/>
<%
int num1=Integer.parseInt(request.getParameter("num1"));
int num2=Integer.parseInt(request.getParameter("num2"));
Compute comp=new Compute();
out.print(comp.add(num1, num2)+"<br/>");
out.print(comp.sub(num1, num2)+"<br/>");
out.print(comp.mul(num1, num2)+"<br/>");
out.print(comp.divi(num1, num2)+"<br/>");
out.print(comp.mou(num1, num2)+"<br/>");
%>
</body>
</html>
3) 자바 빈즈 생성후 메소드 호출
----------------------------- /WebContent/testbean/computeok3.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="net.testbean.Compute"%>
<jsp:useBean id="comp" class="net.testbean.Compute" scope="page"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>computeok3.jsp</title>
</head>
<body>
3)자바빈즈 사용<br/>
<%
int num1=Integer.parseInt(request.getParameter("num1"));
int num2=Integer.parseInt(request.getParameter("num2"));
out.print(comp.add(num1, num2)+"<br/>");
out.print(comp.sub(num1, num2)+"<br/>");
out.print(comp.mul(num1, num2)+"<br/>");
out.print(comp.divi(num1, num2)+"<br/>");
out.print(comp.mou(num1, num2)+"<br/>");
%>
</body>
</html>
'⁂ JSP > : 기본 익히기' 카테고리의 다른 글
[JSP] #5-3 ssi, sungjukForm, sungjukIns, sungjukList, sungjukRead, sungjukDel, sungjukUpdate, sungjukUpdateProc (0) | 2022.10.07 |
---|---|
[JSP] #5-2 DBOpen, DBClose, SungjukDTO, SungjukDAO (0) | 2022.10.07 |
[JSP] #4-2 jsp로 CRUD 작업하기(SQL 문법) - 공사중 (0) | 2022.10.06 |
[JSP] #4-1 jsp로 CRUD 작업하기(SQL 문법) (0) | 2022.10.06 |
[JSP] #3-3 Request 내부 객체의 다양한 메소드 (0) | 2022.10.05 |