Tag khusus adalah elemen bahasa JSP yang ditentukan pengguna. Ketika halaman JSP berisi tag khusus yang diubah menjadi servlet, tag tersebut diubah menjadi operasi pada objek yang disebut penangan tag, yang merupakan panggilan kontainer Web saat servlet dijalankan.
Ekstensi tag JSP memungkinkan Anda membuat tag baru dan memasukkannya langsung ke halaman JSP. Penangan Tag Sederhana diperkenalkan dalam spesifikasi JSP 2.0 untuk menulis tag khusus ini.
Anda dapat mewarisi kelas SimpleTagSupport dan mengganti metode doTag() untuk mengembangkan tag khusus yang paling sederhana.
Selanjutnya, kita ingin membuat tag khusus bernama <ex:Hello> dengan format berikut:
<misal:Halo />
Untuk membuat tag JSP khusus, Anda harus terlebih dahulu membuat kelas Java yang menangani tag tersebut. Jadi, mari kita buat kelas HelloTag sebagai berikut:
paket com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;kelas publik HelloTag extends SimpleTagSupport { public void doTag() melempar JspException, IOException { JspWriter out = getJspContext().getOut(); out.println("Halo Tag Khusus!" }}
Kode berikut menulis ulang metode doTag(), yang menggunakan metode getJspContext() untuk mendapatkan objek JspContext saat ini dan meneruskan "Hello Custom Tag!" ke objek JspWriter.
Kompilasi kelas di atas dan salin ke direktori variabel lingkungan CLASSPATH. Terakhir, buat pustaka tag berikut: <Direktori instalasi Tomcat> webappsROOTWEB-INFcustom.tld.
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Contoh TLD</short-name> <tag> <name>Halo</name > <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>kosong</body-content> </tag></taglib>
Selanjutnya, kita bisa menggunakan tag Hello di file JSP:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>Contoh tag khusus</title> </head> <body> <ex:Halo /> </tubuh></html>
Output dari program di atas adalah:
Halo Tag Khusus!
Anda dapat menyertakan konten pesan dalam tag seperti perpustakaan tag standar. Jika kami ingin memasukkan konten ke dalam Hello kustom kami, formatnya adalah sebagai berikut:
<ex:Halo> Ini isi pesan</ex:Halo>
Kita dapat memodifikasi file kelas pemrosesan label, kodenya sebagai berikut:
paket com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;kelas publik HelloTag extends SimpleTagSupport { StringWriter sw = new StringWriter(); ) melempar JspException, IOException { getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); }}
Selanjutnya kita perlu memodifikasi file TLD sebagai berikut:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Contoh TLD dengan Body</short-name> <tag> <name>Halo< /name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>tanpa skrip</body-content> </tag></taglib>
Sekarang kita dapat menggunakan tag yang dimodifikasi di JSP seperti yang ditunjukkan di bawah ini:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>Contoh tag khusus</title> </head> <body> <ex:Halo > Ini isi pesan </ex:Halo> </body></html>
Output dari program di atas adalah sebagai berikut:
Ini adalah isi pesan
Anda dapat mengatur berbagai atribut dalam standar khusus. Untuk menerima atribut, kelas tag khusus nilai harus mengimplementasikan metode penyetel di JavaBean adalah sebagai berikut:
paket com.tutorialspoint;import javax.servlet.jsp.tagext.*;import javax.servlet.jsp.*;import java.io.*;kelas publik HelloTag extends SimpleTagSupport { pesan String pribadi; public void setMessage(String msg) { this.message = pesan; } StringWriter sw = new StringWriter(); public void doTag() lemparan JspException, IOException { if (message != null) { /* Gunakan pesan dari atribut */ JspWriter out = getJspContext().getOut(); out.println( message } else { /* Gunakan pesan dari isi isi */ getJspBody().invoke(sw); getJspContext().getOut().println(sw.toString()); }}
Nama propertinya adalah "message", jadi metode penyetelnya adalah setMessage(). Sekarang mari kita tambahkan atribut ini di elemen <attribute> yang digunakan dalam file TLD:
<taglib> <tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Contoh TLD dengan Body</short-name> <tag> <name>Halo< /name> <tag-class>com.tutorialspoint.HelloTag</tag-class> <body-content>tanpa skrip</body-content> <attribute> <name>message</name> </attribute> </tag></taglib>
Sekarang kita dapat menggunakan atribut message di file JSP sebagai berikut:
<%@ taglib prefix="ex" uri="WEB-INF/custom.tld"%><html> <head> <title>Contoh tag khusus</title> </head> <body> <ex:Halo message="Ini adalah tag khusus" /> </body></html>
Hasil keluaran dari contoh data di atas adalah:
Ini adalah tag khusus
Anda juga dapat menyertakan atribut berikut:
milik | menggambarkan |
---|---|
nama | Mendefinisikan nama atribut. Nama atribut harus unik untuk setiap tag. |
diperlukan | Menentukan apakah atribut tersebut wajib atau opsional. Jika disetel ke salah, itu opsional. |
nilai rtexpr | Mendeklarasikan apakah atribut label valid saat menjalankan ekspresi. |
jenis | Tipe kelas Java yang mendefinisikan properti ini. Default ditentukan sebagai String |
keterangan | Informasi deskripsi |
fragmen | Jika atribut ini dideklarasikan, nilai atribut akan diperlakukan sebagai JspFragment . |
Berikut ini adalah contoh penentuan properti yang relevan:
..... <attribute> <name>attribute_name</name> <required>false</required> <type>java.util.Date</type> <fragment>false</fragment> </attribute>.. ...
Jika Anda menggunakan kedua atribut tersebut, ubah file TLD sebagai berikut:
..... <attribute> <name>attribute_name1</name> <required>false</required> <type>java.util.Boolean</type> <fragment>false</fragment> </attribute> <attribute > <nama>attribute_name2</name> <wajib>benar</wajib> <type>java.util.Date</type> </attribute>.....