반응형

<jsp:include>는 JSP 페이지에서 다른 JSP를 포함할 때 사용하는 태그이지만, 이 방식은 동기적으로 동작하며, 포함된 페이지가 모두 처리된 후에야 다음 코드가 실행됩니다. 즉, callback 함수 같은 개념이 직접적으로 존재하지 않습니다.

하지만, 아래와 같은 방식으로 원하는 동작을 구현할 수 있습니다.


해결 방법

1️⃣ JSP 내부에서 직접 함수 호출 (동기적)

<jsp:include>가 실행된 후 JSP의 Java 코드에서 특정 함수를 호출하는 방법입니다.

<jsp:include page="includedPage.jsp" />
<% afterIncludeCallback(); %>

🔹 afterIncludeCallback() 함수는 includedPage.jsp가 실행된 후 호출됨

하지만, 이 방식은 JSP가 렌더링될 때만 동작하며 동적인 클라이언트 측 로직을 수행할 수 없습니다.


2️⃣ JavaScript를 활용한 비동기 처리 (AJAX 방식)

만약 callback 개념처럼 포함된 JSP가 실행된 후 특정 동작을 수행하고 싶다면, AJAX를 이용하는 것이 효과적입니다.

✅ AJAX + Servlet 방식

<script>
  function loadIncludedPage() {
    fetch('includedPage.jsp') // includedPage.jsp를 비동기 로드
      .then(response => response.text())
      .then(html => {
        document.getElementById('includedContent').innerHTML = html;
        afterIncludeCallback(); // 포함된 페이지 로딩 후 실행할 함수
      });
  }

  function afterIncludeCallback() {
    alert("포함된 JSP 로딩 완료!");
  }

  window.onload = loadIncludedPage; // 페이지 로드 후 실행
</script>

<div id="includedContent"></div>

이 방식은 실제 클라이언트에서 비동기로 JSP 파일을 로드하고, 로드 완료 후 콜백 함수 실행이 가능합니다.


3️⃣ Servlet을 활용한 동적 데이터 처리

만약 <jsp:include>가 데이터 처리를 위해 사용된다면, Servlet을 호출하여 데이터를 받아온 후 특정 동작을 수행하는 방법도 가능합니다.

🔹 includedPage.jsp 대신 IncludedServlet.java 사용

@WebServlet("/IncludedServlet")
public class IncludedServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<p>포함된 Servlet 내용</p>");
        out.close();
    }
}

🔹 JSP에서 AJAX로 Servlet 호출

<script>
  function loadIncludedServlet() {
    fetch('IncludedServlet')
      .then(response => response.text())
      .then(data => {
        document.getElementById('includedContent').innerHTML = data;
        afterIncludeCallback();
      });
  }

  function afterIncludeCallback() {
    console.log("Servlet 호출 후 실행할 코드");
  }

  window.onload = loadIncludedServlet;
</script>

<div id="includedContent"></div>

🏆 결론

1️⃣ 동기적 실행이 필요하면?

👉 <jsp:include page="includedPage.jsp" /> 이후에 바로 Java 코드 실행

2️⃣ 비동기적 실행 (callback 기능)을 원하면?

👉 AJAX + JavaScript를 활용하여 fetch()로 JSP or Servlet을 호출 후 callback 실행

이렇게 하면 <jsp:include>의 단점을 보완하면서 비동기적인 callback 로직을 구현할 수 있습니다. 🚀

반응형

+ Recent posts