일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- ㅔㄴ션
- 메소드명
- 검색
- Query
- subquery
- appspec.yml
- 커밋메세지수정
- docker명령어
- EC2
- application.yml
- appspec
- 예약
- 테스트메소드
- ubuntu
- 2 > /dev/null
- 포트
- foreignkey
- 컨테이너실행
- 테스트
- 참조키
- 메세지수정
- 외부키
- MySQL
- 서브쿼리
- WeNews
- 네이티브쿼리
- 적용우선순위
- 추후정리
- AuthenticationEntryPoint
- querydsl
- Today
- Total
제뉴어리의 모든것
[Spring] 자바빈이란 그리고 자바빈의 필요성 본문
#자바빈(JavaBean)이란?
일반적인 웹사이트는 디자이너와 프로그래머가 협력하여 개발한다. 그런데 프로그래머가 JSP페이지에 자바코드를 입력했을때 디자이너 입장에서는 해석하기 어려워지고 효율또한 매우 떨어지게 된다. 이런 비효율적인 부분을 지원하기위해 제공되는 기능의 형태가 자바빈이다. 자바빈은 JSP페이지의 디자인 부분과 로직부분을 나눔으로써 복잡한 자바코드를 줄이고 프로그램의 재사용성을 증가시킨다.
#자바빈의 설계 규약
자바빈을 작성하기 위해서는 설계규약을 따라야 한다. 만약 설계규약과 맞지 않는 경우 자바빈의 특성을 갖지 않는 클래스가 되어버릴수 있다.
1. 멤버변수마다 별도의 get/set 메소드가 존재해야 한다.
2. get 메소드는 매개변수가 존재하지 않아야한다.
3. set 메소드는 반드시 하나 이상의 매개변수가 존재해야 한다.
4. 생성자는 매개변수가 존재하지 않아야 한다.
5. 멤버변수의 접근제어자는 private이고 각 set/get메소드의 접근제어자는 public , 클래스의 접근제어자는 public 으로 정의한다.
#자바빈 사용하기
1.<jsp:useBean/>태그
자바빈 객체를 생성하기 위한 코드이고 태그 속성은 다음과 같다.
<jsp:useBean id="빈 이름" class="자바빈 클래스 명" scope="사용범위"/>
id는 JSP페이지에서 자바빈 객체의 변수명, class는 자바빈에 사용할 클래스명(클래스가 패키지 않에 있다면 패키지 경로까지 적어주어야 한다. scope는 자바빈의 사용범위를 뜻하며 request, page, session, application 네종류가 존재한다. 디폴트값은 page로 설정된다.
2.<jsp:setProperty/>태그
자바빈 클래스의 속성 값을 설정하기 위한 태그이고 속성은 다음과 같다.
<jsp:setProperty name="빈 이름" property="속성명" value="설정할 값"/>
<jsp:setProperty name="빈 이름" property="속성명" param="파라미터명"/>
외부 링크로 첨부된 음악, 동영상은
재생이 지원되지 않습니다.
name은 선언된 자바빈 객체의 id property는 객체내의 속성명, value는 속성에 넣을 값을 의미한다. 여기서 클라이언트에서 전송되어오는 파라미터 값을 속성값으로 할당 하고 싶다면 value 속성대신 param속성을 이용하면된다. 그런데 여기서 자바빈으로 사용되는 클래스의 속성들은 설계규약에 의하여 private으로 설정되는데 <jsp:setProperty/>태그로 접근이 가능한 이유는 변수에 직접적인 접근이 아닌 set 메소드를 호출하여 접근하게 되는 것이다.
3.<jsp:getProperty/>태그
자바빈 클래스의 속성값을 가져오기 위한 태그이고 속성은 다음과 같다.
<jsp:getProperty name="빈 이름" property="속성명"/>
name는 값을 가져올 빈의 id, property는 가져올 속성의 이름이다.
#자바빈 예제
BeanTest.java
package test;
public class BeanTest {
private String name = null;
private int age = 0;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
자바빈으로 사용할 클래스이다. 멤버변수는 모두 private으로 선언되어있고 설계규약에 따라 set/get메소드를 만들어줘야 한다.
BeanTest.jsp
<%@ page language="java"contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type"content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<!-- JavaBean 선언 -->
<jsp:useBean id="beanTest"class="test.BeanTest" scope="page"/>
<!-- beanTest라는 빈의 name속성을 KangWonDeok으로 설정 -->
<jsp:setProperty name="beanTest"property="name" value="KangWonDeok"/>
<!-- beanTest라는 빈의 name속성을 출력 -->
<jsp:getProperty name="beanTest"property="name"/>
<!-- beanTest라는 빈의 age속성을 26으로 설정 -->
<jsp:setProperty name="beanTest"property="age" value="26"/>
<!-- beanTest라는 빈의 age속성을 출력 -->
<jsp:getProperty name="beanTest"property="age"/>
</body>
</html>
beanTest라는 빈의 name속성과 age속성을 각각 "KangWonDeok" , "26"으로 할당하고 출력 만약 클라이언트가 요청한 파라미터 값으로 값을 지정하고 싶다면 value속성 대신 param속성을 대신하여 사용하면 된다.
출력결과.
일단 자바빈이란...
보통 '빈즈'라고도 많이 합니다만....
jsp에서 객체를 가져다 사용못하니 기능이 아주 제한적이게 됩니다.
또 가져다 쓰자니 위에 언급한거와 같이 소스가 지저분해지고 디자이너가 수정하기도 어렵습니다.
그래서 jsp에서 객체를 가져다가 사용할수 있도록 한 기법이 자바빈입니다.
(jsp:useBean id="dbpool" class="oracle.ec.bean.DBObject" scope="page")(/jsp:useBean)
보통은 위와 같은 방식으로 사용합니다.
이렇게 하면 oracle.ec.bean.DBObject를 dbpool이란 이름으로 객체처럼 사용이 가능하죠.
scope옵션은 사용기간, 혹은 범위라고 이해하시면 됩니다. page에서만 사용하고 버린다는 뜻이죠^^
아무튼 자바빈에서는 위에 적힌데로 하면 import와 생성이 아라서 되죠.
지저분한 코드없이 객체를 가져다 쓸수 있는겁니다.
왜? 지저분한 소스, 자바 코드를 없엘까?
솔직히 서블릿으로 직접코딩해도 페이지는 나옵니다. 구지 jsp가 없어도 화면 및 기능 다 나오죠^^;
그리고 개발자 입장에서 소스가 지저분 하던 말던 상관 없습니다 ㅡㅡ;;
하지만 서블릿 페이지로 직접코딩하면 디자인뿐만 아니라 코딩 자체도 솔직히 어렵습니다.
직접 서블릿 페이지로 코딩을 해보셨다면 아실껍니다.
전 서블릿으로 코딩하다가 jsp로 코딩하면서 감동먹었습니다 ㅠ.ㅠ
아무튼 코딩을 보다 쉽게 하기 위해 나온것이 jsp입니다.
이때 jsp가 나오면서 웹페이지 형식으로 나온것이죠.
그러면서 썬에서 주장한것이... 자바 코드없이 자바의 기능은 사용할수 있는 웹페이지라고 소개했습니다.
솔직히 웹페이지에서 java소스가 보이는것이 상당히 보안으로도 안좋고 디자인작업시 커뮤니케이션이 안좋죠...
그래서 이런 주장을 한것 같습니다.
아무튼 이때부터 jsp에서 java소스를 제거하려는 sun의 노력이 많아진거죠^^
어떻게 보면 서블릿과 자바빈은 유사하게 보이나... 실질적으로는 많이 틀립니다.
jsp페이지가 어떻게 실행이 되는지는 아시죠?
내부적으로 톰켓이 jsp를 java로 변환하고 그것을 다시 컴파일 하여 class파일로 바꿔서 실행을 시킵니다.
그렇게 되면 페이지 자체가 class가 되는겁니다.
서블릿은 자체가 java로 되어잇어 그것을 class로 컴파일 하는것이죠...
즉, 서블릿에다가 앞에 한단계를 더 붙인것이 jsp죠^^
자바빈은 jsp에서 객체를 가져오기 위한 기법이구요...
부족한것이 있다면 쪽지나 메일주세요^^
useBean사용의 의미...
useBean 이라는 것은 임의의 클래스에 값을 보내서 결과값을 리턴 받는 것을 말한다. 따라서 패키지(클래스를 모아놓은)형태의 관리가 가능하다. 패키지에 클래스를 모아놓고 거기에 값을 보낸 후 결과를 가져와서 출력할 수 있다.
* 자바 빈 - 자바빈 규약에 따르는 클래스 - JSP프로그래밍에서 데이터들은 자바빈 클래스에 담아서 값을 보여주는 것이 일반적임...
*<jsp:useBean>액션태그 [문법] <jsp:useBean id="[빈이름]" class="[자바빈 클래스명]" scope="[범위]" /> - id: JSP페이지에서 자바빈 객체에 접근할 때 사용할 이름. - class: 패키지 이름을 포함한 자바빈 클래스의 완전한 이름. - scope: 자바빈 객체가 저장될 영역을 지정. page(기본값), request, session, application중 하나.. ex) <jsp:useBean id="info" class="패키지명.클래스명" scope="request" />
해야할 작업.. WEB-INF/classes 에 패키지로된 클래스파일들을 생성한다.ROOT에 jsp파일 을 만든다. |
'Spring Boot' 카테고리의 다른 글
[IntelliJ] IntelliJ 외부 라이브러리 추가하기(SpringBoot 외부 라이브러리 추가) (1) | 2021.01.28 |
---|---|
SLF4J를 사용해야 하는 이유 (0) | 2021.01.28 |
[Spring] 스프링 빈(Bean)의 개념과 생성 원리 (0) | 2021.01.23 |
Spring Data JPA 기본키 매핑 방법 (0) | 2021.01.20 |
Controller에서 파라미터로 데이터 받는 상황 정리 (0) | 2021.01.19 |