JSP Bean: 액션태그
📌 1. 자바빈(Bean)이란?
📎 자반빈이란?
모듈화된 MVC에서 View가 JSP라면, Model
에 해당하는 것이 Bean
이다. 컴포넌트 즉, DTO
와 동일한 역할을 수행한다. JSP와의 연동을 위해 만들어진 자바 컴포넌트인 Bean을 통해 JSP와 클래스들간에 데이터를 쉽게 연동하고, 데이터 베이스 연동이나 View 데이터 교환에 사용된다.
📎 자반빈 사용목적
JSP 페이지가 화면 표현 부분과 로직들이 같이 존재하여 복잡한 구성을 가급적 피하고, JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로써 프로그램의 효율을 높이기 위해서 사용한다.
📎 자바빈의 설계규약
모듈화된 MVC에서 View가 JSP라면, Model
에 해당하는 것이 Bean
이다. 컴포넌트 즉, DTO
와 동일한 역할을 수행한다. JSP와의 연동을 위해 만들어진 자바 컴포넌트인 Bean을 통해 JSP와 클래스들간에 데이터를 쉽게 연동하고, 데이터 베이스 연동이나 View 데이터 교환에 사용된다.
JSP 페이지가 화면 표현 부분과 로직들이 같이 존재하여 복잡한 구성을 가급적 피하고, JSP 페이지의 로직 부분을 분리해서 코드를 재사용함으로써 프로그램의 효율을 높이기 위해서 사용한다.
👉 멤버변수마다 별도의 get/set 메소드가 존재해야 하며, 메소드명은 멤버변수와 일치해야 한다.
👉 get메소드는 파라미터가 존재하지 않아야 한다.
👉 빈즈 컴포넌트의 속성은 반드시 읽기 또는 쓰기가 가능해야 한다.
👉 생성자는 파라미터가 존재하지 않아야 한다.
👉 멤버변수의 접근제어자는 private이고, 각 getter, setter 메소드의 접근 제어자는 public, 클래스의 접근제어자는 public으로 정의한다.
📌 2. 자바빈 사용방법
📎 1) 빈 사용하기
<jsp:useBean id="빈이름" class="자바빈 클래스 이름" scope="범위"/>
<jsp:useBean id="빈이름" class="자바빈 클래스 이름" scope="범위"/>
👉 id
- JSP페이지에서 자바빈 객체에 접근할 때 사용하는 이름
👉 class
- 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력 (.을 구분자로 사용)
👉 scope
- 자바진 객체가 저장될 영역을 지정한다.
- Page, Request, Session, Application 중 하나를 지정할 수 있다.
- 아무것도 명시하지 않을 경우 기본값은 Page이다.
영역 | 설명 |
---|---|
Page | 현재 페이지의 범위에만 한정된다. 페이지 처리가 끝나면 유효하지 않다. |
Request | Request요청을 받고 처리를 완료할 때까지 생존되는 Scope이다. |
Session | 사이트 전체의 범위를 갖지만, 지속 시간 동안만 유지되는 Scope이다. |
Application | 사이트 전체의 범위를 갖고, 계속 유지될 수 있는 Scope이다. |
📎 2) 데이터 셋업
<jsp:setProperty name="자바빈" property="이름" value="값" />
👉 name
- 프로퍼티 값을 변경할 자바빈 객체의 이름
- 액션 태그의 id속성에서 지정한 값을 사용
👉 property
- 값을 지정할 프로퍼티의 이름 (*을 사용할 경우 전체값을 할당 할 수 있음)
👉 value
- 프로퍼티의 값
📎 3) 데이터 불러오기
<jsp:getProperty name="자바빈" property="이름" />
👉 데이터를 전송하는 JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>bean</title>
</head>
<body>
<form method="post" action="beanEx01_02.jsp">
<fieldset>
<legend>상품</legend>
<p>상품코드 : <input type="text" name="pdCd"></p>
<p>상품이름 : <input type="text" name="pdNm"></p>
<p>부서코드 : <input type="text" name="deptCd"></p>
<p>부서이름 : <input type="text" name="deptNm"></p>
<p>담당자이름 : <input type="text" name="mgrNm"></p>
<p><input type="submit" value="전송"></p>
</fieldset>
</form>
</body>
</html>
👉 폼 전송을 통해 데이터를 받은 JSP 파일
<%@page import="_04_bean.TesterBean"%>
<%@page import="_04_bean.ProductBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
// 1) getParameter를 사용하는 방법
String pdCd = request.getParameter("pdCd");
String pdNm = request.getParameter("pdNm");
String deptCd = request.getParameter("deptCd");
String deptNm = request.getParameter("deptNm");
String mgrNm = request.getParameter("mgrNm");
ProductBean bean1 = new ProductBean();
bean1.setPdCd(pdCd);
bean1.setPdNm(pdNm);
bean1.setDeptCd(deptCd);
bean1.setDeptNm(deptNm);
bean1.setMgrNm(mgrNm);
%>
<!-- 2) Bean을 사용하는 방법1 -->
<jsp:useBean id="bean2" class="_04_bean.ProductBean">
<jsp:setProperty name="bean2" property="pdCd" value="<%= pdCd %>"/>
<jsp:setProperty name="bean2" property="pdNm" value="<%= pdNm %>"/>
<jsp:setProperty name="bean2" property="deptCd" value="<%= deptCd %>"/>
<jsp:setProperty name="bean2" property="deptNm" value="<%= deptNm %>"/>
<jsp:setProperty name="bean2" property="mgrNm" value="<%= mgrNm %>"/>
<!-- id와 name이 같아야한다. 그래야 id와 같은 name의 내용이 id의 배열에 꽃히니까 -->
</jsp:useBean>
<!-- 3) Bean을 사용하는 방법2 -->
<jsp:useBean id="bean3" class="_04_bean.ProductBean">
<jsp:setProperty name="bean3" property="*"/>
</jsp:useBean>
<!-- 1) 2) 3) 모두 같은 결과치를 가져온다. -->
<!-- 간단한 테스트 -->
<%
TesterBean obj = new TesterBean();
obj.showData(bean1);
obj.showData(bean2);
obj.showData(bean3);
%>
<!-- 간단한 테스트 -->
bean1 : <%= bean1.getPdNm() %> <hr>
bean2 : <%= bean2.getPdNm() %> , <jsp:getProperty property="pdNm" name="bean2"/><hr>
bean3 : <%= bean3.getPdNm() %> , <jsp:getProperty property="pdNm" name="bean3"/>
</body>
</html>
📌 3. 액션 태그
📎 액션태그란?
JSP 페이지 내에서 어떤 동작을 하도록 지시하는 태그이다.
📎 액션태그 종류
JSP 페이지 내에서 어떤 동작을 하도록 지시하는 태그이다.
액션태그 | 설명 |
---|---|
<jsp:inclue> | 페이지 모듈화에 사용 |
<jsp:forward> | 다른 페이지로 제어를 이동시킬 때 사용 |
<jsp:param> | 다른 페이지에 값을 전달할 떄 사용 |
<jsp:useBean> | java bean을 jsp페이지에서 참조할 때 사용 |
<jsp:setProperty> | java bean의 property에 값을 저장할 때 사용 |
<jsp:getProperty> | java bean의 property의 값을 읽을 때 사용 |
📌 3. 액션 태그: <jsp:forward>
📎 Forward란?
사용자의 상황에 따라 다른 문서로 이동시키기 위한 액션태그이다.
📎 Forward 액션태그 특징
사용자의 상황에 따라 다른 문서로 이동시키기 위한 액션태그이다.
👉 param액션 태그를 통해 데이터를 전달할 수 있다.
👉 jsp 페이지 내에서 forward 액션 태그를 만나면 그전까지 출력 버퍼에 저장되어 있던 내용을 제거한 후 지정 페이지로 이동한다.
👉 데이터를 공유하면서 페이지르 이동하기 때문에 forward 액션 태그가 있는 페이지의 URL주소에서 다른 페이지의 결가를 출력한다.
👉 MVC 모델2에서 컨트롤러가 forward액션 태그와 같은 역할을 한다.
👉 사용자가 입력한 값에 따라 접속하는 페이지가 다른 경우에 사용하면 좋음
📎 Forward 기본 형식
<jsp:forward page="이동 페이지명/>
📎 Forward 액션태그 처리 과정
- 웹 브라우저에서 웹서버로 a.jsp 페이지 요청
- 요청된 a.jsp 페이지 수행
- <jsp:forward page="b.jsp/> forward 액션 태그를 만나면 출력 버퍼의 내용을 제거하고 프로그램 제어를 b.jsp로 이동시킴
- b.jsp 페이지 수행
- b.jsp 페이지를 수행한 결과를 웹 브라우저에 응답
📎 Forward 액션태그 사용예시(1)
👉 forward액션태그 작성된 JSP 파일
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward</title>
</head>
<body>
<!-- JavaScript -->
<script>
// location.href = "forwardEx01_target.jsp";
</script>
<!-- java -->
<%
// response.sendRedirect("forwardEx01_target.jsp");
%>
<!-- jsp action tag -->
<jsp:forward page="forwardEx01_target.jsp" />
</body>
</html>
👉 forward된 forwardEx01_target.jsp 파일
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>포워딩 된 페이지1 입니다.</h1>
</body>
</html>
📎 Forward 액션태그 사용예시(2)
👉 forward액션태그 작성된 JSP 파일
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward</title>
</head>
<body>
<!-- jsp action tag -->
<jsp:forward page="forwardEx02_target.jsp">
<jsp:param value='<%=URLEncoder.encode("팀 버너스 리" , "utf-8") %>' name="data1"/>
<jsp:param value="Timothy John Berners Lee" name="data2"/>
</jsp:forward>
</body>
</html>
👉 forward된 forwardEx02_target.jsp 파일
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String data1 = request.getParameter("data1");
data1 = URLDecoder.decode(data1, "utf-8");
String data2 = request.getParameter("data2");
%>
<h1>포워딩 된 페이지2 입니다.</h1>
<h3>전달된 데이터 : <%=data1 %></h3>
<h3>전달된 데이터 : <%=data2 %></h3>
</body>
</html>
📌 4. 액션 태그: <jsp:include>
📎 Include란?
다른 페이지의 처리 결과를 현재 페이지에 포함하는 액션 태그이다.
📎 Include 액션태그 특징
다른 페이지의 처리 결과를 현재 페이지에 포함하는 액션 태그이다.
👉 스프링에서 주로 tiles3
및 sitemash
로 구현한다.
👉 param 액션 태그를 통해 데이터를 전달할 수 있다.
👉 HTML, JSP, Servlet 페이지 모두 포함 가능하다.
👉 템플릿 페이지 작성시 사용(디자인 관련)한다.
👉 파일들이 완전히 별도로 동작하므로 완성된 문서의 형태를 포함해야 한다.
👉 동적으로 변경된 내용들을 특정한 위치에 삽입한다.
👉 전송 데이터에 따라 출력 결과가 달라지는 동적 디자인을 하는 경우 사용한다.
📎 Include 기본 형식
<jsp:include page="포함페이지" flush="boolean"/>
👉 Page속성
- 생략 불가능한 필수 속성
- 속성값은 현재 페이지에 결과가 포함될 페이지명
- 페이지명은 상대 경로 또는 절대 경로
- 표현식을 사용함
👉 Flush속성
- jsp페이지는 출력할 내용을 버퍼(8kb)에 저장하는데 포함될 페이지로 제어가 이동할 때 버퍼의 처리 방식을 속성 값으로 지정
- true: 현재 페이지가 버퍼에 저장한 내용을 웹 브라우저에 출력하고 버퍼를 비움
- false: 결과를 합쳐서 출력하기 전까지 버퍼에 출력 내용을 저장
📎 Include 액션태그 처리 과정
- 브라우저가 a.jsp 페이지를 서버에 요청
- 서버가 a.jsp 처리, 페이지 내부의 출력 내용을 버퍼에 저장하는 등의 작업을 함
- <jsp:include page="b.jsp" flush="false"/> 액션 태그를 만나면 작업을 멈추고 b.jsp로 프로그램 제어를 이동시킴
- b.jsp 페이지 처리, 해당 페이지 내의 출력 내용을 출력 버퍼에 저장
- b.jsp 페이지의 처리가 끝나면 다시 a.jsp 페이지로 프로그램 제어가 이동. 이동 위치는 include 액션 태그의 다음 행
- a.jsp 페이지의 나머지 부분을 처리, 출력 내용을 버퍼에 저장
- 출력 버퍼의 내용을 웹 브라우저로 응답
📎 Include 액션태그 사용예시
👉 Main
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include</title>
</head>
<body>
<div style="height: 300px; background-color: skyblue;">
<jsp:include page="includeEx01_header.jsp"/>
</div>
<div style="height: 500px;">
<jsp:include page="includeEx01_body2.jsp">
<jsp:param value='<%=URLEncoder.encode("팀 버너스 리" , "utf-8") %>' name="data1"/>
<jsp:param value="Timothy John Berners Lee" name="data2"/>
</jsp:include>
</div>
<div style="height: 300px; background-color: pink;">
<jsp:include page="includeEx01_footer.jsp"/>
</div>
</body>
</html>
👉 Body
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>body2</title>
</head>
<body>
<h1 align="center">본문 위치에서 보여질 페이지 예시</h1>
<%
String data1 = request.getParameter("data1");
data1 = URLDecoder.decode(data1 , "utf-8");
String data2 = request.getParameter("data2");
%>
<h3>데이터1 : <%=data1 %></h3>
<h3>데이터2 : <%=data2 %></h3>
</body>
</html>
👉 Header
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>header</title>
</head>
<body>
<h1 align="center">헤더 위치에서 보여질 페이지 예시</h1>
</body>
</html>
👉 Footer
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>header</title>
</head>
<body>
<h1 align="center">헤더 위치에서 보여질 페이지 예시</h1>
</body>
</html>
📖 참고
Author And Source
이 문제에 관하여(JSP Bean: 액션태그), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@alicesykim95/JSP-Bean-액션태그저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)