반응형

배열 aa 안에 문자열 bb 값이 포함되어 있는지 확인하려면 Arrays.asList(aa).contains(bb) 또는 Stream API를 사용할 수 있습니다.

1. Arrays.asList().contains() 사용

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String[] aa = {"AA", "BB", "CC"};
        String bb = "BB";

        boolean exists = Arrays.asList(aa).contains(bb);
        System.out.println("포함 여부: " + exists); // true 출력
    }
}

이 방법은 간단하지만 내부적으로 List 변환이 필요합니다.


2. Stream API 사용

import java.util.stream.Stream;

public class Main {
    public static void main(String[] args) {
        String[] aa = {"AA", "BB", "CC"};
        String bb = "BB";

        boolean exists = Stream.of(aa).anyMatch(s -> s.equals(bb));
        System.out.println("포함 여부: " + exists); // true 출력
    }
}

이 방법은 Stream을 사용하여 한 줄로 해결할 수 있습니다.


3. for 루프 사용 (전통적인 방법)

public class Main {
    public static void main(String[] args) {
        String[] aa = {"AA", "BB", "CC"};
        String bb = "BB";

        boolean exists = false;
        for (String s : aa) {
            if (s.equals(bb)) {
                exists = true;
                break;
            }
        }
        System.out.println("포함 여부: " + exists); // true 출력
    }
}

이 방법은 가장 기본적인 방법으로, 작은 배열에서는 성능 차이가 크지 않지만, 큰 배열에서는 Set을 사용하는 것이 효율적일 수 있습니다.

필요에 따라 적절한 방법을 선택하세요! 😊

반응형
반응형

📌 코드:

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Input Tooltip</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            height: 200vh; /* 스크롤 테스트를 위해 높이 추가 */
            padding: 20px;
        }
        .tooltip {
            position: absolute;
            background: rgba(0, 0, 0, 0.8);
            color: white;
            padding: 8px;
            border-radius: 5px;
            font-size: 14px;
            max-width: 300px;
            word-wrap: break-word;
            display: none;
            z-index: 1000;
        }
        input {
            width: 300px;
            padding: 5px;
        }
    </style>
</head>
<body>

    <input type="text" id="inputField" value="이것은 너무 길어서 input 창에 다 안보이는 값입니다. 여기에 마우스를 올려보세요.">
    <div id="tooltip" class="tooltip"></div>

    <script>
        const inputField = document.getElementById("inputField");
        const tooltip = document.getElementById("tooltip");

        inputField.addEventListener("mouseover", function() {
            tooltip.textContent = inputField.value;
            tooltip.style.display = "block";
        });

        inputField.addEventListener("mousemove", function(event) {
            // pageX, pageY를 사용하여 스크롤 영향을 받지 않도록 조정
            tooltip.style.top = (event.pageY + 10) + "px";
            tooltip.style.left = (event.pageX + 10) + "px";
        });

        inputField.addEventListener("mouseout", function() {
            tooltip.style.display = "none";
        });
    </script>

</body>
</html>
반응형
반응형

<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