강좌
클라우드/리눅스에 관한 강좌입니다.
프로그램 분류

useBean

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

icon01.gif title33.gif

2000-12-20 kenu


JSP의 장점은 디자인과 프로그램 양쪽이 다 자신에 충실할 수 있다는 것입니다.
소스코드에 스크립트(Scriptlet 이라고 합니다.)를 줄일 수 있기 때문입니다. scriptlet을줄이는 법은 빈(bean)을 사용하는 것입니다. Bean은 java 소스를 컴파일한 class 파일을 지칭합니다. 즉 자바와 연결하는 것이죠. 이 연결이 어렵지 않다는 것입니다. 하긴 아직 저도 익숙하진 않습니다. 서블릿 제작능력을 키워야 합니다. 자바를 잘 알아야한다는 뜻이죠. 지레 겁먹지는 마십시오. 어려운 것은 아니니까요. 낯선 것뿐이죠.

Bean의 위치는 root/WEB-INF/classes/ 디렉토리가 기본입니다. 물리적 위치이죠. 웹에서의 경로는 localhost/servlet/ 입니다. 서블릿과 같은 위치이죠. 저의 경우는 이렇게 됩니다. c:/jsphome/WEB-INF/classes 와 http://localhost/servlet/ 입니다.

Bean을 만들어 보겠습니다. 음~ 에디터를 이용하면 됩니다.

소스를 빌려오겠습니다. 오늘 아내가 책을 구해줘서리... ^^ (about JSP 영진꺼죠.; 오타 많네엽 헐~)

HelloBean.java

package bean;

public class HelloBean
{
private String name;

public HelloBean()
{
this.name = "World";
}

public void setName(String n)
{
this.name = n;
}

public String getName()
{
return this.name;
}
}

이 소스를 HelloBean.java 라는 이름으로 저장을 합니다. c:/jsphome/WEB-INF/classes/bean 디렉토리에 있어야 합니다.

bean01_01.gif

물론 javac 이 제대로 실행되려면 path jdk1.3in 이 잡혀있어야 합니다. jdk가 설치되어있어야 된다는 말씀이죠. 엉? HelloBean.class 는 모냐구요? 자기가 알아서 생깁니다. HelloBean.java만 제자리 있으면 됩니다.

자 브라우저에 Http://localhost/hello.jsp 를 입력해보세요. 헉. 소스가 없다구요. 잠깐만요... 여기~ 소스!

hello.jsp

<jsp:useBean id="hbean" class="bean.HelloBean" />
<html>
<head>Hello</head>
<body>
html 입니다.
<hr>
<jsp:setProperty name="hbean" property="name" param="name"/>
Hello <jsp:getProperty name="hbean" property="name" /> !
<br> 이름은 jsp를 통해서 나온 것이죠.
</body>
</html>

이 hello.jsp 파일은 c:/jsphome/ 에 놓으시면 됩니다. 소스를 copy & paste 하신 분들은 짐작을 못하셨겠지만, 또이또이 하신 분들은 발견한 점이 있을 것입니다. bean(HelloBean.java) 의 위치와 bean 소스에 있는 package 이름과 hello.jsp 소스의 useBean 태그 안에 있는 class 값이 공통부분이 있다는 것입니다.

<jsp:useBean />태그의 id 속성은 jsp 파일 내에서의 bean의 이름입니다. <jsp:setPropery />와 <jsp:getProperty /> 태그의 name 속성에서 이용하게 되는 것이죠. 이 id 속성을 달리하면 여러 개의 bean을 동시에 사용할 수 있죠.

그럼 같은 빈을 다르게 이름(id)을 주면 어떻게 되냐구요? 좋은 질문입니다. 또이또이한 학생이군요. 컥... 저 선생아닌데... 정답은 각각 다르게 행동한다 입니다. 실습은 이따가 할께요. 아직 그전에 집고 넘어갈게 있으니까요.

<jsp:setProperty /> 태그 보이죠? bean에 값을 set 해주는 것입니다. property="name" 이라는 부분과 HelloBean.java 의 public void setName(String n){this.name = n;} 부분과 관계있습니다. 관례라고 할까요? property의 name 값과 setName 의 대문자로 시작하는 Name 이 같은 것입니다. 즉 bean에서의 set 처리부분의 메소드 이름에는 jsp 의 setProperty 의 property 값을 첫글자를 대문자로 시작하고 앞에 set을 붙여서 사용한다는 뜻이죠. 반대로 예를 들면 bean 의 setName() 에서 set을 뺀 name (소문자로 시작)이 jsp의 <jsp:setProperty /> 태그의 property 값으로 쓰인다는 것입니다. 여기서 주어진 값이 bean에 입력이 됩니다.

그럼 눈치 까셨죠. <jsp:getProperty /> 는 반대의 역할을 합니다.

HelloBean.java 의 public void setName(String n) 앞에 있는 void 는 반환하는 값이 없다는 뜻입니다. 대신 String 값을 받아온다는 뜻이죠. HelloBean.java 는 전형적인 자바 소스입니다. java책도 한권 준비해 두심이... 안 그럼 jsp 진도를 못나가요... 헥헥...
public String getName() 에서는 String 값을 return 한다는 뜻이죠. 메소드 안에서의 수행되는 문장을 보시면 쉽게 이해갈 것입니다.

브라우저에

http://localhost/hello.jsp?name=Na

라고 입력해보세요. shift 누른 상태에서 Reload 하시는 것이 좋을 것입니다. 그럼 Hello Na! 라고 나오죠. 여기서 우리가 알 수 있는 것은 <jsp:setProperty /> 태그에서 param="name" 의 역할을 할 수 있습니다. 이것은 HttpHeader 부분을 통해서 전해지는 name의 값을 value로 전달받아온다는 뜻입니다. 즉 form 태그를 통해서 전달되거나, 지금 본 것과 같이 URL을 통해서 보내지는 값을 받아오는 것입니다. 음~ 재미없나?

다시 hello.jsp 문으로 돌아옵니다. <jsp:setProperty />태그 안에 value="Kenu" 라는 부분을 집어넣어보세요. 그리고 시프트를 꾹 누른상태에서 페이지 리로딩을 해보세요. Hello Kenu! 라고 나타날 것입니다.

이 정도면 눈치 많이 깠을 것입니다. 아까 했던 문제 같이 풀어보죠. 이 예제면 충분할 것입니다. hello2.jsp 입니다.

hello2.jsp

<jsp:useBean id="hbean1" class="bean.HelloBean" />
<jsp:useBean id="hbean2" class="bean.HelloBean" />
<html>
<head>Hello</head>
<body>
html 입니다.
<hr>
<jsp:setProperty name="hbean1" property="name" value="Kenu"/>
Hello <jsp:getProperty name="hbean1" property="name" /> !
<hr>
<jsp:setProperty name="hbean2" property="name" value="Dalnim"/>
Hello <jsp:getProperty name="hbean1" property="name" /> !<br>
Hello <jsp:getProperty name="hbean2" property="name" /> !
<br> 이름은 jsp를 통해서 나온 것이죠.
</body>
</html>

흐흐 제 말이 맞죠? 한가지 더 package 줄을 빼고, HelloBean.java 파일을 classes 폴더에 넣으니까 tomcat에선 돌아갔는데, Resin 에서는 안도네요. 빡돌게... 그런데 곰곰이 생각해보니 package를 사용하는 쪽이 더 나을 것 같네요. 그리고, HelloBean.java 도 Resin은 컴파일이 그냥 되네요. 그런데 옵션이 있어요. resin.conf 에서 <classpath >태그를 찾으시면 compile="true" 라고 되어있을 겁니다. 이건 개발이 다 끝나서 Bean을 손댈 일이 없을 때 false로 바꿔 놓으시면 좋겠네요. ^^ 헐~ 아직 잘 모르겠어요. 하지만 이 옵션이 HelloBean.java 컴파일하는데 영향을 주는 것은 확실하네엽.

다음강좌는 Bean 에 대해서 더 고급스럽게 알아보겠습니다. 수고하셨어요. 긴글 읽어주셔서리...

참고 : about JSP, 영진꺼. 3장

kenu: heogn@shinbiro.com
http://okjsp.pe.kr


관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,037 명
  • 현재 강좌수 :  35,807 개
  • 현재 접속자 :  138 명