JSP

JSP <jsp:useBean>

요리하다그만둠 2022. 7. 14. 12:18
  • 자바빈(JavaBeans)
  • <jsp:useBean> 액션 태그
    -<jsp:getProperty>
    -<jsp:setProperty>
  • 프로퍼티 타입에 따른 값 매핑

<jsp:useBean>  태그의 

  • JSP에서 자바빈 객체를 생성할 때 사용
  • 구문
    -<jsp:useBean id="[빈이름]" class ="[자바빈클래스이름]" scope="[범위]" /> 의 각 속성들
    - id : JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름
    - class : 패키지 이름을 포함한 자바빈 클래스의 완전한 이름
    - scope : 자바빈 객체가 저장될 영역을 지정합니다. page, request, session,application중 하나의 값으로 갖습니다.
                   기본값은 page 입니다.

-Ex)

<jsp:useBean id="info" class="chap11.member,MemberInfo" scope="request" />
<%= info.getName() %>

위 코드는 MemberInfo 클래스의 객체를 생성해서 이름이 info인 변수에 할당합니다. 그리고 request 기본 객체의 "info"속성의 값으로 생성된 객체를 저장합니다. 즉 

MemberInfo info = new MemberInfo();
request.setAttribute("info", info);

이거와 비슷한 코드가 실행됩니다.

 

<jsp:useBean> 액션 태그는 지정한 영역에 이미 id 속성에서 지정한 이림의 속성값이 존재하면, 객체를 새로 생성하지 않고  기존에 존재하는 객체를 그대로 사용합니다. 즉. 위의 <jsp:useBean> 액션 태그는 

MemberInfo info (MemberInfo)request.getAttribute("info");
if(info == null) {
	info = new MemberInfo();
    request.setAttribute("info", info);
}

이 코드와 같습니다.

 

<jsp:useBean>  액션 태그의 scope 속성값에 따라 객체는 서로 다른 기본 객체에 저장됩니다. 각 값과 관련된 기본 객체입니다.

 

 scope 속성 값에 따라 저장되는 기본 객체

- "page" - pageContext 기본 객체

- "request" - request 기본 객체

- "session" - session 기본 객체

- "application" - application 기본 객체

따라서, 

<jsp:setProperty> 액션 태그와 <jsp:getProperty> 액션 태그

 

<jsp:setProperty> 액션 태그를 사용하면 생성한 자바빈 객체의 프로퍼티 값을 변경할 수 있다.

<jsp:setProperty> 액션 태그의 구문은 다음과 같다.

<jsp:setProperty name="[자바빈]" property="이름" value="[값]" />

<jsp:setProperty> 액션 태그의 속성

  • name : 프로퍼티의 값을 변경할 자바빈 객체의 이름을 지정한다.
    <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용합니다.
  • property : 값을 지정할 프로퍼티의 이름을 지정합니다.
  • value : 프로퍼티의 값을 지정한다. 표현식(<%=값%>) 이나 EL(${값})을 사용할 수 있습니다.

예를 들어, 자바빈 객체의 name 프로퍼티의 값을 "홍길동"으로 지정하고 싶다면 

<jsp:useBean id="member" calss="chap08.member,MemberInfo"/>
<jsp:setProperty name="member" property="name" value="홍길동" />

이렇게 해주시면 됩니다.

 

value 속성 대신에 param 속성을 사용할 수도 있습니다. param 속성은 파라미터 값을 프로퍼티 값으로 지정할 때 사용됩니다.

예를 들어. memberId 파라미터 값을 자바빈 객체의 id 프로퍼티의 값으로 지정하고 싶다면 다음과 같이 param 속성을 사용해야합니다.

<jsp:setProperty name="member" property="id" param="memberid" />

( param 과 value 는 같이 사용 할 수 없습니다.)

 

프로퍼티 속성의 값을 " * " 으로 지정하면 각 프로퍼티의 값을 같은 이름을 갖는 파라미터의 값으로 설정합니다

Ex)

<jsp:useBean id="member" calss="chap08.member,MemberInfo"/>
<jsp:setProperty name="member" property="*" />

 

<jsp:getProperty> 액션 태그는 자바빈 객체의 프로퍼티 값을 출력할 때 사용 됩니다.

<jsp:getProperty name="자바빈이름" property="프로퍼티이름" />

<jsp:getProperty> 액션 태그의 속성

  • name : <jsp:useBean> 의 id 속성에서 지정한 자바빈 객체의 이름을 지정합니다.
  • property : 출력할 프로퍼티의 이름을 지정합니다.

예를 들어 자바빈 객체의 name 프로퍼티의 값을 출력하고 싶다면 이렇게 코드를 사용하면 됩니다.

<jsp:getProperty name="memberId" property="name" />

<jsp:setProperty>와 <jsp:getProperty> 액션 태그가 어떻게 사용되는지에 관한 간단한 예제입니다.

 

memberShipForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 입력 폼</title>
</head>
<body>
<form action="/chap08/processJoining.jsp" method="post" >
<table border="1" cellpadding ="0: cellspacing="0">
<tr>
	<td>아이디</td>
	<td colspan="3"><input type="text" name="id" size="10"></td>
</tr>
<tr>
	<td>이름</td>
	<td><input type="text" name="name"size="10"></td>
	<td>이메일</td>
	<td><input type="text" name="email" size="10"></td>
</tr>
<tr>
	<td colspan="4" align="center">
	<input type="submit" value="회원가입">
</tr>
</table>

</body>
</html>

실행시켜보면 이렇게 출력됩니다. 회원가입 버튼을 누르면 데이터를 post방식으로 processJoing.jsp에 전달해줍니다. 전달 받은 데이터를 MemberInfo 자바빈 클래스의 객체에 저장해서 화면에 출력해줍니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="chap08.member.MemberInfo" %>
    <%
    request.setCharacterEncoding("utf-8");
    %>
    <jsp:useBean id="memberInfo" class="chap08.member.MemberInfo" />
    <!-- MemberInfo 자바빈 클래스의 객체를 생성해서 memberInfo 라고 이름을 저장합니다. -->
    <jsp:setProperty name="memberInfo" property="*" />
    <!-- 파라미터 값을 memberInfo 자바빈 객체의 프로퍼티 값으로 저장합니다. -->
    <jsp:setProperty name="memberInfo" property="password" value="<%= memberInfo.getId() %>" />
    <!-- memberInfo 자바빈 객체의 password 프로퍼티 값을 memberInfo.getId() 와 동일하게 지정합니다
    	 08행에서  memberInfo 변수를 사용하여 id 프로퍼티에 접근하고 있습니다. -->
<!DOCTYPE html>
<html>
<head>

<title>가입</title>
</head>
<body>

	<table width="400" border ="1" cellpadding="0" cellspacing="0">
		<tr>
		<td>아이디</td>
		<td><jsp:getProperty name="memberInfo" property ="id" /></td>
		<td>암호</td>
		<td><jsp:getProperty name="memberInfo" property ="password" /></td>
		</tr>
		<tr>
		<td>이름</td>
		<td><jsp:getProperty name="memberInfo" property ="name" /></td>
		<td>이메일</td>
		<td><jsp:getProperty name="memberInfo" property ="email" /></td>
		</tr>
	</table>
</body>
</html>

위에서 값을 입력한후 회원가입 버튼을 누르면 

이런 결과 화면이 출력됩니다. 이 결과를 보면 파라미터로 전송된 데이터가 자바빈 객체의 프로퍼티의 값으로 지정된 것을 확인 가능합니다.

 

이번 예제에서 알아야 할 점은 <jsp:setProperty> 액션 태그를 사용함으로써 요청 파라미터의 값을 간단하게 자바빈 객체의 프로퍼티에 저장할 수 있다는 점 입니다.

(폴더 잘확인.. 오타 잘확인...)

(끝에 /> 에서 / 만없어도 오류가나옴 조심 못봐서 시간 많이 날려먹었습니다...)

만약 <jsp:setProperty> 액션 태그를 사용하지 않았다면 processJoining.jsp의 06행 코드를 다음과 같이 작성해야 합니다.

// <jsp:setProperty name="memberInfo" property=" * " />
memberInfo.setId(request.getParameter("id"));
memberInfo,setName(request.getParameter("name"));
memberInfo,setEmail(request.getParameter("email"));

 

프로퍼티의 타입에 따른 값 매핑