Java/Servlet & JSP

표준 액션을 사용한 JSP

체리필터 2009. 2. 11. 15:15
728x90
반응형
"자바 빈을 이용해서 특정 객체의 값을 가져와 보여주는 소스는 아래와 같은 형식으로 jsp에서 사용할 수 있다.

<% foo.Person p = (foo.Person) request.getAttribute("person"); %>
Person is : <%= p.getName() %>

jsp내에서 스크립틀릿을 없애기 위해 나온 것이 표준 액션이므로 스크립틀릿을 없애는 방법으로 표현하자면 아래와 같이 할 수 있다.

<jsp:useBean id="person" class="foo.Person" scope="request"></jsp:useBean>
Person created by servlet : <jsp:getProperty name="person" property="name"/>

위에서 id로 지정한 것을 아래 getProperty에서 name으로 가져다 쓸 수 있다.
property의 name은 자바빈의 getter, setter에서 사용하는 값이다. 즉 name은 getName()과 같은 기능을 하게 되는 것이다.
class는 패키지 명까지 다 써야한다.

getProperty가 있다면 당연히 setProperty도 있다.
setProperty는 다음과 같이 사용할 수 있다.

<jsp:setProperty name="person" property="name" value="Fred"/>

setProperty를 useBean 안에 사용하게 되면, 새로운 빈이 만들어지는 경우에만 설정하고, 이미 있는 경우에는 설정하지 않게 된다.
즉 다음과 같이 코딩하게 되면 빈이 없을 경우에만 값을 설정하게 된다.

<jsp:useBean id="person" class="foo.Person" scope="request">
    <jsp:setProperty name="person" property="name" value="Fred"/>
</jsp:useBean>

위와 같이 코딩하게 되면 컨테이너가 자동으로 생성해 주는 _jspService() 메소드는 다음과 같은 형식을 가지게 되는 것이다.

foo.Person person = null;
person = (foo.Person) _jspx_page_context.getAttribute("person", PageContext.PAGE_SCOPE);

if(person == null) {
    person = new foo.Person();
    _jspx_page_context.setAttribute("person", person, PageContext.PAGE_SCOPE);
   
    org.apache.jasper.runtime.JspRuntimeLibrary.JspRuntimeLibrary.introspecthelper(
            _jspx_page_context.findAttribute("person"), "name", "Fred", null, null, false);
}

없다면 해당 객체를 만들어서 할당하고, 값을 추가 한다.
아래 "org.apache.jasper.runtime.JspRuntimeLibrary..." 부분은 컨테이너가 자동으로 생성하는 코드이므로 어떤 식으로 처리되는지 자세히 알 필요는 없다.

* 다형성 사용하기

빈 참조에 대해서도 다형성 기법을 사용할 수 있다.
가령 foo.Person이 추상 객체이고 Employee객체가 이를 상속 받았다면 아래와 같은 형식으로 쓸 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee" scope="page"></jsp:useBean>

type에는 클래스, 추상클래스, 인스턴스 등이 들어갈 수 있으며, class에는 type에 명기한 클래스를 상속한 것이거나 구현한 클래스가 들어가야 한다.

* HTML에서 JSP로 form 전송을 바로 하기

html에서 jsp로 바로 form을 전송하게 될 경우가 있다.

<form action="TestBean.jsp">
    name : <input type="text" name="userName">
    ID# : <input type="text" name="userID">
</form>

위와 같이 하게 되면 jsp에서는 어떻게 처리해야 할까?
request.getParameter를 사용하여 setProperty의 value 속성에 넣을 수도 있겠지만 param 속성을 이용하면 더 쉽게 빈에 값을 설정할 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="name" param="userName"/>
</jsp:useBean>

html에서 userName이라고 설정을 하였다면 param에 userName이라고 넣어주게 되면 name이란 빈 프로퍼티에 값이 설정되게 된다.
param이란 속성을 이용하는 것보다 더 간단한 방법이 있다.
html에서 form element의 이름이 빈 프로퍼티의 이름과 같게 되면 자동으로 들어가게 된다.
즉 다음과 같으면 param이란 속성을 안 적어 줘도 된다.

<form action="TestBean.jsp">
    name : <input type="text" name="name">
    ID# : <input type="text" name="userID">
</form>

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="name"/>
</jsp:useBean>

만일 빈의 모든 프로퍼티와 html form 객체의 모든 이름이 같다면 더욱더 간단하게 아래와 같이 할 수 있다.

<jsp:useBean id="person" type="foo.Person" class="foo.Employee">
    <jsp:setProperty name="person" property="*" />
</jsp:useBean>






728x90
반응형

'Java > Servlet & JSP' 카테고리의 다른 글

EL 함수 사용하기  (0) 2009.02.13
EL 사용하기  (3) 2009.02.12
JSP 초기화 하기  (0) 2009.02.10
스크립틀릿에서 변수 선언하기  (0) 2009.02.04
간단한 Jsp 시작하기  (0) 2009.02.04