본문 바로가기
📌 Front End/└ JSP

[JSP] JSP에서 다른 컨텐츠를 포함하는 3가지 방법 <%@ include file="" %> <jsp:include> <c:import>

by 쫄리_ 2024. 5. 21.
728x90
반응형

⭐ 포함될 html조각에는 <html><body>의 시작, 마침 태그가 있어서는 안된다.


1. 스크립트 태그

<%@ include file="" %>

 

- 정적 include 방식

- include하는 jsp 파일내에 복사되어 같이 컴파일됨

- include되는 jsp파일 내 전역변수를 상위 jsp에서 사용가능


2. 액션 태그

<jsp:include page="" />
<jsp:include page = "포함할 다른 페이지" flush = "true" />

 

page : 포함할 다른 JSP 페이지의 경로 지정
flush : "page"에서 지정한 JSP 페이지를 실행하기 전에 출력 버퍼를 flush할지 여부 지정 (default = "false")

 

- 동적 include 방식

- include되는 jsp파일의 출력결과(Html 코드)만 포함

- include되는 jsp파일의 변수 사용 불가

- <jsp:param> 태그로 값 전송 가능

- 다른 JSP의 실행 결과 & 코드를 포함할 때 사용하는 액션 태그

※ flush : "true"? "false"?
flush를 "true"로 지정하게 되면 <jsp:include ~>를 실행하는 시점에 출력 버퍼에 저장된 내용들을 flush한다는 의미이다.
출력 버퍼를 flush하게 되면 client에게 response를 보내게 되고 HTTP 메시지의 가장 상단에 응답 상태 코드가 먼저 보내지기 때문에 <jsp:include ~>이후에 새로운 헤더 정보를 추가해도 반영되지 않는다.

만약 sub.jsp에 대한 include 태그에서 "flush = true"로 설정했다면 sub.jsp로 요청 흐름이 넘어갈 때 main.jsp에서는 이미 response를 보내기 때문에 sub.jsp에서 response에 데이터를 추가해도 반영되지 않는다.
반면에 위에 코드에서 볼수 있듯이 sub.jsp에 대한 include 태그에서 "flush = false"로 설정했다면 sub.jsp로 요청 흐름이 넘어가더라도 main.jsp에서는 flush를 하지 않고, 그에 따라서 sub.jsp에서 response에 데이터를 추가하면 다시 main.jsp로 요청 흐름이 넘어올때 response에 추가한 데이터가 반영되어서 main.jsp에서 최종적인 response message를 client에게 응답한다.

 


파라미터 전달

<jsp:include ~~~~~>
    <jsp:param name="~~" value="~~" />
    <jsp:param name="~~" value="~~" />
</jsp:include>
jsp:include에 의해서 요청 흐름이 넘어갈때 보낼 파라미터들을 설정한다고 보면 된다.

 

- <jsp:include>에 포함된 다른 JSP 페이지에게 <jsp:param>을 통해서 (name, value)인 파라미터 전달
- <jsp:include>에 포함된 다른 JSP 페이지에서는 request.getParameter("~~")를 통해서 파라미터를 받을 수 있다.
- <jsp:param>은 <jsp:include>의 자식 태그로써 <jsp:include> 태그 내부에서만 활용 가능하다


사용예시 1

파라미터 전달 하는 페이지
파라미터 전달 받는 페이지


사용예시 2

info_table.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<table width="100%" border="1">
    <tr>
        <td>제품번호</td>
        <td>XXXX</td>
    </tr>
    <tr>
        <td>가격</td>
        <td>5000원</td>
    </tr>
</table>
 
<!-- param_result.jsp에서 실행한 결과 가져오기 -->
<jsp:include page="param_result.jsp" flush="false">
    <jsp:param name="type" value="A"/>
</jsp:include>
 
</body>
</html>

 

param_reseult.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
 
<%
    String type = request.getParameter("type");
    String value = "";
 
    if(type == null){
        return;
    }
    else if(type.equals("A")){
        value = "강한 내구성";
    }
    else if(type.equals("B")){
        value = "쓸만한 내구성";
    }
    else{
        value = "안좋은 내구성";
    }
%>
 
<table width="100%" border="1">
    <tr>
        <td>타입</td>
        <td><%=type%></td>
    </tr>
    <tr>
        <td>특징</td>
        <td><%=value%></td>
    </tr>
</table>
</body>
</html>

 

※ <jsp:param>  이미 동일한 이름의 파리미터가 존재한다면?

URL : http://localhost:8080/param_reseult.jsp?type=B
요청 URL에 (type, "B") 파라미터가 포함되어 있다고 가정

 

<jsp:include page="param_result.jsp">
     <jsp:param name="type" value="A"/>
</jsp:include>
- 여기서 (type, "A")이라는 새로운 파라미터를 또 전달하게 되면
param_reseult.jsp 측에서는 "type" 파라미터에 대해서 ("A", "B")인 2개의 value를 갖게 된다.

 


3. JSTL 태그

<c:import url="" />

 

- 동적 include 방식

- include되는 jsp파일의 출력결과(Html 코드)만 포함

- 외부자원 사용가능

- <c:param> 태그로 값 전송 가능

<c:import! url="include 할 파일의 URL"
     var="읽어올 데이터를 저장할 변수명"
     scope="변수의 공유 범위"
     varReader="리소스의 내용을 Reader 객체로 읽어올 때 사용"
     charEncoding="읽어온 데이터의 캐릭터셋 지정" />

 

 

728x90
반응형