
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_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>
'학원 > 복기' 카테고리의 다른 글
[AJAX] AJAX란? / 예제 (0) | 2023.07.03 |
---|---|
[JSP] DB 연동 예제 (0) | 2023.06.26 |
[JSP] 표준 액션 태그(Standard Action Tag) - include 태그/forward 태그/param 태그 (0) | 2023.06.25 |
[JSP] 객체의 사용범위(Scope) (0) | 2023.06.25 |
[JSP] 내장객체(Implicit Object) (0) | 2023.06.23 |