Saya akan memilih cara mengatur tampilan saya (dengan spring-mvc, tapi itu seharusnya tidak terlalu menjadi masalah)
Ada 6 opsi sejauh yang saya lihat (meskipun tidak saling eksklusif):
- Ubin
- Sitemesh
- Freemarker
- Kecepatan
<jsp:include>
<%@ include file="..">
Ubin dan Sitemesh dapat dikelompokkan; begitu pula Freemarker dan Velocity . Yang mana dalam setiap kelompok yang akan digunakan bukanlah masalah diskusi ini, ada cukup banyak pertanyaan dan diskusi tentang itu.
Ini adalah bacaan yang menarik , tetapi tidak bisa meyakinkan saya untuk menggunakan ubin.
Pertanyaan saya adalah - apa yang diberikan framework ini yang tidak dapat dilakukan dengan benar <@ include file="..">
dan JSTL. Poin utama (beberapa diambil dari artikel):
Menyertakan bagian halaman, seperti header dan footer - tidak ada perbedaan antara:
<%@ include file="header.jsp" %>
dan
<tiles:insert page="header.jsp" />
Menentukan parameter di header - seperti judul, meta tag, dll. Ini sangat penting, terutama dari sudut pandang SEO. Dengan opsi template, Anda dapat dengan mudah menentukan placeholder yang harus ditentukan oleh setiap halaman. Tapi jadi Anda bisa di jsp dengan JSTL , menggunakan
<c:set>
(di halaman termasuk) dan<c:out>
(di halaman yang disertakan)Reorganisasi tata letak - jika Anda ingin memindahkan runut tautan ke atas menu, atau kotak masuk di atas panel samping lain. Jika penyertaan halaman (dengan jsp) tidak diatur dengan baik, Anda mungkin perlu mengubah setiap halaman dalam kasus seperti itu. Tetapi jika tata letak Anda tidak terlalu rumit, dan Anda meletakkan hal-hal umum di header / footer, tidak ada yang perlu dikhawatirkan.
Kopling antara komponen umum dan konten spesifik - Saya tidak menemukan masalah dengan ini. Jika Anda ingin menggunakan kembali beberapa fragmen, pindahkan ke halaman yang tidak menyertakan header / footer apa pun, dan sertakan di mana pun diperlukan.
Efisiensi -
<%@ include file="file.jsp" %>
lebih efisien dari apa pun, karena dikompilasi sekali. Semua opsi lainnya diurai / dijalankan berkali-kali.Kompleksitas - semua solusi non-jsp memerlukan file xml tambahan, penyertaan tambahan, konfigurasi pra-prosesor, dll. Ini adalah kurva pembelajaran dan memperkenalkan lebih banyak titik potensi kegagalan. Selain itu, itu membuat dukungan dan perubahan lebih membosankan - Anda harus memeriksa sejumlah file / konfigurasi untuk memahami apa yang terjadi.
Placeholder - apakah velocity / freemarker memberikan lebih dari JSTL? Di JSTL Anda meletakkan placeholder, dan menggunakan model (ditempatkan dalam permintaan atau cakupan sesi, oleh pengontrol) untuk mengisi placeholder ini.
Jadi, yakinkan saya bahwa saya harus menggunakan salah satu kerangka kerja di atas daripada / selain JSP biasa.
Jawaban:
Beberapa argumen untuk Velocity (saya belum pernah menggunakan Freemarker):
Ya, referensi benar-benar inti dari VTL:
atau
Tidak begitu yakin saya setuju dengan atau memahami hal ini. Velocity memiliki opsi untuk menyimpan template, yang berarti pohon sintaksis abstrak tempat mereka diurai akan di-cache daripada dibaca dari disk setiap saat. Either way (dan saya tidak memiliki angka pasti untuk ini), Velocity selalu terasa cepat bagi saya.
Perbedaannya adalah, dengan pendekatan JSP, bukankah Anda akan mengatur ulang tata letak ini di setiap file JSP yang menggunakan header / footer yang sama? Tiles dan SiteMesh memungkinkan Anda untuk menentukan halaman tata letak dasar (JSP, Velocity template, dll - keduanya adalah kerangka kerja JSP pada intinya) di mana Anda dapat menentukan apa pun yang Anda inginkan dan kemudian mendelegasikannya ke fragmen / template "konten" untuk konten utama . Ini berarti hanya akan ada satu file untuk memindahkan header.
sumber
Pilihan antara
jsp:include
dan Tiles / Sitemesh / etc adalah pilihan antara kesederhanaan dan kekuatan yang dihadapi developer sepanjang waktu. Tentu, jika Anda hanya memiliki sedikit file atau tidak berharap tata letak Anda sering berubah, maka gunakan sajajstl
danjsp:include
.Namun aplikasi memiliki cara untuk tumbuh secara bertahap, dan mungkin sulit untuk membenarkan "hentikan pengembangan baru dan ubin retrofit (atau beberapa solusi lain) sehingga kami dapat memperbaiki masalah di masa mendatang dengan lebih mudah" , yang diperlukan jika Anda tidak menggunakan solusi kompleks di awal.
Jika Anda yakin aplikasi Anda akan selalu sederhana, atau Anda dapat menetapkan beberapa tolok ukur kompleksitas aplikasi, setelah itu Anda akan mengintegrasikan salah satu solusi yang lebih kompleks, maka saya sarankan untuk tidak menggunakan tiles / etc. Jika tidak, gunakan dari awal.
sumber
Saya tidak akan meyakinkan Anda untuk menggunakan teknologi lain. Untuk semua yang saya tahu setiap orang harus tetap berpegang pada JSP jika itu berhasil untuk mereka.
Saya bekerja terutama dengan Spring MVC dan saya menemukan JSP 2+ dalam kombinasi dengan SiteMesh sangat cocok.
SiteMesh 2/3
Menyediakan dekorator untuk diterapkan pada tampilan sebagian besar seperti warisan bekerja di mesin template lainnya. Fitur seperti itu tidak terpikirkan untuk bekerja tanpanya saat ini.
JSP 2+
Orang-orang yang mengklaim bahwa JSP akan menyulitkan untuk menghindari kode Java di template adalah palsu. Anda tidak boleh melakukannya dan dengan versi ini tidak perlu melakukannya. Versi 2 mendukung metode panggilan menggunakan EL yang merupakan keuntungan besar dibandingkan dengan versi sebelumnya.
Dengan tag JSTL, kode Anda akan tetap terlihat seperti HTML sehingga tidak terlalu canggung. Spring mengemas banyak dukungan untuk JSP melalui taglib yang sangat kuat.
Taglib juga mudah diperluas sehingga Anda sangat mudah menyesuaikan lingkungan Anda sendiri.
sumber
Salah satu argumen terbaik untuk facelet (tidak ada dalam daftar Anda, tetapi saya hanya akan menyebutkannya) yang menentang penggunaan JSP adalah kompilasi tersebut terintegrasi dengan interpreter daripada didelegasikan ke compiler JSP. Ini berarti bahwa salah satu hal paling menjengkelkan yang saya miliki dengan JSF 1.1 - harus mengubah atribut id pada tag JSF di sekitarnya saat menyimpan perubahan agar mesin runtime menemukan perubahan - hilang, memberikan save- dalam editor, muat ulang siklus dalam browser kembali, bersama dengan pesan kesalahan yang jauh lebih baik.
sumber
Teknologi tampilan yang baik menghilangkan sebagian besar dan sebagian besar pernyataan anoying if / switch / conditional, simple include tidak. Menggunakan hasil teknologi tampilan 'kompleks' dalam aplikasi 'sederhana'.
sumber
Anda tidak memberikan informasi tentang aplikasi tertentu Anda. Misalnya saya tidak menggunakan JSP hanya karena beberapa alasan:
Sulit untuk menghindari penggunaan kode Java dalam template JSP sehingga konsep break Anda dari View murni, dan akibatnya Anda akan mengalami kesulitan untuk mempertahankan kode di beberapa tempat sebagai view dan controller.
JSP secara otomatis membuat konteks JSP yang menetapkan sesi. Saya mungkin ingin menghindarinya, namun jika aplikasi Anda selalu menggunakan sesi, itu tidak menjadi masalah bagi Anda
JSP memerlukan kompilasi dan jika sistem target tidak memiliki kompiler Java, perubahan kecil apa pun akan perlu menggunakan sistem lain dan kemudian menerapkan ulang
Mesin JSP minimal sekitar 500k bytecode plus JSTL, jadi tidak cocok untuk sistem tertanam
Mesin template dapat menghasilkan tipe konten yang berbeda dari model yang sama, katakanlah muatan JSON, halaman web, badan email, CSV, dan sebagainya.
Pemrogram non Java mungkin mengalami kesulitan untuk bekerja dengan template JSP, ketika orang non teknis tidak pernah mengalami kesulitan untuk memodifikasi template biasa.
Saya menanyakan pertanyaan yang sama sejak lama dan diakhiri dengan menulis kerangka saya (pasti berbasis mesin template) yang bebas dari semua kekurangan yang saya lihat di solusi lain. Tak perlu dikatakan, ini adalah sekitar 100k kode byte.
sumber
Saya menyadari bahwa ini muncul sebagai jawaban yang cerdas, tetapi kenyataannya adalah, jika Anda tidak melihat keuntungan menggunakan template atas kode dalam proyek Anda saat ini, mungkin karena dalam proyek Anda saat ini, tidak ada satu pun .
Sebagian tentang skala. Anda mungkin berpikir bahwa include sama kuatnya dengan sitemesh, dan itu memang benar, setidaknya untuk sejumlah kecil halaman (saya katakan mungkin sekitar 100), tetapi jika Anda memiliki beberapa ribu, itu mulai menjadi tidak dapat dikelola. (Jadi untuk eBay itu tidak perlu, untuk Salesforce mungkin)
Juga, seperti yang telah disebutkan sebelumnya, freemarker dan velocity tidak spesifik servlet. Anda dapat menggunakannya untuk apa saja (template email, dokumentasi offline, dll.). Anda tidak memerlukan wadah Servlet untuk menggunakan freemarker atau kecepatan.
Terakhir, poin 5 Anda hanya sebagian benar. Itu dikompilasi setiap kali diakses jika belum begitu. Ini berarti bahwa setiap kali Anda mengubah sesuatu, Anda harus ingat untuk menghapus direktori "work" kontainer servlet Anda, sehingga ia mengkompilasi ulang JSP. Ini tidak perlu dengan mesin templating.
TL; DR Mesin Templaing ditulis untuk mengatasi beberapa kekurangan (yang dirasakan atau nyata) dari JSP + JSTL. Apakah Anda harus menggunakannya atau tidak bergantung sepenuhnya pada kebutuhan Anda dan skala proyek Anda.
sumber