본문 바로가기
JSP/성낙현의 JSP 자바 웹 프로그래밍

액션 태그(Action Tag)

by k-mozzi 2023. 6. 13.
반응형
Preface

 

이번 장에선 액션 태그의 사용 방법을 공부했다.

 

지금껏 JSP 코드는 다른 언어들에 비해 굉장히 지저분하다고 생각했었는데,

 

액션 태그를 사용하니 직관성과 가독성이 조금은 좋아진 것 같다.

 

대부분 이전 장에서 다뤘던 내용들이라 특별히 어렵고 헷갈리는 부분은 없었다.

 

 

 

또, 월요일 기말고사를 끝으로 이번 학기를 모두 마쳤다.

 

별다른 문제가 없다면 8월에 졸업할 예정이다.


 

1. 액션 태그란?

 

 

- 액션 태그(Action Tag): JSP의 표준 태그로, 페이지 사이에서 이동을 제어하거나 자바빈을 생성할 때 주로 사용

1) 특별한 선언 없이 <jsp:태그명 /> 형태로 사용한다.

2) 웹 브라우저에서 소스 보기를 해도 보이지 않는다.

 

 

- 액션 태그의 특징

1) XML 문법을 따른다.

2) 반드시 종료 태그를 사용해야 한다.

3) 액션 태그 사이에 주석을 사용할 수 없다.

4) 액션 태그에 속성값을 부여할 때는 표현식(<%= %>)을 사용할 수 있다.

 

 

- 액션 태그의 분류

1) <jsp:include>: 외부 파일을 현재 파일에 포함시킨다.

2) <jsp:forward>: 다른 페이지로 요청을 넘긴다.

3) <jsp:useBean>. <jsp:setProperty>, <jsp:getProperty>: 자바빈즈를 생성하고 값을 설정/추출한다.

4) <jsp:param>: 다른 페이지로 매개변수를 전달한다.

 

 

- 내장 객체의 영역

1) page 영역: 동일한 페이지에서만 공유

2) request 영역: 하나의 요청에 의해 호출된 페이지와 포워드된 페이지까지 공유

3) session 영역: 클라이언트가 처음 접속한 후 웹 브라우저를 닫을 때까지 공유

4) application 영역: 한 번 저장되면 웹 애플리케이션이 종료될 때까지 유지

 


 

2. <jsp:include>

 

 

- <jsp:include> 액션 태그: 외부 JSP 파일을 현재 JSP 파일로 포함시킨다.

 

 

- include 지시어와 <jsp:include> 액션 태그의 차이

  지시어 액션 태그
형식 <%@ include file="포함할 파일 경로" %> <jsp:include page="포함할 파일 경로" />
표현식 표현식 사용 불가 표현식 사용 가능
포함 방식 페이지 자체를 현재 페이지에 포함시킨 후 컴파일 진행 실행의 흐름을 포함시킬 페이지로 이동시킨 후 실행한 결과를 현재 페이지에 포함
변수 포함시킨 파일에서 생성한 변수 사용 가능 포함시킨 파일에서 생성한 변수 사용 불가
page 영역 공유됨 공유되지 않음
request 영역 공유됨 공유됨

 

 

- 지시어를 통한 inlcude: 페이지를 원본 그대로 현재 페이지에 포함시킨 후 컴파일

→ JSP 코드만 서로 다른 페이지로 모듈화 하는 것이므로 동일한 페이지로 인식된다.

 

 

- 액션 태그를 통한 inlude: 포함시킬 페이지로 요청의 흐름이 이동되어 컴파일을 진행한 후 결과물을 현재 페이지에 삽입

1) 웹 서버에서 컴파일된 JSP 코드는 모두 HTML 형태로 변환된다.

→ 포함시킬 페이지에서 생성한 변수를 현재 페이지에서 사용할 수 없다.

2) 서로 다른 페이지로 인식되므로 page 영역을 공유할 수 없다.

 


 

3. <jsp:forward>

 

 

- <jsp:forward> 액션 태그: 해당 태그를 만나기 전까지의 모든 출력을 제거하고 포워드할 페이지로 요청을 전달한다.

1) 해당 페이지 지시어에서 buffer="none"으로 설정하면 포워드를 사용할 수 없다.

2) 이동된 페이지와 request 영역을 공유한다.

→ page 영역은 공유되지 않는다.

3) URL이 변경되지 않는다.

 


 

4. <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>

 

 

- <jsp:useBean> 액션 태그: 자바빈즈를 생성하거나 설정할 때 사용한다.

 

 

- 자바빈즈(JavaBeans): 자바로 작성한 소프트웨어 컴포넌트

→ 특정 규약을 따르는 자바 클래스이다.

1) 디폴트 패키지 이외의 패키지에 속해야 한다.

2) 멤버 변수(속성)의 접근 지정자는 private으로 선언한다.

3) 기본 생성자가 있어야 한다.

4) 멤버 변수에 접근할 수 있는 getter, setter 메서드가 있어야 한다.

5) getter, setter 메서드의 접근 지정자는 public으로 선언한다.

 

 

-  <jsp:useBean> 형식

1) scope의 값을 생략하면 page 영역이 지정된다.

2) input 태그의 name 값이 사용할 클래스의 멤버 변수 이름과 같아야 한다.

→ 폼값은 항상 input 태그의 name 속성에 지정한 이름을 통해 전송된다.

<jsp:useBean id="자바빈즈 이름" class="사용할 패키지와 클래스명" scope="저장될 영역" />

 

 

- <jsp:setProperty> 형식

1) name: <jsp:useBean>의 id 속성에 저장한 자바빈즈의 이름을 지정

2) property="*"(와일드카드)으로 설정하면 form의 하위 요소와 일치하는 바바빈즈의 모든 속성에 사용자가 전송한 값이 설정된다.

→ value 속성을 생략할 수 있다.

<jsp:setProperty name="자바빈즈 이름" property="속성명(멤버 변수)" value="설정할 값" />

 

 

- <jsp:getProperty> 형식

<jsp:getProperty name="자바빈즈 이름" property="속성명(멤버 변수" />

 

 

- web.xml의 필터를 통한 한글 인코딩 문제 해결

<filter>
	<filter-name>SetCharEncoding</filter-name>
	<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class>
	<init-param>
		<param-name>encoding</param-name>
		<param-value>utf-8</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>SetCharEncoding</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

 


 

5. <jsp:param>

 

 

- <jsp:param> 액션 태그: 다른 페이지에 값을 전달해주는 액션 태그이다.

→ 전달할 수 있는 값은 String 뿐이므로, 다른 타입의 객체를 전달할 땐 내장 객체의 영역을 이용해야 한다.

 

 

- 메인 페이지의 코드

1) 포워드되는 페이지로 한글을 전달할 땐 반드시 포워드시키는 최초 페이지에서 인코딩 처리를 해야 한다.

→ 이미 web.xml에 필터를 설정했으므로 생략할 수 있다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String pValue = "방랑시인";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<jsp:useBean id="person" class="common.Person" scope="request"></jsp:useBean>
	<jsp:setProperty property="name" name="person" value="김삿갓" />
	<jsp:setProperty property="age" name="person" value="56" />
	<jsp:forward page="ParamForward.jsp?param1=김병연">
		<jsp:param value="경기도 양주" name="param2" />
		<jsp:param value="<%=pValue%>" name="param3" />
	</jsp:forward>
</body>
</html>

 

 

- 포워드되는 페이지의 코드

<%@ 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>
	<jsp:useBean id="person" class="common.Person" scope="request"></jsp:useBean>
	<h2>포워드된 페이지에서 매개변수 확인</h2>
	<ul>
		<li><jsp:getProperty name="person" property="name" /></li>
		<li>나이: <jsp:getProperty name="person" property="age" /></li>
		<li>본명: <%=request.getParameter("param1")%></li>
		<li>출생: <%=request.getParameter("param2")%></li>
		<li>특징: <%=request.getParameter("param3")%></li>
	</ul>
	<jsp:include page="inc/ParamInclude.jsp">
		<jsp:param value="강원도 영월" name="loc1" />
		<jsp:param value="김삿갓면" name="loc2" />
	</jsp:include>
</body>
</html>

 

 

- 인클루드되는 페이지의 코드

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<h2>인클루드된 페이지에서 매개변수 확인</h2>
<%=request.getParameter("loc1")%>에
<%=request.getParameter("loc2")%>이 있습니다.

 

 

∴ <jsp:param>을 이용하면 인클루드하거나 포워드한 페이지로도 매개변수를 전달할 수 있다.

 

728x90
반응형

댓글