본문 바로가기

학원/복기

[JSP] 자바빈(JavaBean) / useBean 태그

Hewon 클래스 생성

 

JavaBean

클래스로 생성된 모든 Java 객체를 JavaBean이라고 부르지만,

웹프로그램에서는 명령 실행에 필요한 값을  저장하기 위한 클래스로 생성된 객체를 JavaBean 이라고 부른다.


예제)

 

회원정보를 저장하기 위한 클래스 Hewon.java 

package xyz.garu.bean;

//회원정보를 저장하기 위한 클래스 - JavaBean 클래스 >> VO 클래스, DTO 클래스 
public class Hewon {
	private String name;
	private String phone;
	private String address;
	
	public Hewon() {
		
	}

	public Hewon(String name, String phone, String address) {
		super();
		this.name = name;
		this.phone = phone;
		this.address = address;
	}

	public String getName() {
		return name;
	}

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

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}
	
}

 


1. useBean 사용하지 않는 방법

non_useBean_form.jsp 생성

 

[non_useBean_form]

 

사용자로부터 회원정보를 입력받기 위한 JSP 문서

→ [회원등록] 태그를 클릭한 경우 [non_useBean_action.jsp] 문서를 요청하여 이동 - 입력값(회원정보) 전달 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보등록</h1>
	<hr>
	<form action="non_useBean_action.jsp" method="post">
		<table>
			<tr>
				<td>이름</td>
				<td><input type="text" name="name"></td>
			</tr>
			<tr>
				<td>전화번호</td>
				<td><input type="text" name="phone"></td>
			</tr>
			<tr>
				<td>주소</td>
				<td><input type="text" name="address"></td>
			</tr>
			<tr>
				<td colspan="2"><button type="submit">회원등록</button></td>
			</tr>
		</table>
	</form>
</body>
</html>

 

 

[non_useBean_action.jsp]

 

회원정보를 전달받아 내장객체의 속성값으로 저장하고 [non_useBean_display.jsp] 문서로 포워드 이동하는 JSP 문서

(클라이언트 요청에 대한 처리만 제공하는 JSP 문서)

 

 

1-1) 리다이렉트 이동 

 

리다이렉트 이동 : 클라이언트에게 URL 주소를 전달하여 URL 주소의 JSP 문서를 요청하여 실행결과를 응답받아 출력
→ 클라이언트의 요청 URL 주소 변경 - 클라이언트를 이용하여 JSP 문서를 이동한다. 
→ session 내장객체에 속성값을 저장하여 리다이렉트 이동되는 JSP 문서에서 반환받아 사용한다. 
→ 리다이렉트 이동되는 JSP 문서에서 session 내장객체에 속성값을 반환받은 후 반드시 제거해야한다. 

<%@page import="xyz.garu.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	//JSP 문서를 GET 방식으로 요청한 경우 - 비정상적인 요청
	if(request.getMethod().equals("GET")) {
		response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
		return;
	}

	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
	request.setCharacterEncoding("utf-8");
	
	//전달값(회원정보)을 반환받아 저장
	String name=request.getParameter("name");
	String phone=request.getParameter("phone");
	String address=request.getParameter("address");
	
	//JavaBean 클래스로 객체를 생성하여 전달값으로 필드값 변경
	Hewon hewon=new Hewon();
	hewon.setName(name);
	hewon.setPhone(phone);
	hewon.setAddress(address);
	
	//JavaBean(객체)를 session 내장객체의 속성값으로 저장
	session.setAttribute("hewon", hewon);
	
	//리다이렉트 이동
	response.sendRedirect("non_useBean_display.jsp");
%>

 

 

[non_useBean_display.jsp]

 

내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 

<%@page import="xyz.garu.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
	//내장객체에 저장된 속성값이 없는 경우 - 비정상적인 요청
	if(session.getAttribute("hewon")==null) {
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}

	//내장객체에 저장된 속성값을 반환받아 저장
	Hewon hewon=(Hewon)session.getAttribute("hewon");
	
	//JSP 문서에서 내장객체에 저장된 속성값을 사용하지 못하도록 삭제
	session.removeAttribute("hewon");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보확인</h1>
	<hr>
	<p>이름 = <%=hewon.getName() %></p>
	<p>전화번호 = <%=hewon.getPhone() %></p>
	<p>주소 = <%=hewon.getAddress() %></p>
</body>
</html>

 

 

1-2) 포워드 이동 

 

포워드 이동 : 요청 JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리한다.
→ 클라이언트의 요청 URL 주소 미변경 - 서버에서 JSP 문서를 이동한다.
→ request 내장객체에 속성값을 저장하여 포워드 이동되는 JSP 문서에서 반환받아 사용한다.
→ 포워드 이동되는 JSP 문서가 종료되면 request 내장객체에 저장된 속성값도 자동으로 소멸된다.

 

request.getRequestDispatcher(String url) : 스레드를 이동하기 위한 정보를 저장한 객체인 RequestDispatcher 객체를 반환하는 메소드 
RequestDispatcher.forward(ServeltRequest request, ServletResponse response) : 포워드 이동하는 메소드

→ 매개변수에 request 객체와 response 객체를 저장하여 스레드가 이동되는 JSP 문서에 전달한다. 

 

[non_useBean_action.jsp]

<%@page import="xyz.garu.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 회원정보를 전달받아 내장객체의 속성값으로 저장하고 [non_useBean_display.jsp] 문서로
포워드 이동하는 JSP 문서 - 클라이언트 요청에 대한 처리만 제공하는 JSP 문서 --%>    
<%
	//JSP 문서를 GET 방식으로 요청한 경우 - 비정상적인 요청
	if(request.getMethod().equals("GET")) {
		response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
		return;
	}

	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
	request.setCharacterEncoding("utf-8");
	
	//전달값(회원정보)을 반환받아 저장
	String name=request.getParameter("name");
	String phone=request.getParameter("phone");
	String address=request.getParameter("address");
	
	//JavaBean 클래스로 객체를 생성하여 전달값으로 필드값 변경
	Hewon hewon=new Hewon();
	hewon.setName(name);
	hewon.setPhone(phone);
	hewon.setAddress(address);
	
    
	//JavaBean(객체)를 request 내장객체의 속성값으로 저장
	// => 스레드가 이동되는 JSP 문서에게만 속성값을 제공할 수 있다. 
	request.setAttribute("hewon", hewon);
	
	//forward 태그 대신 Java 명령을 사용하여 포워드 이동이 가능하다. 
	request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
	
%>

 

[non_useBean_display.jsp]

<%@page import="xyz.garu.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
	//내장객체에 저장된 속성값이 없는 경우 - 비정상적인 요청
	if(request.getAttribute("hewon")==null) {
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	} 

	//내장객체에 저장된 속성값을 반환받아 저장
	Hewon hewon=(Hewon)request.getAttribute("hewon");
	
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보확인</h1>
	<hr>
	<p>이름 = <%=hewon.getName() %></p>
	<p>전화번호 = <%=hewon.getPhone() %></p>
	<p>주소 = <%=hewon.getAddress() %></p>
</body>
</html>

 


2. useBean 사용하는 방법 

 

useBean Tag  : JSP 문서에 Java 객체(JavaBean)를 제공하기 위한 태그

→  내장객체에 저장된 속성값을 객체로 반환받아 제공하거나 속성값이 없는 경우 객체를 생성하여 내장객체의 속성값으로 저장하여 제공한다. 

 

형식)

<jsp:useBean id="식별자" class="JavaBean 클래스" scope="사용범위"/>

 

id 속성 : useBean 태그로 제공되는 객체를 구분하기 위한 식별자를 속성값으로 설정

→ 내장객체에 저장된 속성값에 대한 속성명으로 사용된다.

 

class 속성 : useBean 태그로 제공되는 객체의 자료형을 속성값으로 설정 

 

scope 속성 :  useBean 태그로 제공되는 객체의 사용범위(Scope)를 속성값으로 설정

→ page, request, session, application 중 하나를 속성값으로 설정한다.

→ scope 속성을 생략한 경우 [page] 속성값을 기본값으로 설정하여 사용한다.

 


 

setProperty Tag : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그 

→ 객체의 필드에 대한 Setter 메소드를 호출하여 객체의 필드값 변경 

 

형식)

<jsp:setProperty name="식별자" property="필드명" value="변경값"/>

 

name 속성 : useBean 태그로 제공된 객체의 식별자(id 속성값)을 속성값으로 설정 

 

property 속성 : 값을 변경할 필드명을 속성값으로 설정

→ 필드명을 기반으로 작성된 Setter 메소드를 자동으로 호출한다. (주의:필드명으로 작성된 Setter 메소드가 없는 경우 에러가 발생한다.)

value 속성 : 필드에 저장될 변경값을 속성값으로 설정 (생략 가능)

 

→ value 속성을 생략하면 JSP 문서 요청시 전달된 값을 반환받아 필드값으로 변경한다.

     주의) JSP 문서 요청시 전달된 값의 이름과 setProperty 태그의 property 속성값 (객체 필드명)이 반드시 동일해야만 전       달값을 반환받아 객체 필드 값으로 변경할 수 있다. 

 

getProperty Tag : useBean 태그로 제공된 객체의 필드값을 반환하기 위한 태그 

→  객체의 필드에 대한 Getter 메소드를 호출하여 객체의 필드값 반환 


형식)

<jsp:getProperty name="식별자" property="필드명"/>


name 속성 : useBean 태그로 제공된 객체의 식별자(id 속성값)을 속성값으로 설정 


property 속성 : 값을 변경할 필드명을 속성값으로 설정
→ 필드명을 기반으로 작성된 Getter 메소드 자동 호출 - 필드명으로 작성된 Getter 메소드가 없는 경우 에러 발생 

 

    


예시)

 

 

[useBean_form.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
<%-- => [회원등록] 태그를 클릭한 경우 [useBean_action.jsp] 문서를 요청하여 이동 - 입력값(회원정보) 전달 --%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보등록</h1>
	<hr>
	<form action="useBean_action.jsp" method="post">
	<table>
		<tr>
			<td>이름</td>
			<td><input type="text" name="name"></td>
		</tr>
		<tr>
			<td>전화번호</td>
			<td><input type="text" name="phone"></td>
		</tr>
		<tr>
			<td>주소</td>
			<td><input type="text" name="address"></td>
		</tr>
		<tr>
			<td colspan="2"><button type="submit">회원등록</button></td>
		</tr>
	</table>
	</form>
</body>
</html>

 

[useBean_action.jsp]

<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 회원정보를 전달받아 내장객체의 속성값으로 저장하고 [useBean_display.jsp] 문서로
포워드 이동하는 JSP 문서 - 클라이언트 요청에 대한 처리만 제공하는 JSP 문서 --%>    
<%
	//JSP 문서를 GET 방식으로 요청한 경우 - 비정상적인 요청
	if(request.getMethod().equals("GET")) {
		response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
		return;
	}

	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경
	request.setCharacterEncoding("utf-8");
%>
<%-- useBean 태그 --%>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>

<%-- 
	//useBean 태그와 동일한 명령 
	Hewon hewon=new Hewon();
	request.setAttribute("hewon", hewon);
--%>

<%-- setProperty 태그 --%>
<%-- value 속성을 생략하면 JSP 문서 요청시 전달된 값을 반환받아 필드값으로 변경 --%>
<%-- <jsp:setProperty name="hewon" property="name" value="홍길동"/>  --%>
<jsp:setProperty name="hewon" property="name"/>
<jsp:setProperty name="hewon" property="phone"/>
<jsp:setProperty name="hewon" property="address"/>
<%-- setProperty 태그의 property 속성값을 [*]로 설정한 경우 모든 전달값을 반환받아 필드값을 변경할 수 있다. --%>
<jsp:setProperty name="hewon" property="*"/>
<%--
	//setProperty 태그와 동일한 명령 
	hewon.setName(request.getParameter("name"));
	hewon.setPhone(request.getParameter("phone"));
	hewon.setAddress(request.getParameter("address"));
--%>


<%-- forward 태그 --%>
<jsp:forward page ="useBean_display.jsp"/>
<%--
	//forward 태그와 동일한 명령 
	request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
 --%>

 

[useBean_display.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하여 응답하는 JSP 문서 --%>
<%
	//내장객체에 저장된 속성값이 없는 경우 - 비정상적인 요청
	if(request.getAttribute("hewon")==null) {
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	} 
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보확인</h1>
	<hr>
	<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
	<%--
		Hewon hewon=(Hewon)request.getAttribute("hewon");
	--%>

	<%-- getProperty 태그 --%>
	<p>이름 = <jsp:getProperty name="hewon" property="name"/></p>
	<p>전화번호 = <jsp:getProperty name="hewon" property="phone"/></p>
	<p>주소 = <jsp:getProperty name="hewon" property="address"/></p>
	<%-- 
		<p>이름 = <%=hewon.getName() %></p>
		<p>전화번호 = <%=hewon.getPhone() %></p>
		<p>주소 = <%=hewon.getAddress() %></p>
	--%>
</body> 
</html>