JSP içeren dosyaları dahil etme yönergesi, JSP eylemi dahil etme ve JSP Etiket Dosyalarını kullanma arasındaki fark nedir?


155

Görünüşe göre JSP ile templasyon için iki yöntem var. Bu ifadelerden birine sahip dosyalar dahil etme

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

veya JSP etiket dosyalarını kullanma

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

Ve başka bir JSP sayfasında

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

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

Peki hangi yöntemi kullanmalıyım? Birisi artık kullanımdan kaldırılmış mı kabul ediliyor, yoksa ikisi de geçerli ve farklı kullanım durumlarını kapsıyor mu?

Düzenle

Bu etiket dosyasını bir içerme kullanmakla aynı şey değil mi?

// 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/>

Ve başka bir JSP'de

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

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

Bana bir dahil etme ve parametreleri aktarma ile aynı gibi geliyor. Etiket Dosyaları içerdikleri ile aynı mıdır?

Yanıtlar:


293

JSP Sözdizimi Öğelerine Genel Bakış

İlk olarak, işleri daha açık hale getirmek için, JSP sözdizimi öğelerine kısa bir genel bakış :

  • Yönergeler : Bunlar bir bütün olarak JSP sayfasıyla ilgili bilgileri aktarır.
  • Komut dosyası öğeleri : Bunlar, bildirimler, ifadeler, komut dosyaları ve yorumlar gibi Java kodlama öğeleridir.
  • Nesneler ve kapsamlar : JSP nesnelerine açık veya üstü kapalı olarak oluşturulabilir ve belirli bir kapsamda (ör. JSP sayfasındaki veya oturumdaki herhangi bir yerden) erişilebilir.
  • Eylemler : Bunlar JSP yanıtında (veya her ikisinde) nesne oluşturur veya çıktı akışını etkiler.

İçerik JSP'ye nasıl dahil edilir?

Bir JSP dosyasındaki içeriği yeniden kullanmak için çeşitli mekanizmalar vardır.

JSP'ye içerik eklemek için aşağıdaki 4 mekanizma doğrudan yeniden kullanım olarak kategorize edilebilir :
( "İlk İlk Servletler ve JSP" den alıntı yapan ilk 3 mekanizma için )

1) İçerme direktifi :

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

Statik : dosya özniteliğinin değerinden içeriği çeviri zamanında geçerli sayfaya ekler . Yönerge aslında HTML başlıkları gibi statik mizanpaj şablonları için tasarlanmıştır.

2) <jsp:include> standart eylem :

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

Dinamik : sayfa özniteliğinin değerinden içeriği istek anında geçerli sayfaya ekler . Daha çok JSP'lerden gelen dinamik içerik için tasarlandı.

3) <c:import>JSTL etiketi:

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

Dinamik : URL özniteliğinin değerinden içeriği istek anında geçerli sayfaya ekler . Çok benzer çalışır <jsp:include>, ancak daha güçlü ve esnektir: diğer ikisinin aksine, <c:import> url web Konteyner dışından olabilir !

4) Prelüdler ve kodalar:

Statik : prelüdler ve kodalar yalnızca sayfaların başlangıç ​​ve bitişlerine uygulanabilir .
Sen örtük içerebilir prelüdleri (diğer adıyla başlıklar) ve koda ekleyerek JSP sayfalarından bir grup için (diğer adıyla altbilgilerini) <include-prelude>ve <include-coda>bir dahilinde sırasıyla elemanları <jsp-property-group>Web uygulaması içinde eleman web.xml dağıtım tanımlayıcısı. Devamı burada:
Örtülü yapılandırılması Başındaki içerir ve Bitiş JSP'lerin
Tanımlama örtük içerir


Etiket Dosyası dolaylı bir içerik yeniden kullanımı yöntemidir , yeniden kullanılabilir içeriği kapsülleme yolu . Bir Etiket Dosyası bir şekilde tekrar kullanılabilir JSP kod parçasını içeren bir kaynak dosyasıdır özel etiket .

İçerir ve Etiket Dosyalarının AMACI farklıdır.

Etiket dosyası (JSP 2.0 ile tanıtılan bir kavram), özel etiketler oluşturma seçeneklerinden biridir. Özel etiketler oluşturmanın daha hızlı ve kolay bir yoludur. Etiket uzantıları olarak da bilinen özel etiketler , diğer Java bileşenleri tarafından sağlanan özel mantık ve çıkışın JSP sayfalarına eklenmesine izin veren JSP öğeleridir. Özel bir etiket aracılığıyla sağlanan mantık, etiket işleyici olarak bilinen bir Java nesnesi tarafından uygulanır.

Özel etiketlerle gerçekleştirilebilecek bazı görev örnekleri arasında örtük nesneler üzerinde çalışma, formları işleme, veritabanlarına ve e-posta ve dizinler gibi diğer kurumsal hizmetlere erişme ve akış denetimi uygulama yer alır.


Düzenlemeniz Hakkında

Örneğin, örneğinizde ( Düzenlemenizde ), doğrudan dahil etme ile Etiket Dosyası arasında hiçbir fark yoktur. Ancak özel etiketlerin zengin bir özellik kümesi vardır . Yapabilirler

  • Arayan sayfadan aktarılan özellikler aracılığıyla özelleştirilebilir.

  • Değişkenleri çağıran sayfaya geri aktarın.

  • JSP sayfalarında bulunan tüm nesnelere erişin.

  • Birbirinizle iletişim kurun. Bir JavaBeans bileşeni oluşturabilir ve başlatabilir, bir etikette bu fasulyeye başvuran genel bir EL değişkeni oluşturabilir ve ardından fasulyeyi başka bir etikette kullanabilirsiniz.

  • Birbirlerinin içine yuvalanın ve özel değişkenler aracılığıyla iletişim kurun.

Ayrıca bunu "Pro JSP 2" den okuyun: JSP Özel Etiketlerini Anlama .


Yararlı okuma.


Sonuç

Her görev için doğru araçları kullanın.


Etiket Dosyalarını , yeniden kullanılabilir içeriği kapsüllemenize yardımcı olabilecek özel etiketler oluşturmanın hızlı ve kolay bir yolu olarak kullanın .

JSP'de bulunan içeriğe gelince ( buradan alıntı yapın ):

  • Dosya nadiren değişirse include direktifini kullanın . En hızlı mekanizma. Kapsayıcınız değişiklikleri otomatik olarak algılamazsa, ana sayfa sınıfı dosyasını silerek değişikliklerin yürürlüğe girmesini sağlayabilirsiniz.
  • Dahil etme eylemini yalnızca sık sık değişen içerikler için ve hangi sayfanın ekleneceği ana sayfa istenene kadar karar verilemezse kullanın.

Ancak <jsp: include> etiket dosyalarını kullanmakla aynı şey değil mi? Herhangi bir fark göremiyorum ... Değişkenleri etiket dosyalarına geçirebildiğiniz gibi <jsp: include> ile birlikte gelen dosyalara değişkenler iletebilirsiniz. Her iki yöntem de içeriği yeniden kullanmanıza izin verir, aynı şeyi yapıyor gibi görünüyorlar. Aralarında isimleri dışında bir fark var mı?
sonicboom

@sonicboom Cevabımı güncelledi
informatik01

1
@ informatik01 çok güzel bir cevap, derinliği, güzel biçimlendirmeyi ve çok kullanışlı 4 mekanizma listesini takdir ediyorum.
Russell Silva

1
<jsp: include> over <* @ include url ..> 'nin avantajı tam olarak nedir?
Krsna Chaitanya

@KrsnaChaitanya Not: *dahil etme yönergesinde bir yazım hatası (yıldız işareti ) var. <jsp:include>standart bir içerme eylemidir , <%@ include file="" %>içerme direktifidir . Avantajları ana hatlarıyla belirten en son bölümü (gri kutuda) okuyun (örneğin, birini veya diğerini seçerken önerileri). Ayrıntılı açıklama için bu makaleye de göz atın. Bu yardımcı olur umarım.
informatik01

21

Olası Yinelenen Soru

<@include>- Yönerge etiketi, oluşturulan sunucu uygulaması kodunu oluşturmadan önce JSP derleyicisine dahil edilen dosyanın içeriğini JSP ile birleştirmesini bildirir. Kesme sayfanızdaki metni kesip doğrudan JSP'nize yapıştırmaya eşdeğerdir.

  • Çalışma zamanında yalnızca bir sunucu uygulaması yürütülür.
  • Üst sayfada bildirilen komut dosyası değişkenlerine dahil edilen sayfada erişilebilir (unutmayın, bunlar aynı sayfadır).
  • Eklenen sayfanın bağımsız bir JSP olarak derlenmesine gerek yoktur. Bir kod parçası veya düz metin olabilir. Eklenen sayfa hiçbir zaman bağımsız olarak derlenmeyecektir. Eklenen sayfa da herhangi bir uzantıya sahip olabilir, ancak .jspf geleneksel olarak kullanılan bir uzantı haline gelmiştir.
  • Eski kapsayıcıların bir dezavantajı, dahil edilen sayfalardaki değişikliklerin üst sayfa güncellenene kadar etkili olmayabileceğidir. Tomcat'in son sürümleri, dahil etme sayfalarını güncellemeler için kontrol eder ve güncellenirse üst öğeyi yeniden derlemeye zorlar.
  • Diğer bir dezavantaj, kodun doğrudan üretilen sunucu uygulamasının servis yöntemine yerleştirilmesinden dolayı, yöntemin çok büyük olabileceğidir. 64 KB'ı aşarsa, JSP derlemeniz başarısız olur.

<jsp:include> - Öte yandan JSP Eylem etiketi, kapsayıcının bu sayfanın yürütülmesini duraklatmasını, dahil edilen sayfayı çalıştırmasını ve bu sayfadaki çıktıyı bu sayfadan çıktıya birleştirmesini bildirir.

  • Dahil edilen her sayfa çalışma zamanında ayrı bir sunucu uygulaması olarak yürütülür.
  • Sayfalar çalışma zamanında koşullu olarak dahil edilebilir. Bu genellikle, sayfaları içerilen sayfalardan oluşturan çerçevelerin şablonlaştırılması için kullanışlıdır. Üst sayfa, varsa çalışma sayfasının durumuna göre hangi sayfanın ekleneceğini belirleyebilir.
  • Komut dosyası değişkenlerinin değerlerinin dahil etme sayfasına açıkça geçirilmesi gerekir.
  • Eklenen sayfa kendi başına çalıştırılabilmelidir.
  • Oluşturulan sunucu uygulaması sınıfında maksimum yöntem boyutunun aşılması nedeniyle derleme hatalarına girme olasılığınız düşüktür.

İhtiyaçlarınıza bağlı olarak, ya kullanabilir <@include>veya <jsp:include>


1
Yani sorunuzda gösterdiğiniz gibi mi <t:mytag><h1>Hello World</h1></t:mytag>? Bu bir dahil değildir, bir etiketin normal kullanımıdır ( <jsp:useBean>veya gibi <c:if>).
Uooo

Peki, etiket dosyalarını bir sayfada içeriğe dahil etmek için kullanılabilecek gibi göründüğü gibi etiket dosyalarını kullanma ile aralarındaki fark nedir?
sonicboom

9

<jsp:include />Üzerinde ana avantajı <%@ include >:

<jsp:include /> parametreleri geçirmeye izin verir

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

ki bu mümkün değil <%@include file="somefile.jsp" %>


Tagfiles ne olacak, inlcudes nasıl çalışır biliyorum. Etiket dosyalarının, aynı işlevselliği sağladıkları gibi içerdikleri ile nasıl ilgili olduğunu merak ediyorum. Tagfiles kullanma ile include kullanma arasındaki fark nedir?
sonicboom

nasıl <%@include file="somefile.jsp?menu=value" %>? Bu da kısıtlı mı?
Roshana Pitigala

5

Her üç şablon seçenekleri - <%@include>, <jsp:include>ve <%@tag>geçerlidir ve her üç kapak farklı kullanım durumları.

İle <@include>, JSP ayrıştırıcı derleme önce (bir C benzer #include) dahil dosya içeriğini JSP içine satır içi . Bu seçeneği basit, statik içerikle kullanırsınız: örneğin, web uygulamanızdaki her sayfaya üstbilgi, altbilgi veya gezinme öğeleri eklemek istiyorsanız. Dahil edilen içerik derlenmiş JSP'nin bir parçası haline gelir ve çalışma zamanında ekstra bir maliyet yoktur.

<jsp:include>(ve <c:import>benzer ve daha güçlü JSTL'ler) dinamik içeriğe en uygun olanlardır. Yerel veya uzak başka bir URL'den içerik eklemeniz gerektiğinde bunları kullanın; dahil ettiğiniz kaynağın kendisi dinamik olduğunda; veya içerilen içerik, dahil etme sayfasıyla çakışan değişkenler veya fasulye tanımları kullandığında. <c:import>ayrıca, içerilen metni daha fazla manipüle edebileceğiniz veya yeniden kullanabileceğiniz bir değişkende saklamanızı sağlar. Her ikisi de sevkiyat için ek bir çalışma zamanı maliyetine neden olur: Bu minimumdur, ancak dinamik içerme işleminin "ücretsiz" olmadığının farkında olmanız gerekir.

Yeniden kullanılabilir kullanıcı arabirimi bileşenleri oluşturmak istediğinizde etiket dosyalarını kullanın. Widget'ların bir listesi varsa, diyelim ve her birinin Widget'larını ve görüntüleme özelliklerini (bir tabloda veya formda) yinelemek istiyorsanız, bir etiket oluşturursunuz. Etiketler kullanarak <%@tag attribute>argümanlar alabilir ve bu argümanlar zorunlu ya da isteğe bağlı olabilir - bir şekilde yöntem parametreleri gibi.

Etiket dosyaları, Java kodunu kullanarak yazmak zorunda olduğunuz (JSP 2.0 öncesi) etiket kitaplıklarını yazmak için daha basit, JSP tabanlı bir mekanizmadır. Etikette yapılacak çok fazla oluşturma işlemi olduğunda JSP etiket dosyaları yazmak çok daha temizdir: etiketlerinizi Java'ya yazdıysanız yapmanız gereken gibi Java ve HTML kodunu karıştırmanız gerekmez.


1

Göre: Java Revisited

  1. İnclude yönergesine dahil edilen kaynaklar jsp çeviri süresi boyunca yüklenirken, include eylemi tarafından dahil edilen kaynaklar istek süresi boyunca yüklenir.

  2. Jsp dosyası yeniden derlenene kadar dahil etme yönergesi dahilinde, kaynaklarda yapılacak herhangi bir değişiklik görünmeyecektir. Ekleme eylemi söz konusu olduğunda, dahil edilen kaynaktaki herhangi bir değişiklik bir sonraki istekte görülebilir.

  3. Include yönergesi statik olarak içe aktarılırken, include eylemi dinamik olarak içe aktarmadır.

  4. Include yönergesi, dahil edilecek kaynakları belirtmek için dosya özniteliğini kullanırken, eylemi aynı amaçla sayfa özniteliğini kullanır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.