Apa perbedaan antara menyertakan file dengan JSP termasuk direktif, JSP menyertakan tindakan dan menggunakan JSP Tag Files?


155

Tampaknya ada dua metode untuk templating dengan JSP. Termasuk file dengan salah satu pernyataan ini

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

atau menggunakan file tag JSP

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

Dan di halaman JSP lain menyebutnya dengan

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

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

Jadi metode mana yang harus saya gunakan? Apakah satu sekarang dianggap usang atau keduanya valid dan mencakup berbagai kasus penggunaan?

Edit

Bukankah menggunakan file tag ini sama dengan menggunakan sebuah menyertakan?

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

Dan menyebutnya di JSP lain dengan

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

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

Bagi saya itu sama dengan menggunakan parameter include dan passing. Jadi, apakah File Tag sama dengan yang disertakan?

Jawaban:


293

Ikhtisar Elemen Sintaks JSP

Pertama, agar lebih jelas, berikut ini adalah ikhtisar singkat elemen sintaks JSP :

  • Arahan : Ini menyampaikan informasi mengenai halaman JSP secara keseluruhan.
  • Elemen skrip : Ini adalah elemen kode Java seperti deklarasi, ekspresi, skrip, dan komentar.
  • Objek dan cakupan : Objek JSP dapat dibuat secara eksplisit atau implisit dan dapat diakses dalam ruang lingkup yang diberikan, seperti dari mana saja di halaman JSP atau sesi.
  • Tindakan : Ini membuat objek atau mempengaruhi aliran output dalam respons JSP (atau keduanya).

Bagaimana konten dimasukkan dalam JSP

Ada beberapa mekanisme untuk menggunakan kembali konten dalam file JSP.

4 mekanisme berikut untuk memasukkan konten dalam JSP dapat dikategorikan sebagai penggunaan kembali langsung :
(untuk 3 mekanisme pertama mengutip dari "Head First Servlets and JSP" )

1) Termasuk arahan :

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

Statis : menambahkan konten dari nilai atribut file ke halaman saat ini pada waktu terjemahan . Arahan ini awalnya ditujukan untuk template tata letak statis, seperti header HTML.

2) Tindakan <jsp:include> standar :

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

Dinamis : menambahkan konten dari nilai atribut halaman ke halaman saat ini pada waktu permintaan . Dimaksudkan lebih untuk konten dinamis yang berasal dari JSP.

3) <c:import>Tag JSTL:

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

Dinamis : menambahkan konten dari nilai atribut URL ke halaman saat ini, saat permintaan . Ini berfungsi sangat mirip <jsp:include>, tetapi lebih kuat dan fleksibel: tidak seperti dua lainnya termasuk, <c:import> url dapat dari luar wadah web !

4) Pendahuluan dan kode:

Statis : pembuka dan kode hanya dapat diterapkan pada awal dan akhir halaman .
Anda dapat secara implisit menyertakan pembuka (juga disebut header) dan kode (juga disebut footer) untuk sekelompok halaman JSP dengan menambahkan <include-prelude>dan <include-coda>masing-masing elemen masing-masing dalam suatu <jsp-property-group>elemen dalam aplikasi Web descriptor penyebaran web.xml aplikasi . Baca lebih lanjut di sini:
Mengkonfigurasi Implisit Termasuk di Awal dan Akhir JSP
Menentukan termasuk implisit


Tag File adalah metode tidak langsung penggunaan kembali konten, cara mengenkapsulasi konten yang dapat digunakan kembali . Sebuah Tag Berkas adalah file sumber yang berisi fragmen kode JSP yang dapat digunakan kembali sebagai tag kustom .

TUJUAN mencakup dan File Tag berbeda.

File tag (konsep yang diperkenalkan dengan JSP 2.0) adalah salah satu opsi untuk membuat tag kustom . Ini adalah cara yang lebih cepat dan lebih mudah untuk membuat tag khusus . Tag khusus , juga dikenal sebagai ekstensi tag, adalah elemen JSP yang memungkinkan logika dan output khusus yang disediakan oleh komponen Java lainnya untuk dimasukkan ke halaman JSP. Logika yang disediakan melalui tag kustom diimplementasikan oleh objek Java yang dikenal sebagai penangan tag .

Beberapa contoh tugas yang dapat dilakukan oleh tag kustom termasuk operasi pada objek implisit, formulir pemrosesan, mengakses database dan layanan perusahaan lainnya seperti email dan direktori, dan menerapkan kontrol aliran.


Mengenai Edit Anda

Mungkin dalam contoh Anda (dalam Edit Anda ), tidak ada perbedaan antara menggunakan direct include dan Tag File. Tetapi tag khusus memiliki serangkaian fitur yang kaya . Mereka bisa

  • Dapat disesuaikan dengan atribut yang diteruskan dari halaman panggilan.

  • Lewati variabel kembali ke halaman panggilan.

  • Akses semua objek yang tersedia ke halaman JSP.

  • Berkomunikasi satu sama lain. Anda bisa membuat dan menginisialisasi komponen JavaBeans, membuat variabel EL publik yang merujuk ke kacang itu di satu tag, dan kemudian menggunakan kacang di tag lain.

  • Bersarang satu sama lain dan berkomunikasi melalui variabel pribadi.

Baca juga ini dari "Pro JSP 2": Memahami Tag Kustom JSP .


Bacaan yang bermanfaat.


Kesimpulan

Gunakan alat yang tepat untuk setiap tugas.


Gunakan File Tag sebagai cara cepat dan mudah untuk membuat tag khusus yang dapat membantu Anda mengenkapsulasi konten yang dapat digunakan kembali .

Adapun konten termasuk dalam JSP (kutipan dari sini ):

  • Gunakan arahan sertakan jika file jarang berubah . Ini mekanisme tercepat. Jika wadah Anda tidak secara otomatis mendeteksi perubahan, Anda bisa memaksakan perubahan itu berlaku dengan menghapus file kelas halaman utama.
  • Gunakan tindakan sertakan hanya untuk konten yang sering berubah , dan jika halaman yang akan dimasukkan tidak dapat diputuskan sampai halaman utama diminta.

Tetapi bukankah <jsp: include> sama dengan menggunakan file tag? Saya tidak dapat melihat perbedaan ... Anda dapat meneruskan variabel ke file yang disertakan dengan <jsp: include> sama seperti Anda dapat mengirimkan variabel ke file tag. Kedua metode memungkinkan Anda menggunakan kembali konten, mereka tampaknya melakukan hal yang persis sama. Apakah ada perbedaan di antara mereka selain nama mereka?
sonicboom

@sonicboom Memperbarui jawaban saya
informatik01

1
@ informatik01 jawaban yang sangat bagus, saya menghargai kedalaman, pemformatan yang bagus dan daftar 4 mekanisme yang sangat berguna.
Russell Silva

1
apa sebenarnya keuntungan dari <jsp: include> over <* @ include url ..>?
Krsna Chaitanya

@KrsnaChaitanya Catatan: Anda memiliki kesalahan ketik (tanda bintang *) di dalam directive directive. <jsp:include>adalah standar termasuk tindakan , <%@ include file="" %>termasuk arahan . Baca bagian terakhir (dalam kotak abu-abu) yang menguraikan keunggulan (yaitu rekomendasi kapan harus memilih satu atau yang lain). Lihat juga artikel ini untuk penjelasan terperinci. Semoga ini membantu.
informatik01

21

Kemungkinan Pertanyaan Gandakan

<@include>- Tag arahan menginstruksikan kompiler JSP untuk menggabungkan konten dari file yang disertakan ke dalam JSP sebelum membuat kode servlet yang dihasilkan. Ini sama dengan memotong dan menempelkan teks dari halaman sertakan Anda langsung ke JSP Anda.

  • Hanya satu servlet yang dieksekusi saat run time.
  • Variabel skrip yang dideklarasikan di halaman induk dapat diakses di halaman yang disertakan (ingat, mereka adalah halaman yang sama).
  • Halaman yang disertakan tidak perlu dikompilasi sebagai JSP mandiri. Ini bisa berupa fragmen kode atau teks biasa. Halaman yang disertakan tidak akan pernah dikompilasi sebagai standalone. Halaman yang disertakan juga dapat memiliki ekstensi apa pun, meskipun .jspf telah menjadi ekstensi yang digunakan secara konvensional.
  • Satu kekurangan pada wadah yang lebih lama adalah bahwa perubahan pada halaman yang disertakan mungkin tidak berlaku sampai halaman induk diperbarui. Versi terbaru dari Tomcat akan memeriksa halaman sertakan untuk pembaruan dan memaksa kompilasi ulang dari induk jika mereka diperbarui.
  • Kelemahan lebih lanjut adalah bahwa karena kode tersebut dimasukkan langsung ke dalam metode layanan dari servlet yang dihasilkan, metode tersebut dapat tumbuh sangat besar. Jika melebihi 64 KB, kompilasi JSP Anda kemungkinan akan gagal.

<jsp:include> - Tag Tindakan JSP di sisi lain memerintahkan wadah untuk menjeda eksekusi halaman ini, jalankan jalankan halaman yang disertakan, dan gabungkan output dari halaman tersebut ke output dari halaman ini.

  • Setiap halaman termasuk dieksekusi sebagai servlet terpisah pada saat run time.
  • Halaman dapat dimasukkan secara kondisional pada waktu berjalan. Ini sering berguna untuk kerangka kerja templating yang membangun halaman termasuk. Halaman induk dapat menentukan halaman mana, jika ada, untuk dimasukkan sesuai dengan beberapa kondisi run-time.
  • Nilai-nilai variabel scriptlet harus secara eksplisit diteruskan ke halaman include.
  • Halaman yang disertakan harus dapat dijalankan sendiri.
  • Anda cenderung mengalami kesalahan kompilasi karena ukuran metode maksimum terlampaui di kelas servlet yang dihasilkan.

Tergantung pada kebutuhan Anda, Anda dapat menggunakan <@include>atau <jsp:include>


1
Apakah yang Anda maksud seperti Anda menunjukkan dalam pertanyaan Anda: <t:mytag><h1>Hello World</h1></t:mytag>? Itu bukan termasuk, ini adalah penggunaan normal tag (suka <jsp:useBean>atau <c:if>).
Uooo

Jadi apa perbedaan antara menggunakan file tag dan memasukkannya karena tampaknya file tag dapat digunakan untuk memasukkan konten dalam halaman?
sonicboom

9

Keuntungan utama dari <jsp:include />over <%@ include >adalah:

<jsp:include /> memungkinkan untuk melewati parameter

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

yang tidak mungkin di <%@include file="somefile.jsp" %>


Bagaimana dengan tagfile, saya tahu cara kerja termasuk. Saya bertanya-tanya bagaimana hubungan file tag termasuk karena tampaknya mereka menyediakan fungsionalitas yang sama. Apa perbedaan antara menggunakan tagfile dan menggunakan include?
sonicboom

bagaimana <%@include file="somefile.jsp?menu=value" %>? Apakah itu dibatasi juga?
Roshana Pitigala

5

Ketiga opsi templat - <%@include>, <jsp:include>dan <%@tag>valid, dan ketiganya mencakup kasus penggunaan yang berbeda.

Dengan <@include>, parser JSP in-line konten file yang disertakan ke dalam JSP sebelum kompilasi (mirip dengan C #include). Anda akan menggunakan opsi ini dengan konten yang sederhana dan statis: misalnya, jika Anda ingin memasukkan elemen header, footer, atau navigasi ke setiap halaman di aplikasi web Anda. Konten yang disertakan menjadi bagian dari JSP yang dikompilasi dan tidak ada biaya tambahan saat runtime.

<jsp:include>(dan JSTL <c:import>, yang serupa dan bahkan lebih kuat) paling cocok untuk konten dinamis. Gunakan ini ketika Anda perlu memasukkan konten dari URL lain, lokal atau jauh; ketika sumber daya yang Anda masukkan itu sendiri dinamis; atau ketika konten yang dimasukkan menggunakan variabel atau definisi kacang yang bertentangan dengan halaman yang disertakan. <c:import>juga memungkinkan Anda untuk menyimpan teks yang disertakan dalam variabel, yang selanjutnya dapat Anda manipulasi atau gunakan kembali. Kedua hal ini menimbulkan biaya runtime tambahan untuk pengiriman: ini minimal, tetapi Anda harus menyadari bahwa dinamis termasuk bukan "gratis".

Gunakan file tag ketika Anda ingin membuat komponen antarmuka pengguna yang dapat digunakan kembali. Jika Anda memiliki Daftar Widget, katakan, dan Anda ingin mengulangi widget dan menampilkan properti masing-masing (dalam tabel, atau dalam formulir), Anda akan membuat tag. Tag dapat mengambil argumen, menggunakan <%@tag attribute>dan argumen ini bisa bersifat wajib atau opsional - agak seperti parameter metode.

File tag adalah mekanisme yang lebih sederhana, berbasis JSP untuk menulis pustaka tag, yang (sebelum JSP 2.0) harus Anda tulis menggunakan kode Java. Jauh lebih bersih untuk menulis file tag JSP ketika ada banyak rendering yang harus dilakukan dalam tag: Anda tidak perlu mencampur kode Java dan HTML seperti yang harus Anda lakukan jika Anda menulis tag di Java.


1

Menurut: Java Revisited

  1. Sumber daya yang dimasukkan oleh direktif sertakan dimuat selama waktu terjemahan jsp, sementara sumber daya yang dimasukkan oleh tindakan sertakan dimuat selama waktu permintaan.

  2. Setiap perubahan pada sumber daya yang disertakan tidak akan terlihat jika termasuk direktif sampai file jsp dikompilasi lagi. Sementara dalam hal tindakan sertakan, setiap perubahan dalam sumber daya yang disertakan akan terlihat dalam permintaan berikutnya.

  3. Sertakan arahan adalah impor statis, sementara aksi termasuk impor dinamis.

  4. Sertakan atribut directive using file untuk menentukan sumber daya yang akan disertakan saat menyertakan tindakan menggunakan atribut halaman untuk tujuan yang sama.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.