일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- SQL
- HTTP Status 500
- 이클립스
- 과정평가형
- rownum
- Bootstrap
- 모조칼럼
- jQuery
- HTML
- alias
- 한글 인코딩
- git
- github
- HTTP Status 404
- Oracle SQL
- Java
- group by
- 성적프로그램
- Oracle DB
- tomcat
- 부트스트랩
- oracle
- CRUD
- sql developer
- 답변형 게시판
- 제약조건
- ||
- JSP
- distinct
- JavaScript
초급의 끄적거림
[JSP] JAVA 빈즈 (id, 객체 등) 개요 / 예제 비교 본문
1. 자바 웹페이지의 개발방식의 흐름
servlet(.java) → jsp → servlet(.java)
2. Beans의 이해
⊙ 반복되는 자바코드들을 JAVA 파일안에 저장하여 사용하는 형태
- 사용이유 : jsp 페이지에 나열되는 자바 처리로직이 복잡하여 디자인 변경시 자바코드가 영향을 받아 오류가 자주 발생하고 코드 수정시 코드를 알아볼 수 없어서 유지보수가 어려움
: 작업 도중 자바 코드가 JSP 페이지에 반복적으로 사용
: 코드의 노출로 저작권 등 보안상 문제
⊙ 종류 (참고 : https://ninearies.tistory.com/64)
- DTO (Data Transfer Object) class
- Manager (Process) class
- DAO (Data Access Object) class
⊙ 데이터를 출력하는 레이어 & 데이터를 처리하는 레이어 분리로 유지보수 시간을 단축 + 코드의 가독성 ↑
⊙ 확장자 : *.java → 컴파일로 .class로 배포
⊙ 빈즈는 dll과 같은 원리
3. Java Bean(객체) 생성
<jsp:useBean id="객체명" class="패키지명.클래스명" scope="page">
⊙ class의 클래스명 : 내가 쓰고자하는 클래스명을 적는 것, * 처리 하지 않음
4. Java Bean(id)의 유효범위 4가지
scope="page" |
현재 페이지에서만 유효 (private 속성과 비슷), 해당 페이지에서 유지되는 값. 생략시 기본값 |
scope="request" |
다른 페이지에서 공유, 서로 요청한 페이지에서 유효 |
scope="session" |
다른 페이지에서 공유 (시간이 지나면 자동 소멸 - ex. 로그인 정보들) 각 사용자별로 개별적으로 구분 및 적용 |
scope="application" |
다른 페이지에서 공유, 모든 사용자가 공유하는 값 |
5. 예제) computeForm
5-1. Compute.java
⊙ .java와 .jsp 를 함께 사용하기 위해, 자바 만들기
: 'basicWeb' 프로젝트에 'Java Resources' → 'scr' → 패키지 'net.testbean' → 클래스 'Compute'
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; }
}//class end
5-2. computeForm.jsp
⊙ WebContent 폴더에 새 폴더 'testbean' 생성 → 'computeForm.jsp'
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>computeForm.jsp</title>
</head>
<body>
<h1>* 계산기 *</h1>
//1) JSP 메소드
<form action="computeok1.jsp">
<table border="1">
<tr>
<th>숫자1</th>
<td><input type="number" name="num1" size="5"></td> <!-- size : 겉으로 보이는 텍스트상자의 크기 -->
</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>
⊙ 공통적으로 입력 된 값으로, 1~3)까지 진행되는 동안 모두 같은 결과값이 나와야 함
5-3. computeForm1.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>computeok1.jsp</title>
</head>
<body>
<h1>* 계산결과 *</h1>
<h2>1) JSP 메소드 호출</h2>
<%
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>
5-4 computeForm2.jsp
⊙ form을 새로 만들지 않고 action만 바꿔서 수행할 것
⊙ 서블릿(.java) → 자바코드를 웹페이지에서 쓰기 위해서 만든 것이 .jsp (우리가 지금까지 한것)→ .java + .jsp (우리가 앞으로 할 것) 두 가지를 섞어서 페이지를 만드는 것이 적합
⊙ Compute.java에 computeok1.jsp에 작성한 메소드 복사해오기
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="net.testbean.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>computeok2.jsp</title>
</head>
<body>
<h1>* 계산결과 *</h1>
<h2>2) new연산자를 이용해서 객체생성 후 메소드 호출</h2>
<%
//new를 너무 많이 쓰지 않기 위해서 1)에서처럼 메소드를 사용하게 되는 것
int num1=Integer.parseInt(request.getParameter("num1").trim());
int num2=Integer.parseInt(request.getParameter("num2").trim());
//객체 new Compute() → RAM의 heap 영역에 메모리가 할당 되고 주소값이 발생
//참조변수 comp
Compute comp=new Comput();
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>
5-5. computeForm3.jsp
⊙ Java Bean(객체) 생성
- <jsp:UseBean id="객체명" class="패키지명.클래스명" scope="page">
<%@ page contentType="text/html; charset=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>
<h1>* 계산결과 *</h1>
<h2>3) Java Bean을 이용해서 객체생성 후 메소드 호출</h2>
<%
int num1=Integer.parseInt(request.getParameter("num1").trim());
int num2=Integer.parseInt(request.getParameter("num2").trim());
//Compute comp=new Compute(); → 위에 jsp:useBean으로 들어가 있기 때문에 쓰지 않아도 됨
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>
6. 예제) calcForm
6-1. CalcBean.java
package net.testbean;
public class CalcBean{
//절대값 구하기 (무조건 양수 출력)
public int abs(int num){
if(num<0)
return -num;
else
return num;
}//abs() end
//팩토리얼값 구하기 4*3*2*1
public int fact(int num){
return (num==0) ? 1 : num*fact(num-1);
}//fact() end
}//class end
6-2. calcForm.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>calcForm.jsp</title>
</head>
<body>
<h1>* 절대값/팩토리얼 *</h1>
<form action="calcok.jsp">
<table border="1">
<tr>
<td>
<input type="text" name="num" size="3">
</td>
</tr>
<tr>
<td>
<input type="submit" value="계산">
<input type="reset" value="취소">
</td>
</tr>
</table>
</form>
</body>
</html>
6-3. calcok.jsp
<%@ page contentType="text/html; charset=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>
<h1>* Java Bean 이용한 계산 결과 *</h1>
<%
int num=Integer.parseInt(request.getParameter("num"));
out.print("절대값 : "+calc.abs(num));
out.print("<hr>");
out.print("팩토리얼 : "+calc.fact(num));
%>
</body>
</html>
'JSP' 카테고리의 다른 글
[JSP] HTTP Status 500 - java.lang.NumberFormatException: null (0) | 2019.08.30 |
---|---|
[JSP] JAVA빈즈 (DTO, DAO, CRUD) / 성적프로그램 (0) | 2019.08.29 |
[JSP] 성적프로그램 2 (0) | 2019.08.27 |
[JSP] request내부객체 / 성적 프로그램 만들기1 / 한글인코딩 (0) | 2019.08.26 |
[JSP] 내부객체 / Scope의 종류 / form의 기초 / request.getParameter("") / HTTP Status 404 (0) | 2019.08.23 |