표준 액션 태그(Standard Action Tag)
표준 액션 태그는 JSP 페이지에서 제공되는 미리 정의된 액션을 수행하는 태그로, Java 명령으로 구현해야 하는 기능을 표준 액션 태그로 제공한다. 이 태그들은 JSP 페이지에서 동적인 기능을 구현하기 위해 사용된다.
HTML 태그와 구분하기 위해 [jsp] 네임스페이스(NameSpace) 를 사용하고, JSP 태그라고 부른다.
표준 액션 태그의 종류
- include 태그 : JSP 문서의 스레드를 다른 JSP 문서로 이동하여 실행된 결과(웹문서)를 제공받아 태그를 사용한 위치에 포함하는 태그 (스레드를 이동시켜 처리결과를 가져온다)
- forward 태그 : JSP 문서의 스레드를 다른 JSP 문서로 이동하여 실행된 결과(웹문서)를 클라이언트에게 전달하여 응답하는 태그 (스레드를 이동시켜 대신 응답할 수 있도록 해준다) - forward 이동(서버측에서 페이지를 바꾼다) → forward이동과 redirect이동을 잘 구분해야 한다.
- param 태그 : JSP 문서에서 스레드가 이동된 JSP 문서로 값을 전달하기 위한 태그 - include 태그와 forward 태그의 하위태그로 실행
- useBean 태그 : JSP 문서에서 사용할 수 있는 객체를 제공하기 위한 태그 - 내장객체에 저장된 속성값을 반환받아 제공하거나 새로운 객체를 생성하여 제공
- setProperty 태그 : useBean 태그로 제공된 객체의 필드값을 변경하기 위한 태그 (Setter 메소드 호출) - useBean 태그의 종속태그
- getProperty 태그 : useBean 태그로 제공된 객체의 필드값을 반환하기 위한 태그 (Getter 메소드 호출) - useBean 태그의 종속태그
include Directive와 include Tag 비교
권한에 관련된 설정 등은 include 디렉티브를 많이 사용한다.
하지만 Header 영역 또는 footer영역 등에 파일을 포함시킬 땐 include 태그를 사용하는 것을 더 권장한다.
include 디렉티브와 include 태그의 가장 큰 차이점은, include 디렉티브는 file 속성값으로 JSP의 표현식 사용이 불가능하지만 include 태그의 page 속성에는 JSP의 표현식 사용이 가능하다는 점이다.
include Directive
: 외부파일(JSPF)의 소스코드를 JSP 문서에 포함시킨다.
→ CSL(HTML, CSS, JavaScript) 및 SSL(Java - Script Element)의 소스코드를 포함시킨다.
→ JSP 문서를 요청한 경우 include 디렉티브의 file 속성값으로 설정된 외부파일의 소스코드를 JSP 문서에 포함한 후 실행한 결과를 클라이언트에게 응답한다.
→ include 디렉티브의 file 속성값으로 설정된 외부파일의 내용이 변경될 경우 JSP 문서를 변경한 것과 동일하므로 JSP 문서를 다시 해석하여 서블릿으로 생성한다.
include 디렉티브의 file 속성값으로 JSP의 표현식(Expression) 사용이 불가능하다.
→ include 디렉티브의 file 속성값으로 설정된 외부파일의 소스코드만 포함시킬 수 있다. (정적포함)
include Directive 예제)

[index.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%-- Header 영역 --%>
<%@ include file="header.jspf"%>
<%-- Content 영역 --%>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<%-- Footer 영역 --%>
<hr>
<p>Copyright © Garu Corp. All rights reserved.</p>
<p>관리자 : 김민지(kim@garu.xyz)</p>
</body>
</html>
[header.jspf]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>메일페이지</h1>
<a href="index.jsp">메일(Mail)</a>
<a href="index.jsp">블로그(Blog)</a>
<a href="index.jsp">카페(Cafe)</a>
<hr>

include Tag
: 요청 JSP 문서에서 다른 JSP 문서로 스레드를 이동하고 실행하여 실행될 결과를 가져와 요청 JSP 문서에 포함하는 태그
→ JSP 문서의 실행결과(CSL - HTML, CSS, JavaScript)를 포함시킨다.
형식)
<jsp:include page="JSP 문서의 경로"/></jsp:include>
→ page 속성값으로 설정된 JSP 문서가 없는 경우 에러가 발생한다.
→ page 속성값으로 설정된 JSP 문서가 변경되어도 요청 JSP 문서에는 아무런 영향을 주지 않는다.
include Tag의 page 속성값으로 JSP의 표현식(Expression) 사용이 가능하다.
→ JSP의 표현식(Expression)으로 제공되는 JSP 문서의 실행결과를 포함할 수 있다. (동적포함)
param Tag
: 스레드가 이동된 JSP 문서에게 값을 전달하는 태그
→ include 태그 또는 forward 태그의 하위 태그로 사용한다.
요청 JSP 문서에서 다른 JSP 문서로 스레드를 이동할 경우 요청 JSP 문서의 request 객체와 response 객체를 스레드가 이동되는 JSP 문서에 전달하여 사용할 수 있도록 해준다.
→ param 태그를 사용하면 request 객체의 몸체부에 값을 저장하여 전달한다.
include 태그와 forward 태그의 하위태그로 param 태그를 제외한 문장이 존재할 경우 에러가 발생한다.
[index.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//footer.jsp에서 변경이 불가능하기 때문에 요청 JSP문서인 index.jsp에서 변경 처리
request.setCharacterEncoding("utf-8");
//JSP 문서 요청시 전달된 값을 반환받아 저장
String category=request.getParameter("category");
if(category==null) {//전달값이 없는 경우
category="mail";
}
String headerPath="";//Header 영역에 포함될 파일의 경로를 저장하기 위한 변수
String master="";//페이지 관리자의 정보를 저장하기 위한 변수
//전달값을 비교하여 Header 영역에 포함될 파일의 경로를 구분하여 저장
if(category.equals("mail")) {
headerPath="header_mail.jsp";
master="김민지(kim@garu.xyz)";
} else if(category.equals("blog")) {
headerPath="header_blog.jsp";
master="강하늘(kang@garu.xyz)";
} else if(category.equals("cafe")) {
headerPath="header_cafe.jsp";
master="이효리(lee@garu.xyz)";
} else {
response.sendError(HttpServletResponse.SC_BAD_REQUEST);
return;
}
//Content 영역에 포함될 파일의 경로를 저장하기 위한 변수
// => 전달값으로 Content 영역에 포함될 파일의 경로 저장
String contentPath=category+".jsp";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<%-- Header 영역 --%>
<%--<%@include file="header.jspf"%>--%>
<%--<%@include file="<%=headerPath %>" %> >> include 디렉티브는 JSP 표현식 사용 불가능--%>
<%-- include Tag --%>
<%--<jsp:include page="header.jsp"/>--%>
<%-- 동적포함 --%>
<jsp:include page="<%=headerPath %>"/>
<%-- Content 영역 --%>
<jsp:include page="<%=contentPath %>"/>
<%-- Footer 영역 --%>
<%-- param 태그 : 스레드가 이동된 JSP 문서에게 값을 전달하는 태그 --%>
<jsp:include page="footer.jsp">
<jsp:param value="<%=master %>" name="master"/>
</jsp:include>
</body>
</html>
[header_mail.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>메일페이지</h1>
메일(Mail)
<a href="index.jsp?category=blog">블로그(Blog)</a>
<a href="index.jsp?category=cafe">카페(Cafe)</a>
<hr>
[header_blog.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>블로그페이지</h1>
<a href="index.jsp?category=mail">메일(Mail)</a>
블로그(Blog)
<a href="index.jsp?category=cafe">카페(Cafe)</a>
<hr>
[header_cafe.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h1>카페페이지</h1>
<a href="index.jsp?category=mail">메일(Mail)</a>
<a href="index.jsp?category=blog">블로그(Blog)</a>
카페(Cafe)
<hr>
[mail.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
<p>메일 관련 정보가 출력됩니다.</p>
[blog.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>블로그 관련 정보가 출력됩니다.</p>
<p>블로그 관련 정보가 출력됩니다.</p>
<p>블로그 관련 정보가 출력됩니다.</p>
<p>블로그 관련 정보가 출력됩니다.</p>
<p>블로그 관련 정보가 출력됩니다.</p>
[cafe.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<p>카페 관련 정보가 출력됩니다.</p>
<p>카페 관련 정보가 출력됩니다.</p>
<p>카페 관련 정보가 출력됩니다.</p>
<p>카페 관련 정보가 출력됩니다.</p>
<p>카페 관련 정보가 출력됩니다.</p>
[footer.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 요청 JSP 문서에서 스레드가 이동되어 실행되는 JSP 문서는 요청 JSP 문서의 request 객체와
response 객체를 전달받아 사용한다. 즉, 빌려다 사용한다.
따라서 request 객체와 response 객체의 사용제한이 발생된다. (메소드 사용이 제한된다.) --%>
<%
//스레드가 이동되어 실행되는 JSP 문서에서는 request 객체의 정보를 사용할 수 있지만
//변경은 불가능하다.
//따라서 request 객체의 정보를 변경해야 될 경우 요청 JSP 문서에서 변경 처리해야한다.
//request.setCharacterEncoding("utf-8"); //불가능
String master=request.getParameter("master");
//스레드가 이동되어 실행되는 JSP 문서에는 response 객체에 실행결과를 포함하여 요청 JSP 문서에
//전달할 수 있지만 클라이언트에게 에러코드나 URL 주소를 직접 전달하여 응답할 수 없다.
// => 클라이언트에게 에러코드나 URL 주소를 전달하고 싶으면 JavaScript를 이용해야 한다.
if(master==null) {
//response.sendError(HttpServletResponse.SC_BAD_REQUEST);
response.sendRedirect("../standard_action.jsp");
return;
}
%>
<hr>
<p>Copyright © Garu Corp. All rights reserved.</p>
<p>관리자 : <%=master %></p>


forward Tag
: 요청 JSP 문서에서 다른 JSP 문서를 스레드를 이동하여 스레드가 이동된 JSP 문서로 응답 처리하기 위한 기능을 제공하는 태그 - 포워드 이동
→ forward 이동을 하면 서버측에서 이동되기 때문에 클라이언트의 URL 주소가 변경되지 않는다.
→ 스레드가 이동되는 JSP 문서에서는 request 내장객체에 저장된 속성값을 반환받아 사용이 가능하다.
형식)
<jsp:forward page="스레드가 이동될 JSP 문서"></jsp:forward>
→ page 속성값으로 JSP 표현식(Expression) 사용이 가능하다.
예제)
[login.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>로그인 페이지</h1>
<hr>
<a href="main.jsp">메인으로</a>
</body>
</html>
[join.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>회원가입 페이지</h1>
<hr>
<a href="main.jsp">메인으로</a>
</body>
</html>
[cart.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>장바구니 페이지</h1>
<hr>
<a href="main.jsp">메인으로</a>
</body>
</html>
[review.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>제품후기 페이지</h1>
<hr>
<a href="main.jsp">메인으로</a>
</body>
</html>
[main.jsp]
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>메인페이지</h1>
<hr>
<%--
<a href="login.jsp">로그인</a>
<a href="join.jsp">회원가입</a>
<a href="cart.jsp">장바구니</a>
<a href="review.jsp">제품후기</a>
--%>
<a href="controller.jsp?pageName=login">로그인</a>
<a href="controller.jsp?pageName=join">회원가입</a>
<a href="controller.jsp?pageName=cart">장바구니</a>
<a href="controller.jsp?pageName=review">제품후기</a>
</body>
</html>
[controller.jsp]
전달값을 이용하여 다른 JSP 문서로 포워드 이동하는 JSP 문서
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%-- 전달값을 이용하여 다른 JSP 문서로 포워드 이동하는 JSP 문서 --%>
<%
//전달값을 반환받아 저장
String pageName=request.getParameter("pageName");
if(pageName==null) {//전달값이 없는 경우
//클라이언트에게 URL 주소를 전달하여 응답
// => URL 주소를 응답받은 클라이언트는 브라우저의 요청 URL 주소를 변경하여 서버의
//JSP 문서를 요청하여 실행결과(웹문서)를 응답받아 출력한다. - 리다이렉트 이동
response.sendRedirect("main.jsp");
return;
}
String contextPath=pageName+".jsp";
%>
<%-- forward Tag --%>
<jsp:forward page="<%=contextPath %>"/>

'학원 > 복기' 카테고리의 다른 글
[JSP] DB 연동 예제 (0) | 2023.06.26 |
---|---|
[JSP] 자바빈(JavaBean) / useBean 태그 (0) | 2023.06.26 |
[JSP] 객체의 사용범위(Scope) (0) | 2023.06.25 |
[JSP] 내장객체(Implicit Object) (0) | 2023.06.23 |
[JSP] 지시어(Directive) - taglib (0) | 2023.06.22 |