JSP
는 기존 서블릿에서 화면 구성과 비즈니스 로직을 분리하기 위해서 등장했다고 했었는데요. 초기에는 순조로웠습니다. 웹 페이지 형태가 단순했기 때문이죠.
그러나 점점 웹 페이지가 복잡해지자 JSP에 더 복잡한 자바코드를 사용하게 되었고 디자이너들은 이를 위해 자바를 따로 학습해야하는 불편한 과정을 거치게 되었습니다. 그래서 디자이너들을 위해 JSP에서 자바 코드를 최소한으로 줄이고 더 편하게 작업할 수 있도록 액션 태그
들이 등장하게 되었습니다.
즉,
액션 태그
는 JSP에서 자바 코드를 대체할 수 있게 해주는 태그라고 할 수 있습니다.
액션 태그에는 인클루드 액션 태그, 포워드 액션 태그, useBean 액션 태그, setProperty 액션 태그, getProperty 액션 태그
가 있는데요. 이 중에서 오늘은 인클루드 액션 태그
에 대해 알아보겠습니다.
인클루드 액션 태그
는 전에 디렉티브 태그를 다룰때 스쳐 지나갔던 인클루드 디렉티브 태그와 유사한 동작을 합니다. 인클루드 액션 태그
는 하나의 JSP를 다른 JSP에 삽입하고자 할 때 사용합니다.
인클루드 액션 태그
와인클루드 디렉티브 태그
의 기능(실행 결과)는 동일합니다. 두 태그의 차이점을 비교하면 다음과 같습니다.
인클루드 액션 태그 인클루드 디렉티브 태그 처리 시간 요청시 처리 .jsp -> .java 변환시 처리 데이터 처리 방법 param 액션 태그를 이용한 동적 처리 정적 처리 사용한 JSP 자바 파일 변환 포함된 .jsp가 각각의 자바 파일로 변환 포함된 .jsp가 포함하는 .jsp에 합쳐진 후 자바 파일로 변환
그때도 예시를 들었지만 velog에서 상단의 로고와 사용자 정보칸은 어느 페이지를 가도 유지가 됩니다. 이런 화면을 모든 페이지마다 구현하면 효율이 나쁘겠죠? 그래서 인클루드를 통해서 반복되는 페이지를 삽입해 쉽게 프로그래밍할 수 있도록 만들 수 있습니다.
인클루드 액션 태그는 다음과 같이 사용합니다.
<jsp:include page="jsp 파일" flush="true/false"></jsp:include>
여기서
flush
속성은page
에 지정된 JSP를 실행하기 전에 출력 버퍼를 비울지(true) 아닐지(false)를 결정합니다.
또한 데이터 처리는 <jsp:param name="" value="" />
태그를 사용해서 전달하게 됩니다. 받는 측에서는 request.getParameter(name)
으로 value의 값을 받습니다.
먼저 다른 JSP를 포함할 JSP인 parentJSP.jsp
를 작성합니다.
<%@ page
contentType="text/html;charset=UTF-8"
language="java"
pageEncoding="UTF-8"
%>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>부모 JSP 파일입니다.</h1>
<jsp:include page="childJSP.jsp" flush="true">
<jsp:param name="data" value="인클루드 액션 태그" />
</jsp:include>
<!-- 인클루드 액션 태그를 사용해 다른 파일을 포함 + 파라미터로 data라는 이름의 데이터를 넘김 -->
</body>
</html>
이번엔 포함될 childJSP.jsp
를 작성합니다.
<%@ page
contentType="text/html;charset=UTF-8"
language="java"
pageEncoding="UTF-8"
%>
<!-- 부모로 부터 받은 데이터를 처리하는 스크립트 -->
<%
request.setCharacterEncoding("UTF-8");
String data = request.getParameter("data");
%>
<html>
<head>
<title>Title</title>
</head>
<body>
<div style="background-color: greenyellow">
<h2>자식 JSP 파일입니다.</h2>
<p>부모로부터 전달받은 값: <%=data %></p>
</div>
</body>
</html>
이렇게 작성한 후 서버를 실행해서 parentJSP.jsp
로 접속하면 다음과 같이 childJSP.jsp
가 포함이 된 것을 볼 수 있습니다. param 태그를 통해 전달된 값까지 잘 전달이 되었죠?