Banyak orang telah melihat atau mempelajari tentang Velocity. Terjemahan literal dari namanya adalah: kecepatan, kecepatan, kecepatan. Ini digunakan dalam pengembangan web, tetapi tidak banyak orang yang menggunakannya dan Struts terkait? , apa pendapat Anda tentang Velocity? Mari kita coba dan pahami konsep Velocity. Melalui pendahuluan di sini, kami menekankan isu-isu dalam pemilihan teknologi, sehingga semua orang dapat mempertimbangkan Velocity ketika memilih pengembangan proyek, dan juga membuat semua orang memahami ide-idenya Cara berpikir yang sangat baik, memberikan perubahan hati dan cara berpikir yang berbeda kepada setiap orang.
Artikel ini didasarkan pada fakta bahwa Anda memiliki dasar tertentu dalam pengembangan Java dan mengetahui MVC, Struts, dan model pengembangan lainnya.
Velocity adalah teknologi mesin template Java. Proyek ini diusulkan oleh Apache dan berasal dari teknologi mesin lain, Webmacro. Jadi apa definisi resmi dari Velocity? Apache mendefinisikannya sebagai: mesin templat berdasarkan Java, tetapi memungkinkan siapa saja menggunakan bahasa templat yang sederhana dan kuat untuk mereferensikan objek yang ditentukan dalam kode Java. Versi terbaru adalah 1.4. Anda dapat menemukan informasi lebih lanjut di http://jakarta.apache.org/velocity/index.html .
Faktanya, secara blak-blakan, Velocity merupakan implementasi dari arsitektur MVC, namun lebih fokus pada hubungan antara Model dan View sebagai jembatan di antara keduanya. Saya yakin semua orang sudah familiar dengan Struts, arsitektur MVC yang paling populer. Banyak pengembang telah menggunakan arsitektur Struts secara ekstensif, termasuk versi platform manajemen IBM Websphere 5 atau lebih tinggi. Teknologi Struts adalah praktik yang baik dari MVC, dan secara efektif mengurangi Java kodenya muncul di View (Jsp), namun koneksi antara Model dan View masih mengandalkan teknologi Taglib Struts Bayangkan saja jika front-end web designer belum familiar dengan Struts atau bahkan Taglib (saya yakin cukup sulit untuk mengenalnya. dengan itu, termasuk Hal yang sama berlaku untuk personel pemeliharaan selanjutnya), yang akan mempersulit perancang web dan insinyur pengembangan front-end untuk bekerja sama satu sama lain dan pengembang front-end mungkin lebih rumit. Masih ada tingkat penggabungan tertentu. Mari kita lihat Velocity atau konsep ini.
Mari kita mulai dengan contoh pengembangan Velocity yang paling sederhana untuk menunjukkan cara kerja Velocity:
1. Buatlah sebuah file, nama filenya adalah: hellavelocity.vm, template kecepatannya (sebenarnya sama dengan html), isinya adalah:
Selamat datang $name di Javayou.com!
hari ini adalah $tanggal.
2. Buat file java, HelloVelocity.java, dengan konten:
paket com.javayou.velocity;
impor java.io.StringWriter;
import java.util.*;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
/**
* @penulis Liang.xf 2004-12-14
*/
kelas publik HelloVelocity {
public static void main(String[] args) melempar Pengecualian {
//Inisialisasi dan dapatkan mesin Velocity
VelocityEngine dan = VelocityEngine baru();
ve.init();
//Dapatkan templat kecepatan
Templat t = ve.getTemplate("hellovelocity.vm");
//Dapatkan konteks kecepatan
Konteks VelocityContext = VelocityContext baru();
//Isi data ke dalam konteks
konteks.put("nama", "Liang");
konteks.put("tanggal", (Tanggal baru()).toString());
//Untuk tampilan nanti, masukkan nilai Daftar terlebih dahulu
Daftar temp = new ArrayList();
temp.add("1");
temp.add("2");
konteks.put("daftar", suhu);
//aliran keluaran
Penulis StringWriter = StringWriter baru();
//konversi keluaran
t.merge(konteks, penulis);
Sistem.keluar.println(penulis.toString());
}
}
3. Unduh zip Velocity 1.4 di http://jakarta.apache.org/site/binindex.cgi , unzip untuk mendapatkan Velocity-1.4.jar, dan gunakan untuk mengkompilasi kelas HelloVelocity.java di atas.
4. Salin hellavelocity.vm pada 1 ke direktori proses saat ini. Menjalankan HelloVelocity juga memerlukan paket lain, yang dapat diperoleh dari Velocity1.4.zip yang diunduh, \velocity - 1.4\build\lib, dan letakkan Setelah commons-collections.jar dan logkit-1.0.1.jar diperkenalkan, jalankan java -cp .\bin; -Djava.ext.dirs=.\lib2 com.javayou.velocity.HelloVelocity, dengan asumsi kelas telah dikompilasi ke direktori .\ bin, dan paket kelas yang kita perlukan ditempatkan di direktori .\lib2. Struktur yang berjalan adalah sebagai berikut:
Selamat datang Liang di Javayou.com!
hari ini Selasa 14 Des 19:26:37 CST 2004.
Di atas adalah hasil berjalan yang paling sederhana. Bagaimana? Beri tahu saya secara kasar. Dua variabel yang ditentukan $name dan $date dalam template hellavelocity.vm masing-masing adalah konteks.put("nama", "Liang") dan konteks.put ( "tanggal", (Tanggal baru()).toString()) diganti dengan nilai yang ditetapkan.
Dari sudut pandang ini, pemrosesan proses bisnis, termasuk hasil bisnis, pada dasarnya diselesaikan semua di lapisan model, sedangkan lapisan tampilan pada dasarnya hanya ditampilkan menggunakan VTL (Velocity Template Language) sederhana. Dengan cara ini, bukankah Jsp tidak diperlukan? Ya, model penggunaan ini sedikit mirip dengan metode CGI sebelumnya :) Velocity secara otomatis mengeluarkan kode, dan Velocity juga sangat mumpuni dalam hal ini. Velocity digunakan di Turbin untuk menghasilkan banyak kode.
Dalam Velocity, definisi variabel dimulai dengan "$", dan $ berfungsi sebagai pengidentifikasi Velocity. Huruf, angka, guratan, dan garis bawah semuanya dapat digunakan sebagai variabel tertentu dalam Kecepatan.
Selain itu, kita juga perlu memperhatikan definisi variabel karakteristik Velocity, seperti: $student.No, $student.Address, yang memiliki dua tingkat makna: yang pertama adalah jika siswa adalah hashtable, kuncinya No dan akan diekstraksi dari tabel hash Nilai Alamat, dan tipe kedua adalah metode pemanggilan, yaitu dua variabel di atas akan dikonversi ke student.getNo() dan student.getAddress(). Velocity memiliki objek untuk nilai yang dikembalikan oleh kode java di servlet, dan juga dapat memanggil metode objek tersebut, seperti $student.getAddress(), dll. Saya tidak akan memberikan contoh dan menjelaskan secara detail di sini.
Contoh di atas hanyalah contoh sederhana. Tentu saja, banyak orang yang tidak lagi puas dengan contoh tersebut. Dalam aplikasi sebenarnya, kita sering kali perlu membuat beberapa tampilan selektif dan menghitung beberapa data berulang, seperti daftar Daftar, dan tentu saja Kecepatan ( khususnya bahasa template VTL) juga mendukung fungsi ini, juga mendukung beberapa tampilan lain yang umum digunakan, seperti variabel di dalam template (seperti variabel di Jsp), dan yang lebih kuat seperti membuat makro untuk mencapai otomatisasi. .Mari kita lanjutkan.
Kami masih menggunakan contoh di atas dan mengubah konten di template hellavelocity.vm menjadi:
#set( $iAmVariable = "bagus!" )
Selamat datang $name di Javayou.com!
hari ini adalah $tanggal.
$iAmVariabel
Jalankan kembali perintah run di atas, hasilnya:
Selamat datang Liang di Javayou.com!
hari ini Selasa 14 Des 22:44:39 CST 2004.
Bagus!
Anda dapat melihat bahwa variabel dalam templat didefinisikan sebagai pernyataan yang dimulai dengan #set, yang tidak sulit untuk dipahami. Setelah dieksekusi, variabel $iAmVariable dalam templat dikonversi ke nilai yang ditentukan:
Bagus!
Mari kita lihat pilihan sederhana lagi. Ubah konten di template hellavelocity.vm menjadi:
#set ($admin = "admin")
#set ($pengguna = "pengguna")
#if ($admin == $pengguna)
Selamat datang admin!
#kalau tidak
Selamat datang pengguna!
#akhir
Jalankan perintah run, hasilnya:
Selamat datang pengguna!
Anda dapat melihat bahwa pernyataan penilaiannya sederhana saja #if(), #else, #end, tidak terlalu rumit.
Mari kita lanjutkan melihat data iterasi dan mengubah konten di template hellavelocity.vm menjadi:
#foreach( $produk dalam $daftar )
$produk
#akhir
Jalankan perintah run, hasilnya:
#1
#2
Bukankah lebih mudah untuk mencantumkan nilai yang disimpan sebelumnya di Daftar VelocityContext dalam contoh? Cukup gunakan #foreach ($variable in xx). Jika Daftar di atas diganti dengan Hashtable, Anda dapat menggunakan sintaks berikut:
#foreach($kunci dalam $hashVariable.keySet() )
nilai $key: $ hashVariable.get($key)
#akhir
Menurut saya skrip ini tidak rumit sama sekali.
Banyak juga yang bertanya, bagaimana kalau javabean? Oke, mari tambahkan kacang:
paket com.javayou.velocity;
/**
* @penulis Liang.xf 2004-12-14
*/
Siswa kelas publik {
//Perhatikan bahwa atribut kelas bersifat publik
String publik no = "";
alamat String publik = "";
Siswa publik(String _no, String _alamat) {
tidak = _tidak;
alamat = _alamat;
}
String publik getAddress() {
alamat pengirim;
}
public void setAddress(Alamat string) {
this.address = alamat;
}
String publik getNo() {
tidak kembali;
}
public void setNo(String no) {
ini.tidak = tidak;
}
}
Siswa ini adalah javabean penuh, atau data bean, kelas umum yang digunakan untuk memuat data. Kemudian kita memodifikasi HelloVelocity.java menjadi:
temp.add("1");
temp.add("2");
Ganti dengan:
temp.add(Siswa baru("123", "Guangzhou"));
temp.add(Siswa baru("456", "Zhuhai"));
Kemudian ubah isi hellavelocity.vm menjadi:
#foreach ($s dalam $siswa)
<$velocityCount> Alamat: $s.alamat
#akhir
Kompilasi ulang dan jalankan perintah run, hasilnya sebagai berikut:
<1> Alamat: Guangzhou
<2> Alamat: Zhuhai
Dengan cara ini, data Siswa dalam daftar akan dicetak, dan selesai! Variabel bawaan Velocity $velocityCount digunakan di sini, yang mengacu pada nomor urut enumerasi default. Dimulai dari 1. Ini juga dapat diubah menjadi 0, tetapi perlu diubah di Velocity.properties yang terletak di paket Velocity-1.4.jar. Di bawah direktori org\apache\velocity \runtime\defaults .
Bagaimana cara menangani iterasi yang lebih kompleks? Mari kita lihat contoh template berikut agar lebih jelas:
#foreach ($elemen dalam $daftar)
-- bagian depan bagian dalam --
#foreach ($elemen dalam $daftar)
Ini adalah $elemen.
$kecepatanHitungan
#akhir
-- bagian depan bagian dalam --
-- bagian depan bagian luar --
Ini adalah $elemen.
$kecepatanHitungan
-- bagian depan luar --
#akhir
Seperti yang Anda lihat, Velocity mendukung tag nesting. Ini adalah fungsi yang sangat kuat. Saya tidak akan mendemonstrasikannya secara mendalam di sini.
Sebenarnya jika dipikir-pikir contoh yang baru saja kami berikan sedikit lebih mendalam, Anda sudah bisa melihat, apa gunanya Velocity? Itu adalah model Servlet + Velocity. Selain itu, apakah Anda masih ingat model pengembangan Jsp awal kita, Jsp+JavaBean? Di sini, kami mengubah ke Servlet+JavaBean+Velocity. Coba pikirkan, apakah sudah menggantikan Jsp+JavaBean, dan lebih menyeluruh menghapus kode Java dari Jsp (vm). bahwa kode Java selalu muncul kurang lebih di JSP. Sekalipun dapat dilakukan tanpa kode Java, pengembang yang telah melakukan sistem arsitektur yang kompleks tahu bahwa biayanya juga sangat mahal, dan dalam hal pemeliharaan, Ada kesulitan tertentu dalam pengembangan terintegrasi. dengan desainer web, jadi di sini kami dapat merasakan bahwa model Servlet+JavaBean+Velocity lebih mewujudkan konsep OOD. Dari segi efisiensi, Anda tidak perlu khawatir. Kombinasi ini lebih efisien dibandingkan metode Servlet+Jsp.
Seharusnya banyak orang yang mau belajar tentang Velocity, tapi mungkin tidak banyak yang benar-benar bisa menerapkannya pada proyek (beberapa proyek masih menggunakannya, seperti Jute). Lagipula, dibandingkan dengan Jsp, Jsp lebih standar dan banyak digunakan. dan banyak alat pengembangan telah digunakan. Namun fungsi Velocity tidak terbatas pada persaingan dengan Jsp, seperti yang terlihat di atas, ia sangat kuat dalam keluaran kode otomatis. Seperti disebutkan sebelumnya, Turbine menggunakan Velocity untuk menghasilkan banyak kode Merupakan ide yang sangat bagus untuk menjadikannya generator kode atau pembuatan template lainnya.
Oke, mari kita lihat beberapa masalah umum yang perlu diperhatikan jika Anda ingin mendalami Velocity untuk mengerjakan proyek.
Velocity sendiri mendukung konversi pengkodean template internasional. Lihatlah metode yang disediakan oleh Velocity:
GetTemplate Templat Publik (Templat pengadukan, Pengkodean string),
Ada spekulasi bahwa pendekatan ini tidak dapat mencapai internasionalisasi sepenuhnya.
Konsep internasionalisasi yang paling sederhana di Struts adalah dengan menggunakan tag bahasa internasional di Jsp, dan setiap bahasa menggunakan perpustakaan tag bahasa yang berbeda, sebenarnya dapat dilakukan secara manual.
Untungnya, seseorang telah memecahkan masalah yang disebutkan di atas dan membuat alat Velocity: MessageTool, yang menyediakan variabel teks untuk memuat label internasional. Dengan cara ini, Anda hanya perlu menulis kode label, seperti: $text.get('title ' ), konten yang lebih spesifik juga dapat ditemukan di http://jakarta.apache.org/velocity/tools/struts/MessageTool.html .
Oke, itu saja berdasarkan pengenalan Velocity, mari kita bahas ekstensi lainnya. Beberapa orang berkomentar bahwa Velocity bukanlah struktur MVC standar. Ya, kami telah mengatakan di awal bahwa Velocity hanyalah kombinasi yang baik antara Model dan View, dan hanya mesin template yang bagus telah terbentuk. Untungnya, Apache meluncurkan VelocityStruts berdasarkan kombinasi Struts dan Velocity. Kita dapat memperkenalkan bagian pernyataan ini di topik selanjutnya. Berikut adalah pengenalan singkat konsepnya. Ini didasarkan pada struktur Struts dan Aksi logika bisnis pemrosesan. Terakhir, proses bisnis dialihkan ke lapisan tampilan berdasarkan Kecepatan, sehingga menggantikan Jsp sebagai lapisan Tampilan. Kita juga telah melihat di atas bahwa contoh yang dikutip pada dasarnya didasarkan pada prinsip dan demonstrasi, dan tidak terintegrasi erat dengan pengembangan Web. Kami akan menggabungkan aspek ini saat menjelaskan konten VelocityStruts.
Pengantar penggunaan Velocity - kode di java
1. Inisialisasi objek terlebih dahulu
Konteks VelocityContext = VelocityContext baru();
Penulis StringWriter = StringWriter baru();
String pengkodean2 = "GBK";
2. PROPERTY_PATH = TEMPLATE_INIT_PATH di file properti sistem (Tentukan jalur file properti yang diperlukan untuk kecepatan.)
3. Isi di Properti
file.resource.loader.path = D:/resin/webapps/mip/files/templateupload/ (tempat template berada)
4. Kemudian inisialisasi Velocity.init(PROPERTY_PATH);
5. Sesuaikan label dalam kecepatan dengan java context.put(key, value);
6. Kemudian muat file Velocity.mergeTemplate(templateName, pengkodean2, konteks, penulis);
7. Terakhir, panggil Generator.writeToFile() untuk membuat file.
8. Fungsi writeToFile adalah sebagai berikut:
FileOutputStream dari = FileOutputStream baru(File);
of.write(writer.toString().getBytes("GBK"));
// String tt = penulis.toString();
dari.flush();
dari.close();
Artikel ini berasal dari blog CSDN. Harap sebutkan sumbernya saat mencetak ulang: http://blog.csdn.net/sunrui_work/archive/2009/12/18/5029982.aspx