Kata pengantar
SSH bukanlah kerangka kerja, tetapi integrasi beberapa kerangka kerja (Struts+Spring+Hibernate). Saat ini merupakan kerangka kerja integrasi open source yang populer untuk aplikasi web, yang digunakan untuk membangun aplikasi web multi-lapisan yang fleksibel dan mudah discaling.
Sistem yang mengintegrasikan kerangka kerja SSH dibagi menjadi empat lapisan dalam hal tanggung jawab: Lapisan presentasi, lapisan logika bisnis, lapisan persistensi data dan lapisan modul domain (lapisan entitas).
Sebagai infrastruktur keseluruhan sistem, Struts bertanggung jawab atas pemisahan MVC. Dalam bagian model dari kerangka kerja Struts, ia mengontrol lompatan bisnis dan menggunakan kerangka hibernasi untuk memberikan dukungan untuk lapisan kegigihan. Di satu sisi, Spring adalah wadah IOC yang ringan, bertanggung jawab untuk menemukan, memposisikan, menciptakan dan mengelola ketergantungan antara objek dan objek, dan di sisi lain, itu dapat membuat struts dan hibernate bekerja lebih baik.
Gunakan Myeclipse untuk mengintegrasikan tiga kerangka kerja SSH utama dan mengimplementasikan demo yang mensimulasikan pendaftaran pengguna, sesuai dengan versi:
Versi Struts: 2.1;
Versi Musim Semi: 3.1;
Versi Hibernate: 3.3;
1. Persiapan sebelum integrasi
1. Buat proyek web sebagai berikut:
Catatan: Nama paket yang mendukung tindakan harus "tindakan", dan kelas tindakan harus diakhiri dengan tindakan, yaitu, formulirnya seperti xxxaction, seperti yang ditunjukkan pada gambar di atas
2. Buat database dan tabel:
Buat database sshdemo; Buat Tabel T_USER (Kunci Primer ID Int, Nama Pengguna Varchar (10), kata sandi Varchar (20))
3. Impor paket koneksi basis data C3P0JAR Paket, klik untuk mengunduh:
c3p0-0.9.2-pre1.jar, mysql-connector-java-5.1.13-bin.jar
2. Konfigurasi Kerangka Struts:
1. Pilih proyek dan klik kanan untuk memilih: myeclipse -> facet proyek [kemampuan] -> instal apache struts (2.x) facet, sebagai berikut:
2. Pilih versinya, di sini saya memilih 2.1, klik "Selesai", sebagai berikut:
3. Setelah menyelesaikan langkah -langkah di atas, Anda akan menemukan bahwa ada file struts.xml tambahan di direktori SRC, dengan konten berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <! Doctype Struts Public "-// Apache Software Foundation // DTD Struts Configuration 2.1 // en" "http://struts.apache.org/dtds/struts-2.1.dtd"> <struts> </struts>
4. Dalam file web.xml di direktori web-inf, ada bagian tambahan kode konfigurasi untuk filter struts, sebagai berikut:
5. Lihat gambar di atas, ubah *.action menjadi "/ *", dan kerangka kerja struts dikonfigurasi pada titik ini;
3. Konfigurasi Kerangka Musim Semi:
1. Lihat Konfigurasi Struts, Pilih Proyek, Klik Kanan dan Pilih: Myeclipse -> Facets Proyek [Kemampuan] -> Instal SPRING FACET, Pilih Versi, dan Pilih 3.1 sebagai berikut:
2. Klik "Selesai" dan Anda akan menemukan bahwa ada file ApplicationContext.xml di direktori SRC, file spring-form.tld dan spring.tld di direktori web-inf, dan sepotong kode yang terkait dengan konfigurasi pegas ditambahkan dalam file web.xml. Konstruksi kerangka musim semi pada dasarnya telah selesai (pengenalan namespace akan dibahas nanti), seperti yang ditunjukkan di bawah ini:
4. Konfigurasi Kerangka Hibernate:
1. Lihat konfigurasi struts, pilih proyek, klik kanan dan pilih: myeclipse -> aspek proyek [kemampuan] -> instal hibernateFacet, pilih versi, dan pilih 3.3 di sini sebagai berikut:
2. Klik "Selesai" dan Anda akan menemukan bahwa ada paket default tambahan di direktori SRC (dapat dihapus) dan sepotong kode dalam file web.xml (akan dikonfigurasi ulang nanti), seperti yang ditunjukkan di bawah ini:
3. Impor paket toples yang mendukung anotasi "@entity": pilih proyek, klik kanan untuk memilih: myeclipse -> aspek proyek [kemampuan] -> kelola ..., dan kemudian ikuti langkah -langkah pada gambar berikut:
Setelah menyelesaikan langkah -langkah di atas, tiga kerangka kerja utama pada dasarnya dibangun, dan kemudian mereka terintegrasi.
5. Integrasi
1. Untuk mencegah ApplicationContext.xml terlihat terlalu membengkak dan mudah dikelola, kami menyimpan konfigurasi terkait hibernate di file .xml lain, dan kemudian mengimpornya di ApplicationContext.xml. Langkah -langkah spesifik:
(1) Buat file bernama hibernatecontext.xml di direktori src (level yang sama dengan applicationContext.xml), salin konten di applicationContext.xml, dan kemudian buat perubahan;
(2) Isi dalam file hibernateContext.xml:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org. Konfigurasi Sesi Sesi-> <bean id = "sessionFactory"> <!-Properti DataSource akan dikonfigurasi dalam file ApplicationContext.xml. Ref="dataSource"></property> <!-- Set hibernate-related configuration items --> <property name="hibernateProperties"> <!-- Props tag is to inject properties of Properties type --> <!-- The key must be hibernate.prefix--> <props> <prop key = "hibernate.dialect"> org.hibernate.dialect.mysqldialect </prop> <!-show_sql adalah tujuan mencetak pernyataan sql-> <prop kunci = "hibernate.show_sql"> true = <!-mempercantik format pencetakan sql-sql-forate —sql "> </prop> <! <!-A) Buat drop: Buat tabel data saat menjalankan program, dan hapus tabel setelah dieksekusi. Dalam pengembangan aktual, ini sering digunakan untuk pengujian b) Buat: menciptakan kembali tabel data setiap kali program dieksekusi c) Pembaruan: Saat mengeksekusi program, akan dinilai bahwa jika ada, tabel tidak akan dibuat, jika tidak tabel data akan dibuat, dan bidang -bidang dalam tabel Data akan secara otomatis ditambahkan sesuai dengan peningkatan atribut di Kelas Enteritas (Kelas Pengembangan) D) Data D) secara otomatis ditambahkan sesuai dengan peningkatan Atribut di Kelas Enteritas (Kelas Pengembangan) D) D) DECIDE D) DECATICE D) secara otomatis sesuai dengan KATAS D) Data Data. Tidak konsisten dengan bidang dalam tabel, kesalahan akan dilaporkan (lingkungan produksi)-> <prop key = "hibernate.hbm2ddl.auto"> Validasi </prop> </props> </property> <!-Konfigurasikan kelas entitas hibernate-> <nama properti = "packagestoscan"> <! Its value is generally the full name of the corresponding bean package, and the classes in the bean package generally correspond to the table in the database --> <list> <value>com.beauxie.bean</value> </list> </property> </bean> <!-- Configure the hibernateTemplate template--> <bean id="hibernateTemplate"> <property name="sessionFactory" Ref = "sessionFactory"> </prop Property> </bean> </tagel>
(3) Hapus konfigurasi "sessionFactory" di applicationContext.xm (karena telah dikonfigurasi dalam hibernatecontext.xml), dan kemudian mengimpor konten hibernatecontext.xml yang dimodifikasi. Setelah mengimpor, konten ApplicationContext.xml adalah sebagai berikut:
<? XML Versi = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmls xmlns: p = "http://www.springframework.org/schema/p" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org.org/beans/beans/beans ID = "DataSource"> </bean> <!- Impor file konfigurasi pegas lainnya. Jika mereka ditempatkan dalam satu file, mereka akan terlihat kembung -> <import resource = "hibernateContext.xml"/> </tobel>
2. Berdasarkan pada sumber data asli di file applicationContext.xm, ubah konfigurasinya (nama basis data, nama pengguna, kata sandi, dll.) ( Catatan: Tag nilai tidak boleh berisi spasi atau masuk !! ), seperti yang ditunjukkan di bawah ini:
<bean id = "DataSource"> <properti name = "jdbcurl"> <!-Jika Anda menggunakan atribut nilai secara langsung alih-alih tag nilai, Anda perlu melarikan diri "&" dan menggunakan tag nilai. Tag <span style = "Color:#ff0000;"> tidak boleh berisi spasi atau pengembalian carriage, karena itu akan mengubah spasi menjadi "" </span>, menghasilkan database yang tidak dapat terhubung kecuali sumber data ditulis ulang-> <value> <! [Cdata [jdbc: mysql: // localhost: 3306/sshdemo? UseUnicode = true & characterencoding = utf8 & useerverprepstmts = t rue & prepstmtcachesqlLImit = 256 & cacheprepstmts = true & prepstmtcachesize = 256 & recriteBatchedStatements = true]]> </value> </property> <property name="driverClass" value="com.mysql.jdbc.Driver"></property> <property name="user" value="root"></property> <property name="password" value="root"></property> <property name="acquireIncrement" value="3"></property> <property name="initialPoolSize" value="10"></property> <property name = "minpoolSize" value = "2"> </property> <properti name = "maxpoolSize" value = "10"> </propert> </tean>
3. Di ApplicationContext.xm, konfigurasikan pemindai pegas, untuk menambahkan anotasi komponen pegas ke kelas kami, dan kacang dapat secara otomatis dimuat. Langkah -langkah spesifiknya adalah sebagai berikut: (1) memperkenalkan namespace konteks, mendukung tag konteks, klik "namespaces" di bagian bawah, dan kemudian periksa item konteks:
(2) Mengkonfigurasi pemindai pegas:
<!-Konfigurasikan pemindai pegas dan tambahkan anotasi komponen pegas ke kelas kami untuk secara otomatis memuat kacang->
<Context: Component-Scan Base-package = "com.beauxie.action, com.beauxie.service, com.beauxie.dao">
</konteks: komponen-scan>
Pada titik ini, tiga lingkungan kerangka kerja SSH utama telah dibangun, dan langkah selanjutnya adalah mengimplementasikan pendaftaran pengguna berdasarkan kerangka kerja SSH.
6. Kasus: Imitasi sederhana pendaftaran pengguna
1. Kode halaman pendaftaran meja depan, index.jsp:
<%@ halaman bahasa = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <%string path = request.getContextPath (); String basePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/"; %> <! Doctype html public "-// w3c // dtd html 4.01 transisi // en"> <html> <adept> <base href = "<%= Basepath%>"> <it title> CONCEKSI "NO-CACH" <META HTTP-EQUIV = "Pragma" Content = "No-CACH =" NO-CACH = "NO-CACH =" NO-CACH "<META HTTP-EQUIV =" Pragma "Content =" No-CACH = "NO-CACH =" NO-CACH = "NO-CACH" NO-CACH = "NO-CACH" NO-CACH "NO-CACH" NO-CACH "NO-CACH" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href = "styles.css">-> </head> <body> <form Action = "$ {pageContext.Request.contextPath}/user/regist" Method = "Post"> <!-Anda juga dapat menggunakan nilainya. name = "UserName"> <br> Kata sandi: <input type = "password" name = "password"> <br> <input type = "kirim" value = "registration"> </form> </body> </html>2. Pengguna Kode Kelas:
paket com.beauxie.bean; impor javax.persistence.entity; impor javax.persistence.id; impor javax.persistence.table; /** * @Author Beauxie * Di sini properti pengguna harus sama dengan bidang dalam tabel T_USER, * jika tidak, Anda perlu menentukan bidang secara manual dalam tabel yang sesuai untuk publicing publicing (name = "T_USER") // tidak menambah annotasi ini, NAMABURE PUBLAULD PUBER PUBACING PUBER PUBACING OBER PUBACE, T_USER TABEL INT INT ID; // ID Pengguna Private String UserName; // Username Private String Password; // Kata Sandi Public Int GetId () {Return ID; } public void setid (int id) {this.id = id; } public string getUserName () {return username; } public void setusername (string username) {this.username = username; } public string getPassword () {return kata sandi; } public void setPassword (kata sandi string) {this.password = kata sandi; }} 3. Kode Kelas Pengguna:
paket com.beauxie.dao; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.orm.hibernate3.hibernateTemplate; impor org.springframework.stereotype.repository; impor com.beauxie.bean.user; /*** @Author Beauxie* Dao Layer, beroperasi pada database*/ @repositori // Properti ini sesuai dengan lapisan persistensi (biasanya lapisan DAO), yang berarti diserahkan kepada manajemen musim semi, dan nama kelas yang sesuai, tidak akan dikonfigurasi, No Plate. di file konfigurasi pegas; /*** Pendaftaran pengguna, yaitu, tambahkan catatan baru ke tabel* @param user*/public void addUser (pengguna pengguna) {// Tambahkan data ke dalam database, dan Anda bisa mendapatkan template.save (pengguna); }} 4.SerService Class Code:
paket com.beauxie.service; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.stereotype.service; impor com.beauxie.bean.user; impor com.beauxie.dao.userdao; /*** @Author Beauxie* Lapisan Layanan*/ @Service // Properti ini sesuai dengan lapisan layanan umumnya adalah lapisan layanan), yang berarti diserahkan kepada manajemen pegas, dan nama kelas yang sesuai juga akan memiliki UserDao Userdao "S" Userdao Private Userdao "Autowired // juga secara otomatis; public void addUser (pengguna pengguna) {// Memanggil metode addUser dari dao layer userdao.adduser (user); }} 5. Kode Kelas Pengguna:
paket com.beauxie.action; impor javax.servlet.http.httpservletRequest; impor org.apache.struts2.servletactionContext; impor org.apache.struts2.convention.annotation.action; impor org.apache.struts2.convention.annotation.namespace; impor org.apache.struts2.convention.annotation.Results; impor org.springframework.beans.factory.annotation.Autowired; impor org.springframework.context.annotation.scope; impor org.springframework.stereotype.controller; impor com.beauxie.bean.user; impor com.beauxie.service.userservice; /** * @Author Beauxie * */ @controller // Digunakan untuk memberi anotasi komponen lapisan kontrol @namespace ("/user") // prefix url @scope ("prototipe") // Tindakan adalah singleton yang berbeda, tetapi dalam pengembangan paru umum adalah "Struts-Default", jadi @Results ({@result (name = "regisSuccess", location = "/msg.jsp")}) UserAction kelas publik { @autowired // secara otomatis menyuntikkan layanan UserserServer Private; // struts default untuk mencegat ".action dan tanpa sufiks" @Action (value = "regist") // akses: /user/regist.action atau/user/regist string publik regist () {// Dapatkan permintaan httpservletrequest request = servletactionContext.getRequest (); // Dapatkan formulir yang dikirimkan data Username = request.getParameter ("nama pengguna"); String password = request.getParameter ("password"); // Encapsulate pengguna pengguna pengguna = pengguna baru (); user.setid (1000); user.setusername (nama pengguna); user.setPassword (kata sandi); // Hubungi metode layer layanan untuk menambahkan catatan ke layanan database.adduser (pengguna); // Simpan informasi prompt ke dalam domain permintaan dan tampilkan permintaan.setAttribute ("msg", "selamat, pendaftaran berhasil! <br> nama daftar:"+nama pengguna); mengembalikan "regissiccess"; }} 6. Antarmuka Prompt Pesan: Kode msg.jsp, sebagai berikut:
<%@ halaman bahasa = "java" import = "java.util.*" pageEncoding = "UTF-8"%> <%string path = request.getContextPath (); String basePath = request.getScheme () + ": //" + request.getServerName () + ":" + request.getServerport () + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>Message prompt</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href = "styles.css"> -> </head> <body> $ {msg} </body> </html>7. Tambahkan proyek ke server, mulai layanan, buka browser, dan kunjungi: http: // localhost/sshdemo/user/regist
8. Masukkan nama pengguna dan kata sandi, klik "Daftarkan" untuk menampilkan hasilnya:
9. Konsol output Pernyataan SQL (output telah dikonfigurasi dan pernyataan SQL telah dipercantik dalam file hibernateContext.xml):
10. Lihat Hasil Basis Data:
Kasus sederhana ini telah berakhir. Tidak ada masalah dengan verifikasi data yang dikirimkan oleh formulir dan kode yang kacau. Itu harus diperbarui di masa depan.
7. Ringkasan:
1. Integrasi tiga kerangka kerja utama harus diperkenalkan terlebih dahulu dan kemudian diintegrasikan;
2. Pastikan untuk mengingat untuk mengimpor paket JAR database;
3. Kelas aksi harus ditempatkan di bawah nama paket "tindakan", dan nama kelas harus diakhiri dengan tindakan, seperti "xxxaction";
4. Saat mengkonfigurasi hibernate, pastikan untuk mengimpor paket toples yang mendukung anotasi "@entity";
5. Anda dapat menentukan jenis permintaan untuk struts yang dicegat dalam file struts.xml, yang default ke .action dan tanpa sufiks.
6. Anda dapat menentukan jenis filter dari filter struts di file web.xml. Standarnya adalah *.action, dan harus diubah menjadi / *;
7. Dalam file ApplicationContext.xm, Anda perlu mengonfigurasi: sessionfactory, kelas entitas hibernate, templat hibernateTemplate, sumber data sumber data, dan pemindai pegas (termasuk hibernateContext.xml);
8. Setiap kelas harus menambahkan anotasi yang sesuai, dan metode dalam tindakan juga harus ditambahkan.
Unduh kode sumber instan: http://xiazai.vevb.com/201610/yuanma/sshzhuce(vevb.com).rar
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.