액션태그가 필요한 이유는 jsp 페이지에서 동일한 내용이라도 자바 코드를 기술하기 보다는 태그를 기술하는 것이 지저분하지 않고 깔끔하게 코딩할 수 있어 가독성 높은 소스코드를 작성할 수 있다. 또한 코드 양을 대폭 줄일 수 있다.
※ JSP 액션 태그
태그의 종류 | 설명 |
<jsp:forward> | 다른 사이트로 이동할 때 사용. 페이지의 흐름을 제어할 때 사용 |
<jsp:include> | 정적 혹은 동적인 자원을 현재 페이지의 내용에 포함시킨다. 페이지를 모듈화할 때 사용 |
<jsp:param> | <jsp:forward>, <jsp:include>, <jsp:plugin>과 같이 사용되어 파라미터를 추가할 때 사용 |
<jsp:useBean> | 빈(Bean)을 생성하고 사용하기 위한 환경을 정의하는 액션 태그 |
<jsp:setProperty> | 액션은 빈에서 속성 값을 할당 |
<jsp:getProperty> | 액션은 빈에서 속성 값을 얻어올 때 사용 |
액션 태그는 XML 문법을 따른다. 즉 시작 태그와 함께 반드시 종료 태그를 포함해야 한다.
• 액션 태그의 기본 형식
<jsp: . . . 속성="값"> 내용 </jsp: . . .>
JSP 액션 태그는 XML 형식을 따르기 때문에 시작 태그가 있으면 반드시 끝나는 태그가 있어야 하며 접두어를 붙여서 시작해야 한다.
만약 액션 태그에 속성값만 지정하고 내용이 없을 경우에는 마지막 부분을 "/>"로 마무리한다.
• 내용이 없는 액션 태그의 형식
<jsp: . . . 속성="값" />
※ <jsp:forward> 액션 태그
현재 JSP 페이지에서 URL로 지정한 특정 페이지로 넘어갈 때 사용하는 태그
• <jsp:forward> 액션 태그의 형식
<jsp:forward page="Main.jsp" />
<jsp:forward> 액션 태그는 포워드 방식으로 페이지를 이동하는 것으로 기존의 request 연결을 유지하면서 서버상의 url로 request 정보를 전달한다.
• <jsp:forward>예제 : 브라우저로 로드할 파일. 배경색을 빨간색으로 지정(08_red.jsp)
<%@ 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 bgcolor="red">
이 파일은 red.jsp입니다. <br>
브라우저에 배경색이 빨간색으로 나타날까요?<br>
노란색으로 나타날까요?<hr>
forward 액션 태그가 실행되면 이 페이지의 내용은 출력되지 않습니다. <br>
<jsp:forward page="08_yellow.jsp" />
</body>
</html>
• <jsp:forward>예제 : red.jsp에 의해 요청되는 페이지이다. 배경색을 노란색으로 지정(08_yellow.jsp)
<%@ 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 bgcolor="yellow">
<h3> [forward 액션 태그에 대한 예제]</h3>
<hr>
이 파일은 yellow.jsp입니다.
<br>
<hr>
브라우저에 나타나는 URL과 전혀 상관없는 파일입니다.
</body>
</html>
08_red.jsp 페이지를 요청했는데 <jsp:forward> 태그가 08_yellow.jsp 파일로 제어의 흐름을 이동시킨다. 이는 <jsp:forward> 태그로 포워딩 했기 때문이다.
※ <jsp:param> 액션 태그
요청한 페이지로 정보를 전달할 때 사용하는 태그, 현재 페이지에서 요청한 페이지로 파라미터와 파라미터 값 형태로 정보를 넘겨준다.
<jsp:param> 태그는 단독으로는 사용 못하고 <jsp:include>나 <jsp:forward> 태그의 내부에 기술하여 사용한다.
• <jsp:param> 액션 태그의 형식
<jsp:param name="파라미터" value="파라미터값" />
• <jsp:param>예제 : 라디오 버튼으로 조건을 나누어 선택하는 폼 페이지(09_actionTagForm.jsp)
<%@ 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>
<form action="09_actionTagTest.jsp">
아이디 : <input type="text" name="userID"><br>
암 호 : <input type="password" name="userPwd"><br>
<input type="radio" name="loginCheck" value="user" checked="checked"> 사용자
<input type="radio" name="loginCheck" value="manager"> 관리자 <br>
<input type="submit" value="로그인">
</form>
</body>
</html>
• <jsp:param>예제 : 조건에 따라 이동할 페이지를 달리하는 페이지(09_actionTagTest.jsp)
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
String userID=request.getParameter("userID");
String userPwd=request.getParameter("userPwd");
String loginCheck=request.getParameter("loginCheck");
if(loginCheck.equals("user")){
%>
<jsp:forward page="09_userMain.jsp">
<jsp:param value='<%=URLEncoder.encode("사용자", "UTF-8")%>' name="userName"/>
</jsp:forward>
<%
}
else
{
%>
<jsp:forward page="09_managerMain.jsp">
<jsp:param value='<%=URLEncoder.encode("관리자", "UTF-8")%>' name="userName"/>
</jsp:forward>
<%
}
%>
• <jsp:param>예제 : 사용자 페이지(09_userMain.jsp)
<%@page import="java.net.URLDecoder"%>
<%@ 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 bgcolor="pink">
<h3>사용자로 로그인 성공 </h3>
<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8")%>
(<%=request.getParameter("userID")%>)님 환영합니다 .
</body>
</html>
• <jsp:param>예제 : 관리자 페이지(09_managerMain.jsp)
<%@page import="java.net.URLDecoder"%>
<%@ 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 bgcolor="yellow">
<h3>관리자로 로그인 성공 </h3>
<%=URLDecoder.decode(request.getParameter("userName"), "UTF-8")%>
<%=request.getParameter("userID") %>님 환영합니다 .
</body>
</html>
※ <jsp:include> 액션 태그
현재 페이지에 다른 페이지의 내용을 동적으로 포함 시키고자 할 경우 사용하는 액션 태그
• <jsp:include> 액션 태그의 형식
<jsp:include page="urlSpec" flush="true or false" />
※ <jsp:include> 액션 태그와 <%@ include file='url'%> 동작원리의 차이점
• include 지시자 : 지정된 페이지가 현재 페이지에 포함되어서 하나로 합쳐진 상태에서 컴파일하여 실행되는 구조. 포함되는 페이지를 독립적인 형태가 아니고 페이지의 일부분으로 구성되므로 변수를 서로 공유해서 사용할 수 있다.
• <jsp:include> 액션 태그 : 컴파일할때 합쳐지지 않고 제어권이 지정한 페이지로 넘어갔다가 다시 되돌아온다. 서로 독립적으로 컴파일되고 실행할 때 독립적으로 실행되는 두 페이지가 서로 연락을 취하여 하나의 페이지인 것처럼 동작하기 때문에 변수를 서로 공유해서 사용할 수 없다. 그러므로 포함될 페이지가 독립적인 하나의 페이지여야 한다.
• <jsp:include>예제 : 화면 상단에 출력할 공통 페이지(10_header.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<hr>
<h4> 이부분은footer입니다.</h4>
• <jsp:include>예제 : 화면 하단에 출력할 공통 페이지(10_footer.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<h3> 이부분은header입니다.</h3>
<hr>
• <jsp:include>예제 : 메인 페이지(10_main.jsp)
<%@ 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:include page="10_header.jsp"/>
메인 화면입니다. <br>
<a href="10_sub.jsp">서브 페이지로 이동</a>
<jsp:include page="10_footer.jsp"/>
</body>
</html>
• <jsp:include>예제 : 서브 페이지(10_sub.jsp)
<%@ 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:include page="10_header.jsp"/>
서브 화면입니다. <br>
<a href="10_main.jsp">메인 페이지로 되돌아가기</a>
<jsp:include page="10_footer.jsp"/>
</body>
</html>
'JSP' 카테고리의 다른 글
[JSP&Servlet] JSP 내장 객체의 영역 (0) | 2020.10.08 |
---|---|
[JSP&Servlet] JSP에서 다른 페이지로 이동하기(리다이렉트 방식, 포워드 방식) (0) | 2020.10.08 |
[JSP&Servlet] JSP 내장 객체 (0) | 2020.10.08 |
[JSP&Servlet] JSP 기본태그 (0) | 2020.10.07 |
[JSP&Servlet] 서블릿과 JSP의 관계 (1) | 2020.10.07 |