[JSP 5-1] useBean

임승현·2022년 12월 12일
0

JSP

목록 보기
14/20

◈ action 폴더에 usebean 폴더 생성

🐧useBean을 사용하지 않은 경우

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

→ [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(non_useBean_action.jsp)를 POST 방식으로 요청해 입력값 전달

📃non_useBean_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- useBean을 사용하지 않은 경우 --%>
<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
<%-- → [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(non_useBean_action.jsp)를 POST 방식으로 요청해 입력값 전달 --%>
<!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_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고 출력페이지(non_useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서

📢 비정상적인 요청에 대한 처리

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");

📢 VO 클래스로 객체를 생성하여 전달값으로 필드값 변경(Hewon(xyz.itwill.bean))

Hewon hewon=new Hewon();
hewon.setName(name);
hewon.setPhone(phone);
hewon.setAddress(address);

📌 Java 명령을 사용하여 현재 요청 JSP 문서가 아닌 다른 JSP 문서로 응답되도록 구현하는 방법
→ 리다이렉트 이동하여 응답하는 방법 및 포워드 이동하여 응답하는 방법
⭕방법1)
리다이렉트 이동 : 클라이언트에게 URL 주소를 전달하여 다른 JSP 문서를 요청시켜 실행결과로 응답 처리
→ 클라이언트 브라우저의 URL 주소 변경 - 클라이언트를 이용하여 JSP 문서 이동
→ session 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
→ 응답 JSP 문서에서는 session 내장객체에 저장된 속성값을 객체로 반환받은 후 반드시 제거

session.setAttribute("hewon", hewon);//session 내장객체를 이용하여 속성값 저장 - session Scope
response.sendRedirect("non_useBean_display.jsp");//리다이렉트 이동

◈ non_useBean_display.jsp 생성
⭕방법2)-action 태그없이 포워드 이동
포워드 이동 : 요청JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리
→ 클라이언트 브라우저의 URL 주소 미변경 - 서버에서 JSP 문서간의 이동
→ request 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
→ 요청 JSP 문서 및 응답 JSP 문서를 제외한 다른 JSP 문서에서는 request 내장객체의 속성값을 사용 불가능

request.setAttribute("hewon", hewon);//request 내장객체를 이용하여 속성값 저장 - request Scope

📢 포워드 이동하기 위한 Java 명령 - forward 태그와 동일한 기능 제공
📌 request.getRequestDispatcher(String url) : URL 주소가 저장된 RequestDispatcher 객체를 반환하는 메소드
📌 RequestDispatcher 객체 : 다른 웹프로그램으로 스레드를 이동하기 위한 기능을 제공하는 객체
📌 RequestDispatcher.forward(ServletRequest request, ServletResponse response) : 요청 웹프로그램에서 다른 웹프로그램으로 스레드를 이동시켜 응답처리하기 위한 메소드 - 포워드 이동
→ 요청 웹프로그램의 request 객체와 response 객체를 스레드가 이동되는 웹프로그램으로 전달

request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);

📃non_useBean_action.jsp

<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 입력페이지(non_useBean_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고 출력페이지(non_useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서 --%>
<%
	//비정상적인 요청에 대한 처리
	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");
	//
	//VO 클래스로 객체를 생성하여 전달값으로 필드값 변경(Hewon(xyz.itwill.bean))
	Hewon hewon=new Hewon();
	hewon.setName(name);
	hewon.setPhone(phone);
	hewon.setAddress(address);
	//
	//Java 명령을 사용하여 현재 요청 JSP 문서가 아닌 다른 JSP 문서로 응답되도록 구현하는 방법
	//→ 리다이렉트 이동하여 응답하는 방법 및 포워드 이동하여 응답하는 방법
	/*
	//방법1) 리다이렉트 이동 : 클라이언트에게 URL 주소를 전달하여 다른 JSP 문서를 요청시켜 실행결과로 응답 처리
	//→ 클라이언트 브라우저의 URL 주소 변경 - 클라이언트를 이용하여 JSP 문서 이동
	//→ session 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
	//→ 응답 JSP 문서에서는 session 내장객체에 저장된 속성값을 객체로 반환받은 후 반드시 제거
	session.setAttribute("hewon", hewon);//session 내장객체를 이용하여 속성값 저장 - session Scope
	response.sendRedirect("non_useBean_display.jsp");//리다이렉트 이동
	//non_useBean_display.jsp 생성
	*/
	//action 태그없이 포워드 이동
	//방법2) 포워드 이동 : 요청JSP 문서에서 응답 JSP 문서로 스레드를 이동하여 응답 처리
	//→ 클라이언트 브라우저의 URL 주소 미변경 - 서버에서 JSP 문서간의 이동
	//→ request 내장객체를 이용하여 객체를 속성값으로 저장하여 응답 JSP 문서에서 반환받아 사용 가능
	//→ 요청 JSP 문서 및 응답 JSP 문서를 제외한 다른 JSP 문서에서는 request 내장객체의 속성값을 사용 불가능 
	request.setAttribute("hewon", hewon);//request 내장객체를 이용하여 속성값 저장 - request Scope
	//포워드 이동하기 위한 Java 명령 - forward 태그와 동일한 기능 제공
	//request.getRequestDispatcher(String url) : URL 주소가 저장된 RequestDispatcher 객체를 반환하는 메소드
	//RequestDispatcher 객체 : 다른 웹프로그램으로 스레드를 이동하기 위한 기능을 제공하는 객체
	//RequestDispatcher.forward(ServletRequest request, ServletResponse response) : 요청 웹프로그램에서 다른 웹프로그램으로 스레드를 이동시켜 응답처리하기 위한 메소드 - 포워드 이동
	//→ 요청 웹프로그램의 request 객체와 response 객체를 스레드가 이동되는 웹프로그램으로 전달
	request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
%>

📃Hewon.java

package xyz.itwill.bean;
//
//회원정보를 저장하기 위한 클래스 - VO 클래스
public class Hewon {
	private String name;
	private String phone;
	private String address;
	//
	public Hewon() {
		// TODO Auto-generated constructor stub
	}
	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;
	}	
}

🎨처리페이지(non_useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하는 JSP 문서

📃non_useBean_display.jsp

<%@page import="xyz.itwill.bean.Hewon"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 처리페이지(non_useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하는 JSP 문서 --%>
<!DOCTYPE html>
<%--리다이렉트를 이용한 방법
<%
	//비정상적인 요청에 대한 처리
	if(session.getAttribute("hewon")==null) {//session 내장객체에 저장된 속성값이 없는 경우
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
	//session 내장객체에 저장된 속성값을 반환받아 저장
	Hewon hewon=(Hewon)session.getAttribute("hewon");
	//
	//다른 JSP 문서에서 session 내장객체에 저장된 속성값을 사용하지 못하도록 속성값 제거
	session.removeAttribute("hewon");
%>
--%>
<%-- 포워드를 이용한 방법 --%>
<%
	//비정상적인 요청에 대한 처리
	if(session.getAttribute("hewon")==null) {//session 내장객체에 저장된 속성값이 없는 경우
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
	//session 내장객체에 저장된 속성값을 반환받아 저장
	Hewon hewon=(Hewon)session.getAttribute("hewon");
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>회원정보확인</h1>
	<hr>
	<p>이름 = <%=hewon.getName() %></p>
	<p>전화번호 = <%=hewon.getPhone() %></p>
	<p>주소 = <%=hewon.getAddress() %></p>
</body>
</html>

🐧useBean을 사용한 경우

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

→ [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(useBean_action.jsp)를 POST 방식으로 요청해 입력값 전달

📃useBean_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- useBean을 사용한 경우 --%>
<%-- 사용자로부터 회원정보를 입력받기 위한 JSP 문서 --%>
<%-- → [입력완료]를 클릭한 경우 form 태그를 실행하여 처리페이지(useBean_action.jsp)를 POST 방식으로 요청해 입력값 전달 --%>
<!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_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고 출력페이지(useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서

📢 비정상적인 요청에 대한 처리

if(request.getMethod().equals("GET")) {
	response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
	return;
}

📢 POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경(안하면 한글이 깨짐)

request.setCharacterEncoding("utf-8");

📌 useBean ActionTag : JSP 문서에 객체를 제공하기 위한 태그
형식) <jsp:useBean id="식별자" class="클래스" scope="사용범위"/>
→ 내장객체에 저장된 속성값을 객체로 반환받아 제공하거나 속성값이 없으면 객체를 생성하여 내장객체의 속성값으로 저장 후 제공
🌠 id 속성(필수) : useBean 태그로 제공된 객체를 구분하기 위한 식별자를 속성값으로 설정
→ 내장객체에 저장된 속성값을 구분하기 위한 속성명을 표현하여 속성값을 제공받아 사용
🌠 class 속성(필수) : useBean 태그로 제공될 객체의 자료형을 속성값으로 설정
🌠 scope 속성(선택) : useBean 태그로 제공될 객체의 사용범위를 속성값으로 설정
→ page,request, session, application 중 하나를 속성값으로 설정
→ scope 속성이 생략된 경우 page 속성값을 기본값으로 설정하여 사용

<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>

↑위에랑 같은 명령어(non_useBean_action.jsp)

Hewon hewon=new Hewon();
request.setAttribute("hewon", hewon);

📌 setProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그
→ 객체 필드의 Setter 메소드를 호출하여 객체의 필드값 변경
형식) <jsp:setProperty name="식별자" property="필드명" value="값"/>
🌠 name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정
🌠 property 속성(필수) : 값을 변경할 필드명을 속성값으로 설정
→ 필드명을 기반으로 작성된 Setter 메소드 자동 호출 - 필드명으로 작성된 Setter 메소드가 없을 경우 에러 발생
🌠 value 속성(선택) : 필드에 저장될 변경값을 속성값으로 설정
→ value 속성을 생략하면 JSP 문서 요청시 전달된 값을 반환받아 필드값 변경

<%--<jsp:setProperty name="hewon" property="name" value="홍길동"/>--%>

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

<%--<jsp:setProperty name="hewon" property="name"/>--%>
<%--<jsp:setProperty name="hewon" property="phone"/>--%>
<%--<jsp:setProperty name="hewon" property="address"/>--%>

📌 property 속성값을 [*]로 설정한 경우 모든 전달값을 반환받아 객체의 필드값 변경
→ 전달값의 이름과 필드명이 동일한 경우에만 전달값을 반환받아 필드값 변경

<jsp:setProperty name="hewon" property="*"/>

↑위에랑 같은 명령어

hewon.setName(requset.getParameter("name")); 
hewon.setPhone(requset.getParameter("phone")); 
hewon.setAddress(requset.getParameter("address"));
<jsp:forward page="useBean_display.jsp"/>

↑위에랑 같은 명령어

request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);

📃useBean_action.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 입력페이지(useBean_form.jsp)에서 전달된 값을 반환받아 내장객체의 속성값으로 저장하고 출력페이지(useBean_display.jsp)로 포워드 이동 처리하는 JSP 문서 --%>
<%
	//비정상적인 요청에 대한 처리
	if(request.getMethod().equals("GET")) {
		response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED);
		return;
	}
	//POST 방식으로 요청하여 전달된 값에 대한 캐릭터셋 변경(안하면 한글이 깨짐)
	request.setCharacterEncoding("utf-8");
%>
<%-- useBean ActionTag : JSP 문서에 객체를 제공하기 위한 태그 --%>
<%--형식) <jsp:useBean id="식별자" class="클래스" scope="사용범위"/>--%>
<%-- → 내장객체에 저장된 속성값을 객체로 반환받아 제공하거나 속성값이 없으면 객체를 생성하여 내장객체의 속성값으로 저장 후 제공 --%>
<%-- id 속성(필수) : useBean 태그로 제공된 객체를 구분하기 위한 식별자를 속성값으로 설정 --%>
<%-- → 내장객체에 저장된 속성값을 구분하기 위한 속성명을 표현하여 속성값을 제공받아 사용 --%>
<%-- class 속성(필수) : useBean 태그로 제공될 객체의 자료형을 속성값으로 설정 --%>
<%-- scope 속성(선택) : useBean 태그로 제공될 객체의 사용범위를 속성값으로 설정 --%>
<%-- → page,request, session, application 중 하나를 속성값으로 설정 --%>
<%-- → scope 속성이 생략된 경우 page 속성값을 기본값으로 설정하여 사용 --%>
<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
<%--↑위에랑 같은 명령어(non_useBean_action.jsp)
	Hewon hewon=new Hewon();
	request.setAttribute("hewon", hewon);
--%>
<%--/////////////////////////////////////////////////////////////// --%>
<%-- setProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그 --%>
<%-- → 객체 필드의 Setter 메소드를 호출하여 객체의 필드값 변경 --%>
<%-- 형식) <jsp:setProperty name="식별자" property="필드명" value=""/> --%>
<%-- name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정 --%>
<%-- property 속성(필수) : 값을 변경할 필드명을 속성값으로 설정 --%>
<%-- → 필드명을 기반으로 작성된 Setter 메소드 자동 호출 - 필드명으로 작성된 Setter 메소드가 없을 경우 에러 발생 --%>
<%-- value 속성(선택) : 필드에 저장될 변경값을 속성값으로 설정 --%>
<%-- value 속성을 생략하면 JSP 문서 요청시 전달된 값을 반환받아 필드값 변경 --%>
<%--<jsp:setProperty name="hewon" property="name" value="홍길동"/>--%>
<%-- hewon.setName("홍길동"); --%>
<%-- --%>
<%-- 주의) JSP 문서 요청시 전달된 값의 이름과 setProperty 태그의 property 속성값(객체의 필드명)이 반드시 동일해야한 전달값을 반환받아 필드값으로 변경 가능 --%>
<%--
<jsp:setProperty name="hewon" property="name"/>
<jsp:setProperty name="hewon" property="phone"/>
<jsp:setProperty name="hewon" property="address"/>
--%>
<%-- property 속성값을 [*]로 설정한 경우 모든 전달값을 반환받아 객체의 필드값 변경 --%>
<%-- → 전달값의 이름과 필드명이 동일한 경우에만 전달값을 반환받아 필드값 변경 --%>
<jsp:setProperty name="hewon" property="*"/>
  <%-- ↑위에랑 같은 명령어
  	hewon.setName(requset.getParameter("name")); 
  	hewon.setPhone(requset.getParameter("phone")); 
  	hewon.setAddress(requset.getParameter("address")); 
  --%>
<%--/////////////////////////////////////////////////////////////// --%>
<jsp:forward page="useBean_display.jsp"/>
<%--↑위에랑 같은 명령어
request.getRequestDispatcher("non_useBean_display.jsp").forward(request, response);
--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
```

🎨처리페이지(useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하는 JSP 문서

📢 useBean 태그를 사용하여 request 내장객체에 저장된 속성값을 객체로 반환받아 저장

<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>

↑위에랑 같은 명령어(non_useBean_display.jsp)

Hewon hewon=(Hewon)session.getAttribute("hewon");

📌 getProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 반환받기 위한 태그
→ 객체 필드의 Getter 메소드를 호출하여 객체의 필드값을 반환받아 사용
형식)<jsp:getProperty name="식별자" property="필드명"/>
🌠 name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정
🌠 property 속성(필수) : 값을 반환할 필드명을 속성값으로 설정
→ 필드명을 기반으로 작성된 Getter 메소드 자동 호출 - 필드명으로 작성된 Getter 메소드가 없는 경우 에러 발생

<p>이름 = <jsp:getProperty name="hewon" property="name"/></p>
<p>전화번호 = <jsp:getProperty name="hewon" property="phone"/></p>
<p>주소 = <jsp:getProperty name="hewon" property="address"/></p>

📃useBean_display.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%-- 처리페이지(useBean_action.jsp)의 내장객체에 저장된 속성값을 반환받아 클라이언트에게 전달하는 JSP 문서 --%>
<!DOCTYPE html>
<%
	//비정상적인 요청에 대한 처리
	if(session.getAttribute("hewon")==null) {//session 내장객체에 저장된 속성값이 없는 경우
		response.sendError(HttpServletResponse.SC_BAD_REQUEST);
		return;
	}
%>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>회원정보확인</h1>
	<hr>
	<%-- useBean 태그를 사용하여 request 내장객체에 저장된 속성값을 객체로 반환받아 저장 --%>
	<jsp:useBean id="hewon" class="xyz.itwill.bean.Hewon" scope="request"/>
	<%--↑위에랑 같은 명령어(non_useBean_display.jsp) --%>
	<%-- Hewon hewon=(Hewon)session.getAttribute("hewon"); --%>
	<%--/////////////////////////////////////////////////////////////// --%>
	<%-- getProperty ActionTag : useBean 태그로 제공된 객체의 필드값을 반환받기 위한 태그 --%>
	<%-- → 객체 필드의 Getter 메소드를 호출하여 객체의 필드값을 반환받아 사용 --%>
	<%-- 형식)<jsp:getProperty name="식별자" property="필드명"/> --%>
	<%-- name 속성(필수) : useBean 태그로 제공된 객체의 식별자(id 속성값)를 속성값으로 설정 --%>
	<%-- property 속성(필수) : 값을 반환할 필드명을 속성값으로 설정 --%>
	<%-- → 필드명을 기반으로 작성된 Getter 메소드 자동 호출 - 필드명으로 작성된 Getter 메소드가 없는 경우 에러 발생 --%>
	<p>이름 = <jsp:getProperty name="hewon" property="name"/></p>
	<p>전화번호 = <jsp:getProperty name="hewon" property="phone"/></p>
	<p>주소 = <jsp:getProperty name="hewon" property="address"/></p>
</body>
</html>

0개의 댓글