D+28 (1) [페이지 모듈화(include)]
✅include : 경로를 잡아주는 것만 명확하면 절대 오류가 나지 않음
✅오늘 배울 부분 : <jsp:include>, <jsp:forward>, <jsp:param>
✅ 한 웹 사이트를 구성하는 페이지들은 동일한 상단 메뉴와 좌측 메뉴, 하단 푸터(footer)를 갖는 경우가 많음 .
<jsp:include> 액션태그와 include 디렉티브를 사용하면 공통 화면을 모듈화해서 코드가 중복되는 것을 방지할 수 있다.
jsp:include 액션 태그를 이용한 페이지 모듈화
> 동작 방식

> 구문 : 잘 보기
<jsp:include page="포함할페이지" flush="true" />
page 속성 : 포함할 JSP 페이지
flush 속성 : 지정한 JSP 페이지를 실행하기 전에 출력 버퍼를 플러시 할 지의 여부를 지정한다.
- true이면 출력 버퍼를 플러시하고, false이면 하지 않는다.
> 예시
네이버뉴스 - 페이지 모듈화를 사용
페이지를 매번 카피해서 만들기 보다, 모듈화를 시켜서 사용하면 초반엔 번거롭지만 나중에 전체 수정할 때 훨씬 편하기 때문에.
상단부 : Top.jsp
가운데 : content.jsp : 가장 많이 변화함 - 나머지는 바뀌지 않더라도 얘만 바뀌면 됨.
오른쪽 : right.jsp
밑에 : bottom

예시1) 메인 내용 ➡️ 중간에 include를 sub.jsp 내용 넣기 ➡️ 나머지 메인 내용 넣기
경로에서 '..' : 폴더 두개 밖으로 나감
aug25폴더에 있는 main에서 aug22에 있는 now로 가려면 ➡️ '../aug22/now.jsp'로 경로 잡아야 함
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>main</title></head>
<body>
main.jsp에서 생성한 내용.
<jsp:include page="7_02_sub.jsp" flush="false" />
include 이후의 내용.
</body>
</html>
<%@ page contentType="text/html; charset=UTF-8"%>
<p>
sub.jsp에서 생성한 내용.
</p>
틀을 잡고 작업하기 쉬워짐 : include 가 많이 사용되는 용도
module파일에 있는 top, bottom, left.jsp를 include 해서 가져옴
그럼 layout 파일에 직접 내용을 넣지 않고 module에 있는 파일에 내용을 넣은 다음, 가져와서 바로 출력할 수 있음
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>layout1</title></head>
<body>
<table width="400" border="1" cellpadding="0" cellspacing="0">
<tr>
<td colspan="2">
<jsp:include page="./module/top.jsp" flush="false" />
</td>
</tr>
<tr>
<td width="100" valign="top">
<jsp:include page="./module/left.jsp" flush="false" />
</td>
<td width="300" valign="top">
<!-- 내용 부분: 시작 -->
레이아웃1
<br><br><br>
<!-- 내용 부분: 끝 -->
</td>
</tr>
<tr>
<td colspan="2">
<jsp:include page="./module/bottom.jsp" flush="false" />
</td>
</tr>
</table>
</body>
</html>
출력 내용
include: param 을 이용해서 포함될 페이지에 파라미터 추가하기
> include 액션 태그는 param 액션 태그를 이용해서 포함할 JSP페이지에 파라미터를 추가할 수 있다.
> top.jsp를 모듈화 할 때, param1은 value1으로, param2는 value2로 할 때, param이란 태그로 top.jsp에 값을 전송할 수 있다.
param 액션 태그는 include 액션 태그의 자식 태그로 추가됨
param 액션 태그의 name, value 속성에는 각각 포함할 페이지에 새로 추가할 파라미터의 이름가 값을 입력한다.
value 속성에는 값을 직접 지정할 수도 있고, 또는 표현식을 이용해서 값을 지정할 수도 있다.
<% String type = "typeA"; %>
<jsp:include page="..."/>
<jsp:param name="name" value="최범균" /> value에 값을 직접 입력
<jsp:param name="type" value="<% type /> value에 표현식으로 입력
</jsp:include>
> <jsp:param> 액션 태그의 동작 방식

예시5) infosub : info에 어떤 값을 넣을지에 따라 내용이 달라지도록 만들게 할 수 있음 param을 통해 값을 전송함
예시6) body_main/body_sub : url에서 ?name=새로운네임 / 을 넣어주면 게속해서 파라미터값이 생길 수 있음
include 디렉티브
<jsp:include>와 달리, include 디렉티브는 포함되는 방식에 있어서 큰 차이를 보임
<jsp:include>는 다른 JSP로 흐름을 이동시켜 그 결과물을 현재 위치에 포함시키는 방식
include 디렉티브는 다른 파일의 내용을 현재 위치에 삽입한 후에 JSP파일을 자바 파일로 변환하고 컴파일 하는 방식 - 코드 차원에서
> 구문 : <%@ include file="포함할파일 %>
: file 속성은 include 디렉티브를 사용하여 포함할 파일의 경로를 나타냄 : include 디렉티브를 사용하면, JSP 파일을 자바 파일로 변환하기 전에 include 디렉티브에서 지정한 파일의 내용을 해당 위치에 삽입하고, 그 결과로 생긴 자바 파일을 컴파일하게 됨
>디렉티브의 처리 순서
- includer.jsp라는 파일에서 선언되지 않은 변수가 있다. 그러나 includer 파일에서 includee라는 파일을 포함하고 있다면(include) includee에서 선언된 변수를 사용할 수 있게 된다! : include 디렉티브 이용 ➡️ 코드 차원에서 삽입이 이루어지기 때문에!!
※jspf : include 디렉티브를 사용해서 포함하는 파일의 경우는 일반 JSP 파일과 구분하기 위해 확장자를 jspf로 사용한다.
JSP Fragment, 즉 JSP의 소스 코드 조각을 의미한다.
> include 디렉티브의 활용
: 모든 JSP 페이지에서 사용되는 변수 지정
: 저작권 표시와 같은 간단하면서도 모든 페이지에서 중복되는 문장
> web.xml에 삽입 :공용 변수
- 대다수의 jsp 페이지가 어떤 것을 include 해야 할 때, include한다는 것을 매번 복붙해도 된다. 하지만 더 편하게 하기 위해서 변수를 지정하는 부분을 web.xml에 파일에 작성해서 자동으로 include 하도록 만드는 것이다.
<실행해보기!>
jsp: include 액션 태그와 include 디렉티브 정리
비교항목 | <jsp:include> | include 디렉티브 |
처리시간 | 요청 시간에 처리 | JSP 파일을 자바 소스로 변환할 때 처리 |
기능 | 별도의 파일로 요청 처리 흐름을 이동 | 현재 파일에 삽입시킴 |
데이터 전달방법 |
request 기본 객체나 <jsp:param>을 이용한 파라미터 전달 | 페이지 내의 변수를 선언한 후, 변수에 값 저장 |
용도 | 화면의 레이아웃의 일부분을 모듈화할 때 주로 사용된다. | 다수의 JSP 페이지에서 공통으로 사용되는 변수를 지정하는 코드나 저작권과 같은 문장을 포함한다. |
예제8) current_time이라는 변수가 없는데도 자동으로 include되어서 오류가 발생하지 않는다.