티스토리 뷰
1. JSP 표준 액션 태그
- 액션 태그는 많은 자바 코드를 포함하고 있는 Scriptlet 태그( <% %>)를 제거 및 감소할 목적으로 제공되는 코드이다.
- 즉, 자바코드 대신에 액션 태그만으로도 동일한 결과를 얻을 수 있다는 의미이다.
- 액션 태그의 종류에는 다음과 같은 6가지의 액션 태그가 있다.
- 1 ) <jsp:useBean /> : 자바빈 컴포넌트를 사용하기 위한 액션 태그
- 2 ) <jsp:setProperty /> : 자바빈 인스턴스에 데이터를 저장하기 위한 액션 태그
- 3 ) <jap:getProperty /> : 자바빈 인스턴스에서 데이터를 얻기 위한 액션 태그
- 4 ) <jsp:include /> : 제공된 JSP파일을 삽입하기 위한 액션 태그
- 5 ) <jsp: forward /> : 제공된 JSP파일을 forward하기 위한 액션 태그
- 6 ) <jsp:param /> : include나 forward할 때 요청 파라미터를 추가하기 위한 액션 태그
- + 6은 jsp내에서 jsp를 포함할 때나 다른 jsp로 전환될 때, 그전 jsp에서 가지고 있던 데이터 중 필요 데이터를 넘길 때 사용된다.
2. 자바빈
- 자바빈은 JSP에서 사용되는 데이터를 저장 및 관리하기 위한 컴포넌트를 의미한다.
- 즉, JSP에서 데이터를 관리하는 부분을 별도의 클래스로 작성하는 것이다.
- + DTO에서 @Data는 자바빈을 생성하는 롬복이었다.
- 일반적으로 입력 파라미터의 값을 저장하거나 관리하기 위해서 사용한다.
3. 자바빈즈 클래스의 규약
- 1 ) 모든 필드는 private 선언한다. ( 필수 )
- 2 ) 각 필드별 Getter/Setter 선언한다. ( 필수 )
- 3 ) 매개변수 없는 기본생성자를 가져야 합니다. (필수)
- 4 ) java.io.Serializable Tag 인터페이스를 implements 해야한다. ( 선택 )
- + 4번의 의미는 자바빈즈 객체를 객체의 직렬화 / 역직렬화를 통해, 파일에 읽고 쓰거나, 네트워크로 읽고 쓸 수 있다는 것을 JVM에게 알려주는 역할을 수행한다는 의미다.
4. <jsp:useBean> 액션 태그
- 자바빈을 JSP에서 사용하기 위한 액션 태그이다.
- 기본적인 문법 :
- <jsp:useBean id = “빈 이름” class = “패키지 포함한 빈클래스 명(FQCN)” scope = “범위” />
[ 1. 액션태그 - <jsp:useBean id = "빈 이름" class = "FQCN" scope = "범위 지정" /> ] ( *** )
[ 1 - 1. 자바빈즈 클래스 ( DTO와 매우 유사 ) 생성 ]
package org.zerock.myapp.domain;
import lombok.Data;
@Data
public class LoginBean {
private String userid;
private String passwd;
} // end class
[ 1 - 2. jsp:useBean 생성 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>userBean</title>
</head>
<body>
<h1>/JSP/userBean.jsp</h1>
<hr>
<!-- 우선 자바빈즈 객체부터 생성해서, 기본 공유영역에 바인딩한다. -->
<jsp:useBean
id="myBean"
class="org.zerock.myapp.domain.LoginBean"
scope="page" />
<h1>useBean 액션태그</h1>
<%
// 자바빈즈 객체의 프로퍼티에 값을 설정
myBean.setUserid("hehehehe");
myBean.setPasswd("12345");
%>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 2. 액션태그 2 - <jsp:useBean id = "빈 이름" class = "FQCN" scope = "범위 지정" /> ] ( *** )
[ 2 - 1. scope가 session인 jsp:useBean 생성 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="session" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanScope</title>
</head>
<body>
<h1>/JSP/useBeanScope.jsp</h1>
<hr>
<h1>useBeanScope 연습</h1>
<%
myBean.setUserid("yoyoyo");
myBean.setPasswd("7777777");
%>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 2 - 2. session 공유데이터 영역에서 데이터 가지고 오는 jsp:useBean 생성 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean
id="myBean"
class="org.zerock.myapp.domain.LoginBean"
scope="session" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanScope2</title>
</head>
<body>
<h1>/JSP/useBeanScope2.jsp</h1>
<hr>
<h1>useBeanScope 연습</h1>
<!-- scope가 session이기에 useBeanScope에 올려 놓은 데이터가 살아있는 상태이다. -->
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 3. 액션태그 3 - <jsp:setProperty name = "빈 이름" property = "속성 이름" value = "속성 값" /> ] ( *** )
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="page" />
<!-- 속성 설정 -->
<jsp:setProperty name="myBean" property="userid" value="wowowow" />
<jsp:setProperty name="myBean" property="passwd" value="1234567" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanSet</title>
</head>
<body>
<h1>/JSP/useBeanSet.jsp</h1>
<hr>
<h1>useBeanSet 연습</h1>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 4. 액션태그 4 - <jsp:setProperty name = "빈 이름" property = "속성 이름" param = "전송파라미터 이름" /> ] ( *** )
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 기본 scope에 바인딩 되어 있는 자바빈즈 객체를 Request 메세지의 전송 파라미터 수집용으로 사용 -->
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" />
<!-- .getParameter 대신 해준다. -->
<!-- param 값은 전송 파라미터에 맞게 설정해 주면 된다. -->
<jsp:setProperty name="myBean" property="userid" param="myUserid" />
<jsp:setProperty name="myBean" property="passwd" param="myPasswd" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanParam</title>
</head>
<body>
<h1>/JSP/useBeanParam.jsp</h1>
<hr>
<h1>useBeanParam 연습</h1>
<h2>Param 속성을 통한 전송파라미터 자동수집 실습</h2>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 5. 액션태그 5 - <jsp:setProperty name = "빈 이름" property = " * " /> ] ( **** )
+ 속성 이름과 전송파라미터의 이름이 같으면 *를 통해 자동 지정해 줄 수 있다.
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 기본 scope에 바인딩 되어 있는 자바빈즈 객체를 Request 메세지의 전송 파라미터 수집용으로 사용 -->
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="page" />
<!-- 모든 전송파라미터가 자바빈즈 객체의 속성과 이름이 같다면, -->
<!-- 아래와 같이 한번의 jsp:setProperty로 모든 전송 파라미터의 수집이 가능하다. -->
<jsp:setProperty name="myBean" property="*" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanAll</title>
</head>
<body>
<h1>/JSP/useBeanAll.jsp</h1>
<hr>
<h1>useBeanAll 연습</h1>
<h2>Param 속성을 통한 전송파라미터 자동수집 실습</h2>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<h3>1. userid : <%= myBean.getUserid() %></h3>
<h3>2. passwd : <%= myBean.getPasswd() %></h3>
</body>
</html>
[ 6. 액션태그 6 - <jsp:getProperty name = "빈 이름" property = "속성 이름" /> ] ( **** )
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!-- 기본 scope에 바인딩 되어 있는 자바빈즈 객체를 Request 메세지의 전송 파라미터 수집용으로 사용 -->
<jsp:useBean id="myBean" class="org.zerock.myapp.domain.LoginBean" scope="page" />
<!-- jsp에서는 주석기호를 %를 사용하여 작성해 주는 것이 좋다. -->
<!-- 모든 전송파라미터가 자바빈즈 객체의 속성과 이름이 같다면, -->
<!-- 아래와 같이 한번의 jsp:setProperty로 모든 전송 파라미터의 수집이 가능하다. -->
<jsp:setProperty name="myBean" property="*" />
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>useBeanAll</title>
</head>
<body>
<h1>/JSP/useBeanAll.jsp</h1>
<hr>
<h1>useBeanAll 연습</h1>
<h2>Param 속성을 통한 전송파라미터 자동수집 실습</h2>
<!-- 자바빈즈 객체의 프로퍼티(속성) 출력 -->
<!-- getProperty로 얻어내기 (***) -->
<h3>1. userid : <jsp:getProperty name="myBean" property="userid" /> </h3>
<h3>2. passwd : <jsp:getProperty name="myBean" property="passwd" /> </h3>
</body>
</html>
[ 7. 액션태그 7 - <jsp:include page = "삽입될 페이지 위치" flush = "true" /> ] ( ***** )
[ 7 - 1. main.jsp에 넣을 header.jsp 생성 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Calendar" %>
<%
String httpMethod = request.getMethod(); // GET / POST
String nickName = request.getParameter("nickName");
Calendar cal = Calendar.getInstance(); // 달력 객체 얻기
int hour = cal.get( Calendar.HOUR_OF_DAY ); // 달력에서 현재 시간 획득
int minute = cal.get ( Calendar.MINUTE ); // 달력에서 현재 분 획득
int second = cal.get( Calendar.SECOND ); // 달력에서 현재 초 획득
%>
<h1> 1. 현재 시간은 <%= hour %>시 <%= minute %>분 <%= second%>초 입니다.</h1>
<h1> 2. 닉네임은 <%= nickName %> 입니다.</h1>
<h2> 3. HTTP Method : <%= httpMethod %></h2>
[ 7 - 2. main.jsp 생성 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>main2</title>
</head>
<body>
<h1>/JSP/main2.jsp</h1>
<hr>
<h1>include 지시어 태그 연습</h1>
<p>현재 시간을 구하는 연습문제입니다. 다음줄에 삽입됩니다.</p> <br>
<!-- target인 header.jsp를 include할 때, header.jsp에 필요한 파라미터를 전달하는 용도로 -->
<!-- param 액션 태그를 사용해야 한다. -->
<jsp:include page="/JSP/header.jsp" flush="true">
<jsp:param name="nickName" value="한글" />
</jsp:include>
</body>
</html>
[ 8. 액션태그 8 - <jsp:forward page = "삽입될 페이지 위치" /> ] ( ******* )
[ 8 - 1. forward할 페이지 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>current</title>
</head>
<body>
<!-- 현 JSP에서는 아래의 태그를 응답문서 Body에 출력한다. -->
<h1>/JSP/current.jsp</h1>
<hr>
<h1>forward 지시어 태그 연습</h1>
<jsp:forward page="/JSP/forward.jsp">
<jsp:param name="nickName" value="한글" />
</jsp:forward>
</body>
</html>
[ 8 - 2. forward 받을 페이지 ]
<%@ page
language="java"
contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>forward</title>
</head>
<body>
<!-- 현 JSP에서는 아래의 태그를 응답문서 Body에 출력한다. -->
<h1>/JSP/forward.jsp</h1>
<hr>
<h1>forward 지시어 태그 연습</h1>
<h2>/JSP/current.jsp에서 포워드된 화면</h2>
<%
String httpMethod = request.getMethod(); // HTTP Method
String data = request.getParameter("data");
// current.jsp에서 준 전송파라미터 획득
String nickName = request.getParameter("nickName");
%>
<h3>포워드 되었으며, 넘어온 파라미터값은 <%= nickName %>입니다. </h3>
<h3>직접 입력시킨 파라미터값은 <%= data %>입니다. </h3>
<h3>HTTP method : <%= httpMethod %> </h3>
</body>
</html>
'KH 정보교육원 [ Java ]' 카테고리의 다른 글
KH 100일차 - JSTL (***) (0) | 2022.07.20 |
---|---|
KH 99일차 - EL / JSTL (*****) (0) | 2022.07.19 |
KH 97일차 - JSP ( 내장 객체 ) ( ****** ) (0) | 2022.07.15 |
KH 96일차 - Servlet( 파일 다운로드 ) / JSP ( *****) (0) | 2022.07.14 |
KH 95일차 - Servlet ( 쿠키 / 파일 업로드 및 다운로드 ) (****) (0) | 2022.07.13 |