13장. 자바 코드를 없애는 액션 태그

- JSP는 스크립트릿의 자바 코드를 제거하고 여러가지 액션태그들로 자바 코드를 대신하게 됨

<액션태그 종류>

이름 설명 형식
인클루드 액션 태그 이미 있는 JSP를 포함 <jsp:inclue>
포워드 액션 태그 서블릿의 RequestDispatcher 포워딩을 대신 <jsp:forward>
유즈빈 액션 태그 객체를 생성하기 위한 new 연산자를 대신 <jsp:useBean>
셋프로퍼티 액션 태그 setter <jsp:setProperty>
겟프로퍼티 액션 태그 getter <jsp:getProperty>

 

 

13.1 인클루드 액션 태그 사용하기

- 화면을 분할해서 관리할 때 사용, 재사용 할 수 있게 함

- 형식 : <jsp:inclue page="포함할JSP페이지" flush="true/false"> ... </jsp:inclue>

         ㄴ flush : 지정한 JSP를 실행하기 전 출력 버퍼 비움 여부를 지정

 

<인클루드 액션 태그 vs 인클루드 디렉티브 태그>

항목 인클루드 액션 태그 인클루드 디렉티브 태그
기능 JSP 레이아웃 모듈화 JSP 레이아웃 모듈화
처리 시간 요쳥 시 JSP -> 자바코드 변환 시
데이터 처리 방법 param 액션 태그를 이용해 동적 처리 가능 정적처리만
포함된 JSP 자바 파일 변환 여부 각각 자바 파일로 생성 포함되는 JSP가 포함하는 JSP에 포함 되어 하나의 자바 파일 생성

 

<인클루드 액션 태그의 실행 과정>

1. 브라우저 요청 시 부모 JSP 파일을 컴파일

2. 컴파일 시 <jsp:inclue>가 지시하는 JSP(자식 JSP)를 요청

3. 요청된 JSP를 컴파일, 부모JSP에게 응답 보냄

4. 부모 JSP는 통틀어서 응답 결과 출력

 

- <jsp:param> 태그(param 액션 태그)를 이용해서 요청 변수를 자식 JSP 로 포워딩 가능

ex1-부모)

<jsp:include page="duke_image.jsp" flush="true">
	<jsp:param name="name" value="듀크"/>
	<jsp:param name="img" value="duke.png"/>
</jsp:include>

- param 액션 태그를 이용해 여러 값을 duke_image.jsp(자식)으로 동적 포워딩 함

 

- duke_image(자식) JSP - 부모 JSP에서 name, img만 전달해주면 다양한 결과를 볼 수 있음

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name=request.getParameter("name");
	String img=request.getParameter("img");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>듀크이미지</title>
</head>
<body>
<h1>이름은 <%=name %>입니다.</h1><br>
<img src="./image/<%=img%>"/>
</body>
</html>

- include(부모) JSP

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%request.setCharacterEncoding("utf-8"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>include1.jsp</title>
</head>
<body>
안녕하세요. 쇼핑몰 중심 JSP 시작입니다!!!<br><br>
<jsp:include page="duke_image.jsp" flush="true">
	<jsp:param name="name" value="듀크"/>
	<jsp:param name="img" value="duke.png"/>
</jsp:include>

</body>
</html>

 

*참고. request의 getParameter() vs getAttribute()

getParameter()  getAttribute()
  • 리턴 값이 String
  • 브라우저에서 전송받은 request 영역의 값을 읽어옴
  • 리턴 값이 Object 타입
  • setAttribute() 속성을 통한 설정이 없으면 null 리턴

 

 

13.2 포워드 액션 태그 사용하기

==RequestDispatcher

- param 액션 태그를 이용해 값도 넘겨줄 수 있음

- 형식 : <jsp:forward page=""> ... </jsp:forward>

 

조건문과 포워드 ex)

- login.jsp

<% 
request.setCharacterEncoding("utf-8");
String msg=request.getParameter("msg"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<%if(msg!=null) {%>
	<h1><%=msg %></h1>
<%} %> <!-- 단일문장이래도 스크립트릿에서는 {} 표시 해줘야 함 -->
<form name=frmLogin method="post" action="result.jsp" encType="UTF-8">
아이디 :<input type="text" name=user_id><br>
비밀번호 : <input type="password" name="user_pw"><br>
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</body>
</html>

- result.jsp

<% 
request.setCharacterEncoding("utf-8");
String user_id=request.getParameter("user_id"); %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<%
	if(user_id==null || user_id.length()==0 ){
%>
<jsp:forward page="login.jsp"> <!--포워드!! -->
 <jsp:param name="msg" value="아이디를 입력하지 않았습니다. 아이디를 입력해 주세요."/>
</jsp:forward>
<%} %>
<h1>환영합니다 <%=user_id %>님!!</h1>
</body>
</html>

 

 

13.3 useBean, setProperty, getProperty 액션 태그 사용하기

- 자바빈 : 웹 프로그램, 즉 Java EE 프로그래밍 시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는데 사용. 자바의 DTO/VO 클래스와 같은 개념이므로 자바빈을 만드는 방법은 VO 클래스를 만드는 방법과 동일

- <특징>

  • 속성의 접근 제한자는 private
  • 각 속성은 각각의 setter/getter를 가짐
  • setter/getter 이름의 첫 글자는 반드시 소문자
  • 기본 생성자를 반드시 가지며 다른 생성자도 추가가능

<자바 빈+db을 이용한 회원 정보 조회 실습> : 이전과 같음~

 

 

<유즈빈 액션 태그>

- 자바빈을 자주 사용할 경우 화면이 복잡해짐 => 유즈빈 액션 태그로 보완

- <형식> <jsp:useBean id="빈 이름" class="자바빈 클래스(패키지 이름 포함)" [scope="접근 범위"/>

- id : JSP페이지에서 자바빈 객체에 접근할 때 사용할 이름(=객체 변수 이름)

  scope : page, request, session, application 중 하나, 디폴트 값은 page

 

ex)

<jsp:useBean id="memberBean" class="sec01.ex01.MemberBean" scope="page"/>
//MemberBean memberBean=new MemberBean(user_id,user_pw,user_name,user_email);

 

<setProperty/getProperty>

- setProperty : <jsp:setProperty name="자바빈이름(useBean태그의 id속성)" property="속성이름" value="값"/>

- getProperty : <jsp:getProperty name="자바빈이름(useBean태그의 id속성)" property="속성이름"/>

 

- 자바빈 멤버 변수(속성) 이름과 요청으로 들어온 매개변수 이름이 같으면

  setProperty에서 value 값을 생략하고 property 값을 "*"로 지정하여 한줄로 setter를 끝낼 수 있다.

 

//방법1
<jsp:setProperty name="memberBean" property="id" value="<%=request.getParameter("id")>" />
...
//방법2
<jsp:setProperty name="memberBean" property="id" param="id" />
..
//방법3
<jsp:setProperty name="memberBean" property="id"/>
..

/*
String user_id=request.getParameter("id");
String user_pwd=request.getParameter("pwd");
String user_name=request.getParameter("name");
String user_email=request.getParameter("email");
MemberBean memberBean=new MemberBean(user_id,user_pw,user_name,user_email);

memberBean.setId(user_id);
memberBean.setPwd(user_pwd);
memberBean.setName(user_name);
memberBean.setEmail(user_email);*/
<jsp:setProperty name="memberBean" property="*"/>

 

~ getProperty 는 생략없고 변수마다 해주면 됨

<td><jsp:getProperty name="memberBean" property="id" /></td>
<td><jsp:getProperty name="memberBean" property="pwd" /></td>
<td><jsp:getProperty name="memberBean" property="name" /></td>
<td><jsp:getProperty name="memberBean" property="email" /></td>

<!--
	       <td><%=bean.getId() %></td>
	       <td><%=bean.getPwd() %></td>
	       <td><%=bean.getName() %></td>
	       <td><%=bean.getEmail() %></td>
-->