Artikel ini telah berbagi dengan Anda metode untuk menyesuaikan kerangka kerja Struts2 MVC untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
Kustom MVC: (Pertama pahami konsep Model1 dan Model2)
Model1 dan Model2:
Model1: Ini adalah teknologi pengembangan JSSP murni yang menggabungkan kode logika bisnis dan melihat kode rendering.
Model2: Model2 didasarkan pada model1, memisahkan kode logika bisnis dan membentuk servlet saja. Model2 juga dikembangkan berdasarkan MVC.
Karakteristik MVC dirangkum sebagai berikut:
(1) Akuisisi Data dan Pemisahan Tampilan
(2) Pengontrol menggabungkan model dan tampilan yang berbeda
(3) Aplikasi dibagi menjadi tiga bagian, secara longgar digabungkan dan bekerja bersama, sehingga meningkatkan skalabilitas dan pemeliharaan aplikasi
(4) Setiap lapisan bertanggung jawab untuk berbagai fungsi dan melakukan tugasnya sendiri. Komponen masing -masing lapisan memiliki karakteristik yang sama, yang memfasilitasi generasi kode program melalui rekayasa dan perkakas.
Pemikiran MVC dan keunggulannya (sangat kuat)
MVC adalah model arsitektur, tujuannya adalah untuk memisahkan model (logika bisnis) dan tampilan (lapisan presentasi), sehingga model dan tampilan dapat dimodifikasi secara independen tanpa saling mempengaruhi. Sebagian besar perangkat lunak mengadopsi pola ini saat merancang arsitektur. Ada banyak cara untuk menggunakan mode MVC. Ketika suatu sistem menjelajah melalui browser ingin mengembangkan versi seluler, Anda hanya perlu membangun kembali tampilan, dan logika bisnis dari bagian model dapat digunakan kembali. Banyak perangkat lunak yang perlu meluncurkan versi B/S dan C/S secara bersamaan, mengadopsi mode MVC, bagian model dapat digunakan kembali, dan hanya pandangan berbeda yang perlu dikembangkan. Ide MVC membagi aplikasi menjadi tiga bagian dasar: m (model, model) V (tampilan, tampilan) C (pengontrol, pengontrol). Di mana M mewakili bagian yang memproses logika bisnis, V mewakili bagian yang menampilkan data dan memperoleh input pengguna, C mirip dengan perantara, memastikan bahwa M dan V tidak berinteraksi secara langsung.
Langkah -langkah dasarnya adalah sebagai berikut:
1. Buat XML Document Framework.xml
2. Tentukan Antarmuka Tindakan
3. Tentukan kelas penampakan aksi dan perlakukan itu sebagai simpul tindakan
4. Tentukan kelas ActionMappingManage untuk mengelola kelas ActionMapping (aksi node)
5. Tentukan kelas ActionManager menggunakan mekanisme refleksi untuk mendapatkan kelas spesifik berdasarkan nama kelas tipe string (penulisan tag web.xml)
6. Tuliskan servlet untuk menjalankan kontrol waktu
7. Tentukan Kelas Loginaksi untuk Pengujian
1. Buat XML Document Framework.xml
<!-? Xml Version = "1.0" encoding = "UTF-8"?-> <!-File kendala definisi-> (Catatan) <!-Elemen menunjukkan elemen-> <!-Attlist menunjukkan atribut-> <!-CDATA TYPET-> <!-Diperlukan Atribut ini harus ditulis-> <!-CDATA MIPIPE-> <! Forwarding-> <!-Elemen Tindakan (Tindakan)-> <!-Tindakan Elemen (Hasil*)-> (* berarti beberapa) <!-ATTLIST Tindakan Nama CDATA #REQUIRED CLASS CDATA #REQUIRE-> <!-Hasil Hasil Hasil CDATA #! name = "Success"> Success.jsp </RAEST> <RESURE NAME = "LOGIN"> INDEX.jsp </RAEST> </Action> </action> </famework>
CATATAN: Spesifikasi penulisan ruang dan <>.
Hierarki node.
2. Tentukan Antarmuka Tindakan
CATATAN: Parameter ekskut ditulis, diminta dan ditanggapi.
3. Tentukan kelas ActionMapping, perlakukan itu sebagai node tindakan (tulis label node tindakan)
Merangkum data ke koleksi bidang dan hasil.
Catatan: Tambahkan data ke tulisan. (Koleksi peta)
4. Tentukan kelas ActionMappingManage untuk mengelola kelas ActionMapping (aksi node)
/** Ada lebih dari satu Node Action* yang digunakan untuk mengelola kelas ActionMapping*/kelas publik ActionMappingManager {// Koleksi Kelas ActionMapping Peta Pribadi <String, ActionMapping> Maps = HashMap baru <String, ActionMapping> (); Public ActionMapping getActionMapping (name string) {return maps.get (name); } // Parse semua file konfigurasi di bawah proyek src // parse setelah instantiation public actionMappingManager (string [] file) {for (string fileName: file) {init (fileName); }} // Metode inisialisasi init // Parse dokumen XML public void init (string path) {try {inputStream is = this.getClass (). getResourceAsstream ("/"+path); // Parse XML Document Doc = SaxReader baru (). Baca (IS); // Dapatkan elemen node root root = doc.getrooteLement (); // Dapatkan Tindakan Node Element Action = (Element) Root.elementIterator ("Tindakan"). Next (); // Gunakan loop untuk melintasi semua node aksi di bawah node tindakan untuk (iterator <sement> action = action.elementIterator ("action"); action.hasnext ();) {// Dapatkan <Action> elemen node ActionNext = action.next (); // Dapatkan atribut nama dan atribut kelas di node tindakan masing -masing string name = actionNext.attributeValue ("name"); String className = ActionNext.AttributeValue ("class"); // Simpan dua atribut di atas ke ActionMapping Class ActionMapping Map = new ActionMapping (); Mapapp.setClassName (ClassName); Mapapp.setname (name); // Karena ada beberapa node hasil di bawah node tindakan yang melintasi semua node hasil di bawah tindakan untuk (iterator <sement> result = actionNext.elementiterator ("result"); result.hasnext ();) {// Dapatkan hasil elemen simpul hasilNext = hasil.next (); // Ekstrak nilai atribut nama dari simpul hasil dan nilai dalam node hasil hasil resultName = resultNext.attributeValue ("name"); String resultValue = resultNext.getText (); // Simpan mereka ke dalam kolom ganda yang ditetapkan dalam ActionMapping untuk memfasilitasi memanggil kelas ActionMapping (ada data di kelas ActionMapping!) Mapp.addresult (hasil Hasil, hasil Hasil); System.out.println (mapp.getName ()); } // Dapatkan koleksi semua aksi node maps.put (mapp.getname (), peta); }} catch (Exception e) {// todo: menangani pengecualian}}}Ringkasan:
Parse file konfigurasi framework.xml melalui dom4j. Ini akan mendapatkan node root dan node tindakan, dan kemudian melintasi node tindakan di bawah node tindakan melalui loop untuk mendapatkan nilai atribut nama dan kelas. Karena ada beberapa node hasil di bawah satu node aksi dan semua node hasil di bawah aksi, mereka disimpan dalam set kolom ganda dalam aksi aksi, dan akhirnya mendapatkan set semua node aksi.
Catatan: Penulisan metode init, dan penulisan ActionMappingManager dengan grup parameter.
5. Tentukan kelas ActionManager menggunakan mekanisme refleksi untuk mendapatkan kelas spesifik berdasarkan nama kelas jenis string.
Public Class ActionManager {public static action getActionClass (string className) {class clazz = null; Tindakan Tindakan = NULL; // Dapatkan class loader dari utas saat ini coba {// Jika ada kelas di utas, langsung dapatkan jenis kelas sesuai dengan nama kelas clazz = thread.currentThread (). GetContextClassLoader (). LoadClass (className); } catch (ClassNotFoundException e) {// TODO AUTO-ENCOMEERATED Catch Block E.PrintStackTrace (); } if (clazz == null) {coba {// Jika tidak ada di utas, maka gunakan metode class.forname untuk mendapatkan clazz = class.forname (className); } catch (ClassNotFoundException e) {// TODO AUTO-ENCOMEERATED Catch Block E.PrintStackTrace (); }} if (action == null) {coba {// konversi tipe yang diperoleh menjadi tindakan dan panggil konstruktor tanpa parameter, yang setara dengan baru sampai batas tertentu, tetapi kebutuhan baru untuk menentukan jenis action = (action) clazz.newInstance (); } catch (InstantiationException E) {// TODO Auto-Encoerated Catch Block E.PrintStackTrace (); } catch (IllegalAccessException e) {// TODO AUTO-ENTO-ENCEALATED Catch Block E.PrintStackTrace (); }} return action; }}Konfigurasi Node untuk Web.xml:
6. Tulis Servlets untuk mengontrol runtime (servlets, inisialisasi semua kelas)
Kelas Publik MyServlet memperluas httpservlet { / ***Anda sangat nakal* / public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {dopost (permintaan, respons); } <br> / ***Terus bekerja keras* / ActionMappingManager man = null; public void dopost (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {// dapatkan aksi aksi aksi aksi aksi aksi = man.getActionMapping (getPath (permintaan)); // Dapatkan mekanisme refleksi dari tindakan antarmuka tindakan Action = actionManager.getActionManager (actionMapping.getClassName ()); coba {string message = action.execute (request, response); Hasil String = ActionMapping.GetResults (pesan); response.sendredirect (hasil); } catch (Exception e) {// TODO Auto-Entoerated Catch Block E.PrintStackTrace (); }} /** Dapatkan nama jalur permintaan* /string publik getPath (permintaan httpservletRequest) {// proyek + alamat permintaan string requesturi = request.getRequesturi (); // nama proyek string contextPath = request.getContextPath (); // Path String Permintaan Khusus = Requesturi.substring (ContextPath.Length ()); String filename = path.substring (1, path.LastIndexOf (".")); Kembalikan nama file; } / * * Menulis ulang init, program menjalankan dan memuat semua kelas * * /@Override public void init (servletConfig config) melempar servletException {// objek konfigurasi adalah objek dari javax.servlet.servletconfig. Fungsi ini adalah untuk mendapatkan informasi konfigurasi inisialisasi //config.getInitparameter adalah konten parameter inisialisasi dari nama yang ditentukan string filename = config.getInitparameter ("config"); String [] fileNames = null; if (filename == null) {// Jika kosong, fileNames = string baru [] {"framework.xml"}; } else {// Jika ada informasi parameter konfigurasi lainnya, maka disimpan dalam array dengan memisahkan nama file = filename.split (","); } // Gunakan metode init untuk inisialisasi man = new ActionMappingManager (fileNames); }}Catatan: Level dan komentar kode.
7. Tentukan Kelas Loginaksi untuk Pengujian
Loginaksi kelas publik mengimplementasikan tindakan {@Override Public String Execute (httpservletRequest Request, respons httpservletResponse) melempar pengecualian {string name = request.getParameter ("name"); String pwd = request.getParameter ("pwd"); if (name.equals ("1") && pwd.equals ("1")) {return Success; } else {return login; }}}Kode JSP:
Menyadari efeknya:
Tidak peduli berapa lama jalannya, Anda dapat berjalan selangkah demi selangkah, dan tidak peduli seberapa pendek jalannya, Anda tidak dapat mencapainya tanpa mengambil langkah.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.