- 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() |
|
|
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>
-->
'BackEnd > JSP' 카테고리의 다른 글
15장. JSP 페이지를 풍부하게 하는 오픈 소스 기능 (0) | 2022.02.23 |
---|---|
14장. 표현 언어와 JSTL - ②JSTL (0) | 2022.02.22 |
14장. 표현 언어와 JSTL - ①표현언어 (0) | 2022.02.22 |
12장. JSP 스크립트 요소 기능 (0) | 2022.02.20 |
11장. JSP 정의와 구성 요소 (0) | 2022.02.19 |
Comment