JSP 포함 지시문, JSP 포함 조치 및 JSP 태그 파일 사용으로 파일을 포함시키는 것의 차이점은 무엇입니까?


155

JSP로 템플릿을 만드는 두 가지 방법이있는 것 같습니다. 이 문장 중 하나가 포함 된 파일 포함

<%@ include file="foo.html" %>
<jsp:include page="foo.html" />

또는 JSP 태그 파일 사용

// Save this as mytag.tag
<%@ tag description="Description" pageEncoding="UTF-8"%>
<html>
<head>
</head>
<body>
    <jsp:doBody/>
</body>
</html>

그리고 다른 JSP 페이지에서

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:mytag>
    <h1>Hello World</h1>
</t:mytag>

어떤 방법을 사용해야합니까? 이제는 더 이상 사용되지 않는 것으로 간주됩니까 아니면 다른 사용 사례를 모두 다루고 있습니까?

편집하다

이 태그 파일을 include를 사용하는 것과 동일하지 않습니까?

// Save this as product.tag
<%@ tag description="Product templage" pageEncoding="UTF-8"%>
<%@ tag import="com.myapp.Product" %>
<%@ attribute name="product" required="true" type="com.myapp.Product"%>

Product name: ${product.name} <br/>
Quantity: ${product.quantity} <br/>

그리고 다른 JSP에서 호출하십시오.

<%@ taglib prefix="t" tagdir="/WEB-INF/tags" %>

<t:product>
    <c:forEach items="${cart.products}" var="product">
        <t:product product="${product}"/>
    </c:forEach>
</t:product>

그것은 include를 사용하고 매개 변수를 전달하는 것과 매우 똑같습니다. 태그 파일은 포함과 동일합니까?

답변:


293

JSP 구문 요소 개요

먼저,보다 명확하게하기 위해 JSP 구문 요소에 대한 간단한 개요가 있습니다 .

  • 지시문 : 이들은 JSP 페이지에 관한 정보를 전체적으로 전달합니다.
  • 스크립팅 요소 : 선언, 표현식, 스크립틀릿 및 주석과 같은 Java 코딩 요소입니다.
  • 객체범위 : JSP 객체는 명시 적 또는 암시 적으로 생성 될 수 있으며 JSP 페이지 또는 세션의 어느 곳에서나 지정된 범위 내에서 액세스 할 수 있습니다.
  • 조치 : 오브젝트를 작성하거나 JSP 응답 (또는 둘 다)의 출력 스트림에 영향을줍니다.

컨텐츠가 JSP에 포함되는 방법

JSP 파일에서 컨텐츠를 재사용하는 몇 가지 메커니즘이 있습니다.

다음 JSP의 콘텐츠를 포함하는 4 메커니즘 으로 분류 될 수 직접 재사용 :
(인용 제 3 개 메커니즘에 대해 "헤드 퍼스트 서블릿과 JSP" )

1) include 지시문 :

<%@ include file="header.html" %>

정적 : 파일 속성 값의 내용을 현재 페이지에 추가합니다. 번역시 에 추가합니다 . 이 지시문은 원래 HTML 헤더와 같은 정적 레이아웃 템플릿을위한 것입니다.

2) <jsp:include> 표준 행동 :

<jsp:include page="header.jsp" />

동적 : 페이지 속성 값의 내용을 현재 페이지에 추가합니다. 요청시 에 추가합니다 . JSP에서 오는 동적 컨텐츠를위한 것입니다.

3) <c:import>JSTL 태그 :

<c:import url=”http://www.example.com/foo/bar.html” />

동적 : 요청시 URL 속성 값의 컨텐츠를 현재 페이지에 추가합니다 . 그것은 많이 작동 <jsp:include>하지만 더 강력하고 유연합니다. 다른 두 가지 포함과 달리 <c:import> URL은 웹 컨테이너 외부에서 올 수 있습니다 !

4) 서곡과 코다 :

정적 : 전주와 코다 는 페이지의 시작과 끝에 만 적용 할 수 있습니다 .
당신은 암시 적으로 포함 할 수 있습니다 서곡 (또한 헤더)와 codas 추가하여 JSP 페이지의 그룹 (또한 바닥 글) <include-prelude><include-coda>내에서 각각 요소 <jsp-property-group>웹 응용 프로그램의 요소 web.xml 파일의 배포 설명. 여기에서 더 읽어보십시오 :
암시 적 구성 시작시 포함 및 종료 된 JSP의
정의 암시 포함


태그 파일 은 콘텐츠 재사용 의 간접적 인 방법 으로 재사용 가능한 컨텐츠 캡슐화 . 태그 파일은 A와 재사용 JSP 코드의 단편을 포함하는 소스 파일 사용자 정의 태그 .

포함 및 태그 파일의 목적이 다릅니다.

태그 파일 (JSP 2.0에 도입 된 개념)은 사용자 정의 태그를 작성하기위한 옵션 중 하나입니다. 맞춤 태그 를 더 빠르고 쉽게 구축 할 수있습니다. 맞춤 태그태그 확장이라고도하는 는 다른 Java 구성 요소가 제공하는 사용자 정의 논리 및 출력을 JSP 페이지에 삽입 할 수있는 JSP 요소입니다. 사용자 정의 태그를 통해 제공되는 논리는 태그 핸들러 라고하는 Java 객체로 구현됩니다 .

사용자 정의 태그로 수행 할 수있는 일부 작업의 예에는 암시 적 객체 작업, 양식 처리, 데이터베이스 및 전자 메일 및 디렉토리와 같은 기타 엔터프라이즈 서비스 액세스 및 흐름 제어 구현이 포함됩니다.


편집에 대하여

어쩌면 귀하의 예제 ( Edit )에서 직접 포함과 태그 파일을 사용하는 것에는 차이가 없습니다. 그러나 사용자 정의 태그에는 다양한 기능이 있습니다 . 그들은 할 수있다

  • 호출 페이지에서 전달 된 속성을 사용하여 사용자 정의하십시오.

  • 변수를 호출 페이지로 다시 전달하십시오.

  • JSP 페이지에 사용 가능한 모든 오브젝트에 액세스하십시오.

  • 서로 의사 소통하십시오. JavaBeans 구성 요소를 작성 및 초기화하고 한 태그에서 해당 Bean을 참조하는 공용 EL 변수를 작성한 후 다른 태그에서 Bean을 사용할 수 있습니다.

  • 서로 중첩되고 개인 변수를 통해 통신합니다.

"Pro JSP 2": JSP 사용자 정의 태그 이해 에서이 내용을 읽으십시오 .


유용한 독서.


결론

각 작업에 적합한 도구를 사용하십시오.


재사용 가능한 컨텐츠캡슐화하는 데 도움이되는 사용자 정의 태그 를 작성하는 빠르고 쉬운 방법으로 태그 파일사용하십시오 .

JSP에 내용을 포함시키는 것에 관해서는 여기 에서 인용 하십시오 :

  • 파일 이 거의 변경되지 않으면 include 지시문을 사용하십시오 . 가장 빠른 메커니즘입니다. 컨테이너가 변경 사항을 자동으로 감지하지 않으면 기본 페이지 클래스 파일을 삭제하여 변경 사항을 강제로 적용 할 수 있습니다.
  • 포함 변경 작업은 자주 변경되는 내용에 대해서만 사용하고 기본 페이지가 요청 될 때까지 포함 할 페이지를 결정할 수없는 경우에 사용하십시오.

그러나 <jsp : include>는 태그 파일을 사용하는 것과 같지 않습니까? 차이가 보이지 않습니다. 변수를 태그 파일에 전달할 수있는 것처럼 <jsp : include>에 포함 된 파일에 변수를 전달할 수 있습니다. 두 방법 모두 콘텐츠를 재사용 할 수있게 해주 며, 정확히 같은 일을하는 것 같습니다. 그들의 이름 이외의 차이점이 있습니까?
sonicboom 2013

@sonicboom 내 답변 업데이트
informatik01

1
@ informatik01 매우 좋은 답변, 깊이, 멋진 형식 및 매우 편리한 4 가지 메커니즘 목록에 감사드립니다.
Russell Silva

1
<* @ include url ..>보다 <jsp : include>의 장점은 무엇입니까?
Krsna Chaitanya

@KrsnaChaitanya 참고 : *include 지시문에 오타 (별표 )가 있습니다. <jsp:include>표준 include 조치 이며 <%@ include file="" %>include 지시문 입니다. 장점을 간략하게 설명하는 마지막 섹션 (회색 상자에서)을 읽으십시오 (예 : 서로 선택할 때 권장 사항). 자세한 설명은 이 기사 를 확인하십시오 . 도움이 되었기를 바랍니다.
informatik01

21

가능한 중복 질문

<@include>-지시문 태그는 생성 된 서블릿 코드를 작성하기 전에 포함 된 파일의 컨텐츠를 JSP로 병합하도록 JSP 컴파일러에 지시합니다. 포함 페이지의 텍스트를 잘라내어 JSP에 붙여 넣는 것과 같습니다.

  • 런타임시 하나의 서블릿 만 실행됩니다.
  • 상위 페이지에 선언 된 스크립틀릿 변수는 포함 된 페이지에서 액세스 할 수 있습니다 (동일한 페이지 임).
  • 포함 된 페이지는 독립형 JSP로 컴파일 할 필요가 없습니다. 코드 조각 또는 일반 텍스트 일 ​​수 있습니다. 포함 된 페이지는 독립형으로 컴파일되지 않습니다. 포함 된 페이지는 확장명을 가질 수 있지만 .jspf는 일반적으로 사용되는 확장명이되었습니다.
  • 이전 컨테이너의 한 가지 단점은 상위 페이지가 업데이트 될 때까지 포함 페이지에 대한 변경 사항이 적용되지 않을 수 있다는 것입니다. Tomcat의 최신 버전은 포함 페이지에 업데이트가 있는지 확인하고 업데이트 된 경우 부모를 강제로 다시 컴파일합니다.
  • 추가 단점은 코드가 생성 된 서블릿의 서비스 메소드에 직접 인라인되므로 메소드가 매우 커질 수 있다는 것입니다. 64KB를 초과하면 JSP 컴파일이 실패 할 수 있습니다.

<jsp:include> -반면에 JSP Action 태그는 컨테이너가이 페이지의 실행을 일시 중지하고 포함 된 페이지를 실행 한 다음 해당 페이지의 출력을이 페이지의 출력으로 병합하도록 지시합니다.

  • 포함 된 각 페이지는 런타임시 별도의 서블릿으로 실행됩니다.
  • 런타임에 페이지가 조건부로 포함될 수 있습니다. 이것은 종종 포함 된 페이지를 빌드하는 프레임 워크를 템플릿 화하는 데 유용합니다. 상위 페이지는 일부 런타임 조건에 따라 포함 할 페이지를 결정할 수 있습니다 (있는 경우).
  • 스크립틀릿 변수의 값은 포함 페이지에 명시 적으로 전달되어야합니다.
  • 포함 된 페이지는 자체적으로 실행될 수 있어야합니다.
  • 생성 된 서블릿 클래스에서 최대 메소드 크기를 초과하여 컴파일 오류가 발생할 가능성이 적습니다.

필요에 따라 <@include>또는 <jsp:include>


1
당신이 당신의 질문에 보여준 것처럼 의미 <t:mytag><h1>Hello World</h1></t:mytag>합니까? 그것은 포함이 아니며 태그의 일반적인 사용입니다 ( <jsp:useBean>또는 <c:if>).
Uooo

그렇다면 태그 파일을 사용하는 것의 차이점은 무엇입니까?
sonicboom 2013

9

<jsp:include />over의 주요 장점 <%@ include >은 다음과 같습니다.

<jsp:include /> 매개 변수를 전달할 수 있습니다

<jsp:include page="inclusion.jsp">
    <jsp:param name="menu" value="objectValue"/>
</jsp:include>

불가능하다 <%@include file="somefile.jsp" %>


태그 파일은 어떻습니까? 어떻게 작동하는지 알고 있습니다. 태그 파일이 동일한 기능을 제공하는 것처럼 포함되어 태그 파일과 어떤 관련이 있는지 궁금합니다. 태그 파일 사용과 포함 사용의 차이점은 무엇입니까?
sonicboom 2013

방법은 <%@include file="somefile.jsp?menu=value" %>? 이것도 제한되어 있습니까?
Roshana Pitigala

5

세 가지 템플릿 옵션 - <%@include>, <jsp:include><%@tag> 유효하며, 세 커버 다른 사용 사례.

을 사용 <@include>하면 JSP 파서는 컴파일 전에 포함 된 파일의 내용을 JSP에 인라인합니다 (C와 유사 #include). 예를 들어 웹 응용 프로그램의 모든 페이지에 머리글, 바닥 글 또는 탐색 요소를 포함하려는 경우 간단한 정적 콘텐츠와 함께이 옵션을 사용합니다. 포함 된 컨텐츠는 컴파일 된 JSP의 일부가되며 런타임시 추가 비용이 들지 않습니다.

<jsp:include>(그리고 <c:import>비슷하고 훨씬 강력한 JSTL 's )는 동적 컨텐츠에 가장 적합합니다. 로컬 또는 원격으로 다른 URL의 컨텐츠를 포함해야하는 경우에 사용하십시오. 포함하는 리소스가 동적 일 때 또는 포함 된 컨텐츠가 포함 페이지와 충돌하는 변수 또는 Bean 정의를 사용하는 경우. <c:import>또한 포함 된 텍스트를 변수에 저장하여 추가로 조작하거나 재사용 할 수 있습니다. 이 두 가지 모두 디스패치에 대한 추가 런타임 비용이 발생합니다. 이는 최소이지만 동적 포함이 "무료"가 아님을 알아야합니다.

재사용 가능한 사용자 인터페이스 구성 요소를 작성하려는 경우 태그 파일을 사용하십시오. 예를 들어 위젯 목록이 있고 위젯을 반복하고 각 속성 (테이블 또는 양식)을 표시하려는 경우 태그를 작성합니다. 태그는 인수를 사용할 <%@tag attribute>수 있으며 이러한 인수는 메소드 매개 변수와 비슷한 필수 또는 선택적 일 수 있습니다.

태그 파일은 태그 라이브러리를 작성하는 더 간단한 JSP 기반 메커니즘입니다 (JSP 2.0 이전). Java 코드를 사용하여 작성해야했습니다. 태그에서 렌더링이 많이 필요한 경우 JSP 태그 파일을 작성하는 것이 훨씬 깔끔합니다. 태그를 Java로 작성한 경우 Java와 HTML 코드를 혼합 할 필요가 없습니다.


1

에 따르면 : Java Revisited

  1. include 지시문에 포함 된 자원은 jsp 변환 시간 동안로드되고 include 조치에 포함 된 자원은 요청 시간 동안로드됩니다.

  2. jsp 파일이 다시 컴파일 될 때까지 include 지시문의 경우 포함 된 자원에 대한 변경 사항이 표시되지 않습니다. 포함 조치의 경우 다음 요청에서 포함 된 자원의 모든 변경 사항을 볼 수 있습니다.

  3. 포함 지시문은 정적 가져 오기이고 포함 조치는 동적 가져 오기입니다.

  4. 포함 지시문은 파일 속성을 사용하여 포함 할 자원을 지정하고 포함 조치는 동일한 목적으로 페이지 속성을 사용합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.