[JSP] 액션 태그 - 인클루드 액션 태그

Bam·2024년 5월 22일
0

Spring

목록 보기
35/48
post-thumbnail

액션 태그

JSP는 기존 서블릿에서 화면 구성과 비즈니스 로직을 분리하기 위해서 등장했다고 했었는데요. 초기에는 순조로웠습니다. 웹 페이지 형태가 단순했기 때문이죠.

그러나 점점 웹 페이지가 복잡해지자 JSP에 더 복잡한 자바코드를 사용하게 되었고 디자이너들은 이를 위해 자바를 따로 학습해야하는 불편한 과정을 거치게 되었습니다. 그래서 디자이너들을 위해 JSP에서 자바 코드를 최소한으로 줄이고 더 편하게 작업할 수 있도록 액션 태그들이 등장하게 되었습니다.

즉, 액션 태그는 JSP에서 자바 코드를 대체할 수 있게 해주는 태그라고 할 수 있습니다.

액션 태그에는 인클루드 액션 태그, 포워드 액션 태그, useBean 액션 태그, setProperty 액션 태그, getProperty 액션 태그가 있는데요. 이 중에서 오늘은 인클루드 액션 태그에 대해 알아보겠습니다.


include action tag

인클루드 액션 태그는 전에 디렉티브 태그를 다룰때 스쳐 지나갔던 인클루드 디렉티브 태그와 유사한 동작을 합니다. 인클루드 액션 태그는 하나의 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 태그를 통해 전달된 값까지 잘 전달이 되었죠?

0개의 댓글