Artikel ini dimulai dengan proyek mal online, dimulai dengan konstruksi lingkungan dan mengintegrasikan langkah demi langkah S2SH. Posting blog ini terutama merangkum cara mengintegrasikan Struts2, Hibernate4.3 dan Spring4.2.
Untuk mengintegrasikan tiga kerangka kerja utama, Anda harus terlebih dahulu memulai dengan membangun berbagai lingkungan, yaitu, pertama, Anda harus membangun lingkungan Spring, Hibernate dan Struts2 untuk memastikan bahwa mereka tidak memiliki masalah dan kemudian mengintegrasikannya. Urutan di mana posting blog ini berikut adalah: Pertama -tama membangun lingkungan musim semi -> kemudian membangun lingkungan hibernate -> mengintegrasikan musim semi dan hibernate -> membangun lingkungan struts2 -> mengintegrasikan pegas dan struts2.
1. Manajemen seluruh paket JAR proyek
Musim semi memiliki banyak paket toples. Dianjurkan untuk mengklasifikasikannya dalam suatu kategori dan kemudian menambahkannya ke perpustakaan pengguna secara bergantian untuk manajemen yang mudah dan jelas sekilas. Di sini saya akan meringkas paket stoples dasar yang diperlukan untuk seluruh SSH dan lihat gambar berikut:
Seperti dapat dilihat dari gambar, pertama, stoples musim semi dibagi menjadi empat kategori: Spring-4.2.4-core, Spring-4.2.4-aop, Spring-4.2.4-persistence dan Spring-4.2.4-Web. Masukkan semua paket inti musim semi ke dalam inti, masukkan semua yang terkait dengan AOP ke dalam AOP, letakkan semua yang terkait dengan kegigihan (terintegrasi dengan hibernate) ke dalam kegigihan, dan menempatkan semua terkait dengan web (terintegrasi dengan struts2) ke dalam web. Paket toples apa yang dimiliki setiap bagian? Silakan lihat tangkapan layar di bawah ini:
Catatan: Paket di setiap kategori di atas tidak berisi semua guci dalam paket asli. Beberapa file jar tidak digunakan. Tambahkan saja saat proyek tertentu membutuhkannya. Gambar di atas adalah paket toples paling dasar yang diperlukan untuk memastikan bahwa lingkungan proyek dapat membangun paket JAR paling dasar.
2. Bangun Lingkungan Musim Semi
Tangkapan layar di atas dari paket JAR adalah semua paket toples yang diintegrasikan dalam waktu terakhir. Saat pertama kali membangun lingkungan, Anda tidak perlu menambahkan semuanya sekaligus. Anda dapat menambahkannya sedikit demi sedikit. Ini juga lebih kondusif untuk memahami apa yang dimiliki paket toples di setiap bagian. Tentu saja, dimungkinkan juga untuk menambahkan semuanya sekaligus.
2.1 Tambahkan file konfigurasi beans.xml dan paket toples yang sesuai
Buat proyek baru, dan kemudian tambahkan perpustakaan Anda sendiri ke perpustakaan pengguna. Berikut adalah dua yang utama, yaitu Spring-4.2.4-core dan Spring4.2.4-aop. Saya tidak akan membahas detail tentang menambahkan paket stoples. Setelah menambahkan, tambahkan file beans.xml di direktori src. Ada banyak templat untuk file ini secara online, dan ada juga contoh yang disediakan oleh Spring. Ambil saja salinannya, lihat gambar berikut:
2.2 Tes Lingkungan IOC Musim Semi
Mari kita tulis kelas Java Java.util. Kelas Date untuk menguji apakah Spring IOC normal. Jika dapat disuntikkan secara normal dalam program pengujian, itu berarti bahwa lingkungan IOC Spring berhasil dibangun. Mari kita tulis test case di bawah ini:
/** * @description TODO (menggunakan debugging anotasi Spring, hanya mendukung spring3.1 dan di atas) * @Author ni shengwu * * / / * * Setelah spring3.1, ada paket tambahan spring-test-4.2.4.release.jar. Paket JAR ini digunakan secara khusus untuk mendukung pengujian berbasis anotasi JUnit. Paket JAR berada di Spring-4.2.4-core * Ada springjunit4classrunner.class dalam paket jar ini, dan Anda dapat menambahkannya dengan @runwith annotation * * annotation @contextConfiguration berarti menggunakan objek ApplicationContext, Anda tidak perlu baru dalam program uji seperti sebelumnya, cukup gunakan */ @run dengan Spring, Anda tidak perlu menggunakan Program Test. @ContextConfiguration (Lokasi = "ClassPath: Beans.xml") Kelas Publik Sshtest {@resource tanggal tanggal pribadi; @Test // uji lingkungan pengembangan Spring IOC void springioC () {System.out.println (tanggal); }} Akhirnya, ini dapat menghasilkan secara normal: Kamis 28 Apr 22:45:13 CST 2016. Ini menunjukkan bahwa objek tanggal telah disuntikkan oleh Spring, yang memverifikasi bahwa fungsi IOC pegas normal. Untuk alasan ini, lingkungan musim semi dibangun.
3. Bangun lingkungan yang hibernasi
Konstruksi lingkungan Hibernate lebih rumit daripada musim semi karena menggunakan rekayasa terbalik di myeclipse. Kami mengikuti langkah -langkah berikut untuk membangun lingkungan pembangunan hibernasi:
3.1 Tambahkan paket JAR yang sesuai
Di sini kami terutama menambahkan dua paket toples ke perpustakaan pengguna: hibernate4.3.11 dan paket driver mysql mysql-connector-java-5.1.26, yang tidak akan dijelaskan secara rinci.
3.2 Buat database dan tabel baru
Jatuhkan database jika ada toko; Buat Karakter Default Toko Database Set UTF8; Gunakan toko; Jatuhkan tabel jika ada kategori; Buat Kategori Tabel ( /* Nomor Kategori, Pertumbuhan Otomatis* / Id Int Not Null Auto_increment, /* Nama Kategori* / TYPE VARCHAR (20), /* Apakah kategori adalah kategori panas, kategori panas dapat ditampilkan pada halaman beranda* / hot bool default false, /* Setel nomor kategori ke kunci utama* / id utama));
3.3 DB Browser terhubung ke database MySQL
Browser DB mengacu pada jendela tampilan di Myeclipse. Anda dapat secara intuitif melihat basis data dan tabel mana yang ada di MySQL. Metode untuk membuka browser DB: Window-> Buka Perspektif-> Browser DB Membuka Jendela Kerja Browser DB. Jika tidak ada browser DB, ikuti yang berikut: Window-> Tampilkan tampilan-> Lainnya-> Masukkan DB Browser dan temukan untuk membukanya.
Setelah dibuka, kami mulai terhubung ke database MySQL. Klik kanan -> Baru di ruang kosong jendela DB Browser, dan kotak dialog berikut akan muncul:
Setelah mengisi, klik Test Driver untuk mengujinya. Tes lulus tes dan menunjukkan bahwa driver koneksi database telah dikonfigurasi, dan kemudian menyelesaikannya. Dengan cara ini, kita dapat melihat database MySQL 5.6 di jendela DB Browser. Klik kanan untuk membukanya untuk melihat perpustakaan dan tabel yang ada di database, sebagai berikut:
3.4 Buat file pemetaan XML dan sesi
SessionFactory digunakan untuk membuat sesi. Kami membuatnya dengan cara berikut: Klik kanan nama proyek-> Myeclipse-> Tambahkan kemampuan Hibernate. Jika tidak ada kemampuan menambahkan hibernate, klik Facets Project-> Instal Facet Hibernate, dan jendela berikut akan muncul:
Selanjutnya, tambahkan dukungan hibernate, yaitu, hibernate.cfg.xml file pemetaan dan sesi di myeclipse. Di sini kami terutama membuat paket untuk sessionFactory, dan paket default tidak dapat digunakan.
Selanjutnya, tambahkan driver. Karena kami telah mengkonfigurasi driver sebelumnya, kami dapat secara langsung memilih driver yang baru dikonfigurasi di sini.
Selanjutnya, karena kami telah menambahkan reservasi jar kami sendiri sebelumnya, tidak perlu memilih di sini, cukup selesaikan langsung.
Dengan cara ini, kami menyelesaikan pembuatan file konfigurasi dan sessionFactory Hibernate. Mari kita lihat secara singkat apa yang ada di sessionFactory yang dibuat oleh Myeclipse:
kelas publik hibernatesessionFactory {private static final threadlocal <session> threadlocal = new ThreadLocal <Session> (); // sessionfactory digunakan dalam sesi swasta static org.hibernate.SessionFactory sessionFactory; // sessionFactory: Buat pabrik untuk konfigurasi statis privat sesi konfigurasi = konfigurasi baru (); Private Static Serviceregistry Serviceregistry; static {// inisialisasi sessionFactory coba {configuration.configure (); ServiceRegistry = New ServiceRegistryBuilder (). ApplySettings (configuration.getProperties ()). BuildServiceregistry (); sessionFactory = configuration.buildsessionFactory (serviceeregistry); // Metode untuk membuat sessionfactory di hibernate4} catch (pengecualian e) {system.err.println ("%%%%% apte membuat sessionfactory %%%%%,"); e.printstacktrace (); }} Private HibernatesessionFactory () {// Metode konstruktor pribadi mencegah objek baru yang dirilis, memastikan bahwa sessionfactory singleton} public static sesi getSession () melempar hibernateException {session session = (session) threadLocal.get (); // Dapatkan sesi dari kumpulan utas if (session == null ||! Session.isopen ()) {// Jika kumpulan utas kosong, atau pembukaan sesi gagal jika (sessionFactory == null) {rebuildsessionFactory (); // Jika sessionFactory kosong, buat lagi, sama seperti bagian statis} session = (sessionfactory! = Null)? sessionfactory.opensession (): null; // sessionfactory tidak kosong, buat sesi threadlocal.set (sesi); // kemudian masukkan sesi ini ke dalam kumpulan utas dan dapatkan sesi kembali lain -lain} kembali; } public static void rebuildsessionFactory () {coba {configuration.configure (); ServiceRegistry = New ServiceRegistryBuilder (). ApplySettings (configuration.getProperties ()). BuildServiceregistry (); sessionFactory = configuration.buildsessionFactory (serviceeregistry); } catch (Exception e) {System.err.println ("%%%%% apte membuat sessionFactory %%%%%"); e.printstacktrace (); }} public static void closeSession () melempar hibernateException {session session = (session) threadlocal.get (); threadlocal.set (null); if (session! = null) {session.close (); }} public static org.hibernate.SessionFactory getSessionFactory () {// Berikan antarmuka publik untuk memungkinkan dunia luar mendapatkan sessionfactory sesi singleton ini; } public static configuration getConfiguration () {return configuration; }} Dapat dilihat dari HibernatesessionFactory menciptakan pola singleton dan teknologi pengumpulan benang terutama digunakan. Tidak sulit untuk dipahami.
3.5 Menghasilkan file pemetaan model dan ORM melalui rekayasa terbalik
Selanjutnya, kita akan mulai menggunakan Reverse Engineering untuk membuat objek instan, yaitu model yang sesuai dengan tabel database. Di jendela DB Browsera, klik kanan toko meja yang baru saja kami buat dan pilih Hibernate Reverse Engineering untuk mulai membuat:
Ada dua cara untuk membuatnya, berdasarkan file konfigurasi dan berdasarkan anotasi. Itu tergantung pada suasana hati pengembang. Anda dapat memilih:
Kemudian, pada langkah berikutnya, pilih metode autoINCREMEN KUNCI PRIMER Native, dan kemudian selesaikan Reverse Engineering untuk membuat Model dan ORM Mapping.
Setelah selesai, model kategori akan dihasilkan, dan pemetaan yang sesuai juga akan dihasilkan dalam file hibernate.cfg.xml. Pemetaan sebelumnya berdasarkan file konfigurasi dan anotasi berdasarkan anotasi akan berbeda.
3.6 Menguji database persisten hibernasi
Karena belum diintegrasikan dengan musim semi, itu hanya konstruksi sederhana dari lingkungan pengembangan yang hibernasi, jadi kita tidak perlu menggunakan anotasi. Kami menjalankan entri data ke dalam database dengan layanan baru yang langsung.
Pertama -tama tulis antarmuka CategoryService dan kelas implementasi:
Public Interface CategoryService {public void save (kategori kategori); // Gunakan untuk menguji lingkungan hibernate} kelas publik CategoryServiceImpl mengimplementasikan CategoryService {@Override // Tidak ada integrasi dengan Spring Public Void Save (Kategori Kategori) {// Dapatkan sesi sesi sesi = hibernatesessionFactory.getSession (); coba {// manual transaction session.getTransaction (). begin (); // Jalankan Sesi Logika Bisnis.Save (Kategori); // kirim secara manual session.getTransaction (). Commit (); } catch (Exception e) {session.getTransaction (). Rollback (); Lempar RuntimeException baru (E); } akhirnya {hibernatesessionfactory.closesession (); }}} Berikut ini adalah menambahkan tes hibernate dalam kasus uji sekarang:
@Runwith (springjunit4classrunner.class) @contextConfiguration (lokasi = "classpath: beans.xml") kelas publik sshtest {@resource tanggal tanggal pribadi; @Test // uji lingkungan pengembangan Spring IOC void springioC () {System.out.println (tanggal); } @Test // uji /uji lingkungan pengembangan hibernate, karena tidak ada integrasi, Anda dapat secara langsung public void hiherNate () {CategoryService CategoryService = baru CategoryServiceImpl (); Kategori kategori = kategori baru ("pria kasual", true); CategoryService.Save (kategori); }}Kami memeriksa database dan menemukan bahwa ada terlalu banyak item yang baru saja dimasukkan, yang berarti tidak ada masalah dengan lingkungan hibernate. Pada titik ini, kami telah membangun lingkungan pembangunan hibernasi.
4. Integrasi musim semi dan hibernasi
Setelah membangun lingkungan pengembangan untuk musim semi dan hibernasi, kami mulai mengintegrasikan keduanya. Setelah mengintegrasikan musim semi dan hibernasi, Anda dapat menggunakan AOP untuk membiarkan musim semi mengelola transaksi hibernasi. Mengintegrasikan Spring dan Hibernate terutama dimulai dari dua aspek: satu adalah mengimpor paket toples yang diperlukan, dan yang lainnya adalah mengkonfigurasi file beans.xml. Di bawah ini kami mengintegrasikan musim semi dan hibernasi langkah demi langkah.
4.1 Impor paket JAR yang sesuai
Ada dua paket toples utama yang perlu diimpor saat mengintegrasikan Spring dan Hibernate, Spring4.2.4-persistence dan C3P0-0.9.5.1. Untuk file JAR tertentu di setiap paket JAR, silakan merujuk ke tangkapan layar di atas, dan tidak akan dijelaskan di sini. Sekarang kita akan mulai mengkonfigurasi file beans.xml.
4.2 Mengkonfigurasi Sumber Data Sumber Data
Pertama, konfigurasikan sumber data, dan kemudian bagian yang sesuai dalam hibernate.cfg.xml dapat dibunuh. Karena dikonfigurasi di musim semi, Spring akan menginisialisasi sumber data ini, yang berarti bahwa ini dibiarkan untuk diselesaikan, dan bagian yang sesuai dalam hibernate.cfg.xml dapat dihapus. sebagai berikut:
<!-com.mchange.v2.c3p0.compooledDataSource kelas ada di paket com.mchange.v2.c3p0 dari C3P0-0.9.5.1.Jar Paket-> <bean id = "DataSource"> <nama properti = "value" value = "com.mysql.jdbc.drbc.drc.drc.drc.drc.drc.drc.drasing" value = "jdbc: mysql: // localhost: 3306/shop"/> <properti name = "user" value = "root"/> <properti name = "password" value = "root"/> </bean>
Bagian yang perlu dibunuh di hibernate.cfg.xml:
4.3 Mengkonfigurasi Sesi
SessionFactory dikonfigurasi untuk menghasilkan sesi. Selain itu, HibernateTemplate juga dimungkinkan. Namun, SesionFactory digunakan di sini sebagai ganti hibernatetemplate karena hibernatetemplate disediakan oleh pegas dan tergantung pada pegas. Jika musim semi tidak digunakan suatu hari, kesalahan akan dilaporkan. Dan sesiFactory disediakan oleh Hibernate, tidak masalah. Hibernatetemplate terlalu tergantung. Mari kita lihat konfigurasi spesifik:
<!-org.springframework.orm. value = "classpath: hibernate.cfg.xml" /> <!-Muat file konfigurasi hibernate-> </tean>
Kami hanya menggunakan sumber data di sessionFactory untuk merujuk pada sumber data dengan atribut ref. Kami tidak lagi menggunakan configlocation di sini. Kami secara langsung memuat file hibernate.cfg.xml dan menggunakan konfigurasi dalam file konfigurasi hibernate untuk membuatnya lebih ringkas dan nyaman.
4.4 Mengkonfigurasi Manajer Transaksi
Manajer Transaksi Konfigurasi digunakan untuk mengelola SesionFactory, sehingga semua sesi yang dihasilkan oleh sessionFactory akan dikelola secara deklaratif. Konfigurasinya adalah sebagai berikut:
<!-org.springframework.orm.
Demikian pula, kita dapat menggunakan sessionFactory yang baru saja dikonfigurasi dan merujuknya dengan atribut ref. Pada titik ini, Anda akan menemukan bahwa semua jalan dari atas adalah serangkaian operasi, mengutipnya satu per satu.
4.5 Konfigurasikan Saran (Pemberitahuan)
Tujuan mengkonfigurasi saran adalah untuk menentukan metode mana yang membutuhkan jenis mode transaksi apa. Lihat konfigurasinya:
<tx: nasihat id = "saran" transaction-manager = "transactionManager"> <tx: atribut> <tx: metode nama = "simpan*" propagasi = "diperlukan"/> <tx: atribut> </tx: atribut> </tx: saran>
Diperlukan berarti bahwa jika ada transaksi, transaksi saat ini didukung. Jika tidak ada, transaksi baru dibuat. Mode transaksi ini diterapkan untuk semua metode yang dimulai dengan Simpan, Perbarui dan Hapus, yaitu, dukungan transaksi diperlukan saat menambahkan, menghapus dan memodifikasi database. Dukungan berarti bahwa jika ada transaksi, transaksi saat ini didukung, dan jika tidak ada orang, itu akan baik -baik saja.
4.6 Mengkonfigurasi aspek AOP
<aop:config> <!-- Configure which package classes to enter the transaction--> <aop:pointcut id="pointcut" expression="execution(* cn.it.shop.service.impl.*.*(..))" /> <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/><!-- Connect the advice on the <span style="font-family:Microsoft Yahei; "> dan pointcut di atas-> <!-aop: pointcut harus ditulis di AOP: penasihat, jika tidak kesalahan akan dilaporkan-> </aop: config>
AOP adalah pemrograman yang berorientasi pada tangen. AOP: Pointcut mendefinisikan garis singgung. Konfigurasi dalam properti ekspresi berarti bahwa semua metode di bawah paket cn.it.shop.service.impl, terlepas dari nilai pengembalian dan parameter, harus memasukkan transaksi. Paket ini milik lapisan DAO dan secara langsung mengoperasikan database. AOP: Nasihat menggabungkan pemberitahuan dan bagian. Kami dapat secara langsung menggunakan saran dan pointcut yang dikonfigurasi di atas untuk memperkenalkannya. Setelah konfigurasi ini, itu berarti bahwa semua metode di bawah paket cn.it.shop.service.impl perlu memasukkan manajemen transaksi. Secara khusus, metode yang dimulai dengan simpan, memperbarui, dan menghapus penggunaan metode yang diatuh, dan metode lain menggunakan metode dukungan. Ini membuatnya mudah untuk memahami arti konfigurasi ini.
4.7 Hasil Integrasi Uji
Ketika kami membangun lingkungan hibernasi sebelumnya, kami menguji bahwa kami secara langsung layanan baru untuk mengoperasikan database, karena belum diintegrasikan dengan musim semi pada waktu itu. Sekarang, setelah mengkonfigurasi beans.xml, pegas diizinkan untuk mengelola transaksi hibernasi. Oleh karena itu, tes saat ini perlu menyerahkan layanan kepada manajemen musim semi, menyuntikkannya melalui pegas, dan mengandalkan Sesi. Jika data dapat dimasukkan ke dalam database, itu berarti transaksi OK.
Pertama, kita perlu mencocokkan layanan ini di file konfigurasi Spring.
Salin kode sebagai berikut: <bean id = "CategoryService">
<name properti = "sessionfactory" ref = "sessionfactory" /> <!-Sesi Dependency menggunakan sessionFactory yang sebelumnya kami perlengkapi->
</tagel>
Kedua, kita perlu menambahkan metode ke antarmuka CategoryService dan kelas implementasinya CategoryServiceImpl untuk menguji situasi integrasi:
Public Interface CategoryService {public void save (kategori kategori); // digunakan untuk menguji lingkungan hibernate pembaruan public void (kategori kategori); // Digunakan untuk menguji integrasi musim semi dan hibernate} kelas publik CategoryServiceImpl mengimplementasikan CategoryService {@Override // Situasi di mana tidak ada integrasi dengan public void save (kategori kategori) {// dapatkan sesi sesi = hibernatesFactory.getSession (); coba {// manual transaction session.getTransaction (). begin (); // Jalankan Sesi Logika Bisnis.Save (Kategori); // kirim secara manual session.getTransaction (). Commit (); } catch (Exception e) {session.getTransaction (). Rollback (); Lempar RuntimeException baru (E); } akhirnya {hibernatesessionfactory.closesession (); }} /*Spring dan hibernasi seluruh* / private sessionfactory sessionfactory; // Tentukan sessionfactory // Ketika Anda perlu menggunakan sessionfactory, Spring akan menyuntikkan sessionfactory ke public void setSessionFactory (sessionFactory sessionFactory) {this.SessionFactory = sessionFactory; } Sesi Protected getSession () {// Dapatkan sesi dari utas saat ini. Jika tidak, buat sesi baru pengembalian sessionfactory.getCurrentSession (); } @Override // Situasi setelah musim semi dan hibernate adalah pembaruan public void terintegrasi (kategori kategori) {getSession (). UPDATE (kategori); }} Sekarang kita dapat menambahkan metode tes ke kelas tes untuk menguji hasil setelah integrasi pegas dan hibernasi:
@Runwith (springjunit4classrunner.class) @contextConfiguration (lokasi = "classpath: beans.xml") kelas publik sshtest {@resource tanggal tanggal pribadi; @Resource Private CategoryService CategoryService; @Test // Tes Spring IOC Development Environment Void SpringioC () {System.out.println (tanggal); } @Test // test // test lingkungan pengembangan hibernate, karena tidak ada integrasi, Anda dapat secara langsung public void hiherNate () {CategoryService CategoryService = baru CategoryServiceImpl (); Kategori kategori = kategori baru ("pria kasual", true); CategoryService.Save (kategori); } @Test // uji public void hibernateEndspring () {CategoryService.update (kategori baru (1, "Casual Women's", True)); // CategoryService disuntikkan dari atas hingga pegas}}Kemudian kami memeriksa database dan menemukan bahwa kategori dengan ID = 1 telah dimodifikasi menjadi gaya wanita biasa, yang berarti bahwa pembaruan berhasil. Pada titik ini, Spring dan Hibernate telah berhasil diintegrasikan.
5. Bangun lingkungan struts2
5.1 Tambahkan Paket Konfigurasi dan Jar yang sesuai
Saya meletakkan paket JAR yang diperlukan untuk Struts2 untuk dijalankan di Perpustakaan Struts2.3.41, jadi saya hanya bisa memperkenalkannya secara langsung, dan saya tidak akan mengulanginya. Selain itu, file web.xml perlu dikonfigurasi sebagai berikut:
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we-pappe." "" "" "" "" "" "" "" "" "" <play-name> e_shop </splay-name> <creendak-file-file> <creendak-filse> index.jsp </celcome-file> </celcome-file-list> <nilter> <nilter-name> struts2 </filter-name> <nilter-clils--prileprup.struxs2.dispatcher.ng.filter.strutsprup. <filter-name> struts2 </tiler-name> <rerl-pola>*. Action </rerl-pattern> </tiler-Mapping> </web-app>
Seperti di atas, kami mengkonfigurasi filter strutsprepareand executeFilter dan mengatur pola url filter ke *.itaction, yaitu, semua. Akhir aksi akan melewati filter ini terlebih dahulu, yang juga merupakan pintu masuk ke Struts2.
5.2 Buat tindakan dan konfigurasinya menjadi file struts.xml
Kami membuat tindakan sebagai berikut:
Kategori Kelas Publik memperluas ActionSupport {private CategoryService CategoryService; // CategoryService diatur untuk secara intuitif melihat perbedaan sebelum dan sesudah integrasi dengan Spring Public Void SetCategoryService (CategoryService CategoryService) {this.categoryService = CategoryService; } public string update () {System.out.println ("---- UPDATE -----"); System.out.println (CategoryService); // output "indeks" pengembalian yang berbeda; } public string save () {System.out.println ("---- save ----"); System.out.println (CategoryService); // Buka pengembalian yang berbeda "indeks" sebelum dan sesudah integrasi; }} Kemudian kami mengkonfigurasi file struts.xml, yang ditempatkan di direktori SRC:
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // Dtd Struts Configuration 2.3 // en" "http://struts.apache.org/dtds =" exts- " Category_Update.Actiocan: Metode Pembaruan Akses-> <action name = "Category_*" Method = "{1}"> <name hasil = "index">/index.jsp </hasilnya> </ciching> </pack Package> </struts> 5.3 Menguji lingkungan Struts2
Metode pengujian adalah: Tulis tindakan akses JSP, dan jika tindakan tersebut dapat dibuat, itu berarti bahwa lingkungan Struts2 OK. Artinya, serangkaian proses di Struts2 dapat diselesaikan secara normal: jsp-> struts.xml-> action-> struts.xml-> jsp, sehingga lingkungan Struts2 siap. Mari Tulis Index.jsp Sederhana
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <!-- The following two ways of writing can be Diakses-> </span> <a href = "$ {pagecontext.request.contextPath} /category_update.action"> Access Update </a> <a href = "Category_Save.action"> Access Simpan </a> </body> </html> Kemudian kami menggunakan proyek berikut, buka server Tomcat, masukkan: http: // localhost: 8080/e_shop/index.jsp di browser, halaman JSP normal akan muncul, lalu klik dua tombol, dan masih melompat ke index.jsp, dan kemudian melihat informasi output konsol:
---memperbarui---
batal
---menyimpan---
batal
Ini menunjukkan bahwa garis Struts2 telah selesai dan tidak ada masalah dengan lingkungan. Pada titik ini, lingkungan pengembangan Struts2 telah dibangun.
Kita melihat bahwa konsol output nol, yang berarti bahwa CategoryService kosong, yang berarti bahwa kita belum mendapatkan layanan kategori sama sekali, karena kita belum terintegrasi dengan pegas dan belum disuntikkan, jadi nol normal. Kami membalikkan output informasi dari konsol dan kami akan menemukan pesan: memilih kacang (struts) untuk (com.opensymphony.xwork2.objectfactory). Kurung mengatakan struts dihasilkan oleh Struts2 sebelum mereka diintegrasikan dengan pegas.
6. Integrasi Musim Semi dan Struts2
6.1 Tambahkan paket JAR yang sesuai
Ketika Spring dan Struts2 terintegrasi, paket JAR terutama di Spring4.2.4-Web, termasuk Struts2-Spring-Plugin-2.3.24.1.jar. Paket panduan tidak akan dijelaskan lagi.
6.2 Cuti Tindakan dan Ketergantungannya ke Manajemen Musim Semi
Konfigurasikan Tindakan dan Ketergantungannya dalam File Konfigurasi Spring Beans.xml. Kami saat ini hanya memiliki satu tindakan, yang dikonfigurasi sebagai berikut:
<bean id = "date" /> <bean id = "CategoryAction" scope = "prototipe"> <properti name = "CategoryService" Ref = "CategoryService" /> <!-CategoryService Dependent dikonfigurasi saat mengintegrasikan hal-hal di atas dan hibernasi-> < /bean>
6.3 Ubah Konfigurasi di Struts.xml
Ternyata di struts.xml, atribut kelas sesuai dengan nama yang sepenuhnya memenuhi syarat dari tindakan spesifik. Sekarang ubah nilai atribut kelas ke nilai ID dari tindakan yang dikonfigurasi di musim semi, yaitu, kategori, sebagai berikut:
<struts> <package name = "shop" extends = "struts-default"> <!-kelas sesuai dengan nilai ID dari tindakan yang dikonfigurasi di musim semi, karena itu harus diserahkan kepada manajemen pegas-> <action name = "Category_*" Method = "{1}"> <hasil hasil = "index"/index.jspor </aksi> </Action> </Action> </Action> </expack = "index"/index.jsps </access> </action> </action> </Action> </Action> </ext/index "/index.jsps </access> </action> </action> </action> </action> </Action> </ext/index"/index.jsps </action> </action> </Action> </Action> </Action> 6.4 Mengkonfigurasi pendengar
Konfigurasikan pendengar ContextLoaderListener di web.xml sehingga file konfigurasi pegas dapat dimuat saat server dimulai. sebagai berikut:
<? Xml Version = "1.0" encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/we-pappe." "" "" "" "" "" "" "" "" "" <play-name> e_shop </splay-name> <creendak-file-file> <creendak-filse> index.jsp </celcome-file> </celcome-file-list> <nilter> <nilter-name> struts2 </filter-name> <nilter-clils--prileprup.struxs2.dispatcher.ng.filter.strutsprup. <Tilter-name> struts2 </tiler-name> <rerl-pattern>*. Action </ruRl-pattern> </tiler-Mapping> <!-Prioritas startup pendengar di Web.xml lebih tinggi dari filter, jadi tidak masalah jika dicocokkan di bawah ini-> <listener classics> org.springfringer. </engeaner> <context-param> <param-name> ContextConfigLocation </param-name> <param-value> classpath: beans.xml </param-value> </context-param> </web-app>
6.5 Hasil Integrasi Uji
Kami menambahkan pernyataan baru ke tindakan untuk memperbarui database, sebagai berikut:
Kategori kelas publik memperluas ActionSupport {kategori kategori pribadi; // Tetapkan variabel anggota pribadi untuk menerima parameter yang dibawa oleh URL. Perhatikan bahwa metode GET dan Set harus ditulis di bawah ini. CategoryService CategoryService pribadi; public void setCategoryService (CategoryService CategoryService) {this.categoryService = CategoryService; } public string update () {System.out.println ("--- UPDATE ---"); System.out.println (CategoryService); // Karena telah diintegrasikan dengan Spring, Anda bisa mendapatkan CategoryService ini. Ini bukan nol setelah mencetaknya CategoryService.update (kategori); // tambahkan pernyataan baru untuk memperbarui database pengembalian "indeks"; } public string save () {System.out.println (CategoryService); mengembalikan "indeks"; } kategori publik getCategory () {return kategori; } public void setCategory (kategori kategori) {this.category = kategori; }} Kemudian kami memodifikasi file index.jsp, sebagai berikut:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'index.jsp' starting page</title> </head> <body> <a href = "$ {pageContext.Request.contextPath} /category_update.action?category.id=2&category.type=GGa&category.hot=False"> Akses pembaruan </a> </href = "kategori_save.action"> Access Save </a> </a> </href = "Category_Save.action"> Access Save </a> </a> </href = "Category_Save.action"> Access </a> </a> </a> Kemudian kami menggunakan proyek berikut, buka server Tomcat, masukkan: http: // localhost: 8080/e_shop/index.jsp di browser, halaman JSP normal akan muncul, lalu klik tombol "Access Update", dan masih melompat ke Index.jsp, dan kemudian melihat informasi output dari konsol::
--- Perbarui --- cn.it.shop.service.impl.categoryserviceImpl@7c5ecf80 hibernate: Perbarui kategori set hot =?, type =? dimana id =?
Kami dapat mengeluarkan informasi dari objek CategoryService, dan juga dapat menghasilkan pernyataan SQL saat menjalankan pernyataan pembaruan. Kemudian kami menanyakan database dan menemukan bahwa jenis data dengan ID = 2 telah diperbarui ke GGA dan HOT telah diperbarui ke False. Kami membalik output informasi dari konsol ke atas dan kami akan menemukan pesan: memilih kacang (musim semi) untuk (com.opensymphony.xwork2.objectfactory), dengan pegas braket. Dibandingkan dengan situasi di atas, kita dapat melihat bahwa setelah Struts2 diintegrasikan dengan musim semi, aksinya diserahkan kepada musim semi untuk manajemen.
Pada titik ini, integrasi Struts2, Hibernate4 dan Spring4 telah selesai, dan kami dapat mengembangkannya di lingkungan SSH berikutnya!
Paket JAR lengkap yang diperlukan untuk integrasi SSH yang diperkenalkan dalam artikel ini: Unduh Gratis
Alamat unduhan kode sumber dari seluruh proyek: //www.vevb.com/article/86099.htm
Alamat asli: http://blog.csdn.net/eson_15/article/details/51277324
(Catatan: Pada akhirnya, unduhan kode sumber dari seluruh proyek disediakan! Semua orang dipersilakan untuk mengumpulkan atau mengikuti)
Di atas adalah seluruh konten artikel ini. Saya harap Anda dapat memberi Anda referensi dan saya harap Anda dapat mendukung wulin.com lebih lanjut.