1. Berbagai nilai default dalam konfigurasi Action
<nama paket="csdn" namespace="/test" extends="struts-default">
<nama tindakan="helloworld" metode="eksekusi" >
<nama hasil="sukses">/WEB-INF/page/hello.jsp</result>
</aksi>
</paket>
1>Jika tidak ada kelas yang ditentukan untuk tindakan, defaultnya adalah ActionSupport.
2>Jika tidak ada metode yang ditentukan untuk tindakan, metode eksekusi() dalam tindakan akan dieksekusi secara default.
3>Jika atribut nama hasil tidak ditentukan, nilai defaultnya adalah sukses.
2. Berbagai jenis penerusan hasil dalam Tindakan
<nama tindakan="helloworld">
<nama hasil="sukses">/WEB-INF/page/hello.jsp</result>
</aksi>
Konfigurasi hasil mirip dengan penerusan di struts1, tetapi struts2 menyediakan beberapa tipe hasil yang umum digunakan adalah: operator (nilai default), redirect, redirectAction, plainText.
Berikut ini adalah contoh tipe hasil redirectAction, jika tindakan yang dialihkan berada dalam paket yang sama:
<result type="redirectAction">halo dunia</result>
Jika tindakan yang dialihkan berada di namespace lain:
<tipe hasil="redirectAction">
<param name="actionName">halo dunia</param>
<param name="namespace">/test</param>
</hasil>
plaintext: menampilkan isi file asli. Misalnya, ketika kita perlu menampilkan kode sumber file jsp apa adanya, kita dapat menggunakan tipe ini.
<nama hasil="sumber" type="plainText ">
<param nama="lokasi">/xxx.jsp</param>
<param name="charSet">UTF-8</param><!-- Tentukan pengkodean untuk membaca file -->
</hasil>
Hasilnya, Anda juga dapat menggunakan ekspresi ${attribute name} untuk mengakses atribut dalam tindakan. Nama atribut dalam ekspresi sesuai dengan atribut dalam tindakan. sebagai berikut:
<hasil type="redirect">tampilan.jsp?id=${id}</result>
3. Beberapa Tindakan berbagi satu tampilan - konfigurasi hasil global
Ketika tampilan yang sama digunakan dalam beberapa tindakan, kita harus mendefinisikan hasilnya sebagai tampilan global. Global forward disediakan di struts1, dan fungsi serupa juga disediakan di struts2:
<paket....>
<hasil-global>
<nama hasil="message">/message.jsp</result>
</hasil-global>
</paket>
4. Memasukkan nilai ke dalam properti Action
Struts2 menyediakan fungsi injeksi ketergantungan untuk properti di Action. Dalam file konfigurasi struts2, kita dapat dengan mudah memasukkan nilai ke dalam properti di Action. Catatan: Properti harus menyediakan metode penyetel.
kelas publik HelloWorldAction{
penyimpanan String pribadi;
String publik getSavePath() {
kembalikan savePath;
}
public void setSavePath(String simpanPath) {
ini.savePath = simpanPath;
}
...
}
<nama paket="csdn" namespace="/test" extends="struts-default">
<nama tindakan="helloworld" >
<param name="savePath">/gambar</param>
<nama hasil="sukses">/WEB-INF/page/hello.jsp</result>
</aksi>
</paket>
Perintah di atas memasukkan "/images" ke dalam atribut savePath tindakan melalui node <param>.
5. Tentukan akhiran permintaan yang perlu diproses oleh Struts 2
Sebelumnya kami menggunakan akhiran .action secara default untuk mengakses Action. Faktanya, sufiks default dapat dimodifikasi melalui konstanta "struts.action.extension". Misalnya, kita dapat mengonfigurasi Struts 2 untuk hanya memproses jalur permintaan dengan .do sebagai sufiks:
<?xml versi="1.0" pengkodean="UTF-8"?>
<!DOCTYPE penyangga PUBLIC
"-//Apache Software Foundation//Konfigurasi DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<penopang>
<nama konstan = "struts.action.extension" nilai = "lakukan"/>
</penopang>
Jika pengguna perlu menentukan beberapa sufiks permintaan, pisahkan beberapa sufiks tersebut dengan koma (,). menyukai:
<nama konstan="struts.action.extension" value="lakukan,pergi"/>
6. Mendeskripsikan pengertian konstanta secara rinci
Konstanta dapat dikonfigurasi di struts.xml atau struts.properties. Disarankan untuk mengkonfigurasinya di struts.xml. Kedua metode konfigurasinya adalah sebagai berikut:
Konfigurasikan konstanta dalam file struts.xml
<penopang>
<nama konstan = "struts.action.extension" nilai = "lakukan"/>
</penopang>
Konfigurasikan konstanta di struts.properties
struts.action.extension=lakukan
Karena konstanta dapat didefinisikan dalam beberapa file konfigurasi di bawah ini, kita perlu memahami urutan pencarian di mana struts2 memuat konstanta:
struts-default.xml
struts-plugin.xml
struts.xml
struts.properties
web.xml
Jika konstanta yang sama dikonfigurasi di beberapa file, nilai konstanta yang dikonfigurasi di file terakhir akan menimpa nilai konstanta yang dikonfigurasi di file sebelumnya.
7. Pengenalan konstanta yang umum digunakan
<!-- Tentukan set pengkodean default, yang bekerja pada metode setCharacterEncoding dari HttpServletRequest dan output dari freemarker dan kecepatan -->
<nama konstan = "struts.i18n.encoding" value = "UTF-8"/>
<!-- Atribut ini menentukan akhiran permintaan yang perlu diproses oleh Struts 2. Nilai default atribut ini adalah action, yaitu semua permintaan yang cocok dengan *.action diproses oleh Struts2.
Jika pengguna perlu menentukan beberapa sufiks permintaan, pisahkan beberapa sufiks tersebut dengan koma (,). -->
<nama konstan = "struts.action.extension" nilai = "lakukan"/>
<!-- Mengatur apakah browser menyimpan konten statis dalam cache. Nilai defaultnya benar (digunakan dalam lingkungan produksi). Yang terbaik adalah mematikannya selama tahap pengembangan -->
<nama konstan="struts.serve.static.browserCache" value="false"/>
<!-- Ketika file konfigurasi struts diubah, apakah sistem akan memuat ulang file secara otomatis, nilai defaultnya adalah false (digunakan dalam lingkungan produksi), yang terbaik adalah mengaktifkannya selama tahap pengembangan -->
<nama konstan="struts.configuration.xml.reload" value="true"/>
<!-- Digunakan dalam mode pengembangan, sehingga pesan kesalahan yang lebih detail dapat dicetak -->
<nama konstan = "struts.devMode" nilai = "benar" />
<!--Tema tampilan default-->
<nama konstan="struts.ui.theme" value="sederhana" />
<! Saat berintegrasi dengan pegas, tentukan bahwa pegas bertanggung jawab atas pembuatan objek tindakan -->
<nama konstan = "struts.objectFactory" nilai = "spring" />
<!Properti ini menetapkan apakah Struts 2 mendukung pemanggilan metode dinamis. Nilai default properti ini adalah true. Jika Anda perlu mematikan pemanggilan metode dinamis, Anda dapat menyetel properti ini ke false. -->
<nama konstan="struts.enable.DynamicMethodInvocation" value="false"/>
<!--Batas ukuran file yang diunggah-->
<nama konstan="struts.multipart.maxSize" value="10701096"/>
8. Tentukan beberapa file konfigurasi struts untuk aplikasi tersebut
Di sebagian besar aplikasi, seiring dengan peningkatan skala aplikasi, jumlah Tindakan dalam sistem juga akan meningkat secara signifikan, menyebabkan file konfigurasi struts.xml menjadi sangat membengkak. Untuk menghindari file struts.xml menjadi terlalu besar dan membengkak serta meningkatkan keterbacaan file struts.xml, kita dapat menguraikan file konfigurasi struts.xml menjadi beberapa file konfigurasi, dan kemudian memasukkan file konfigurasi lainnya di struts.xml mengajukan. Struts.xml berikut menentukan beberapa file konfigurasi melalui elemen <include>:
<?xml versi="1.0" pengkodean="UTF-8"?>
<!DOCTYPE penyangga PUBLIC
"-//Apache Software Foundation//Konfigurasi DTD Struts 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<penopang>
<sertakan file="struts-user.xml"/>
<sertakan file="struts-order.xml"/>
</penopang>
Dengan cara ini, kita dapat menambahkan Struts 2 Action ke beberapa file konfigurasi berdasarkan modul.
9. Panggilan metode dinamis
Jika ada beberapa metode dalam Action, kita dapat menggunakan !+nama metode untuk memanggil metode yang ditentukan. sebagai berikut:
kelas publik HelloWorldAction{
pesan String pribadi;
....
public String mengeksekusi() melempar Pengecualian{
this.message = "Aplikasi struts2 pertama saya";
kembalikan "sukses";
}
public String other() melempar Pengecualian{
this.message = "Metode kedua";
kembalikan "sukses";
}
}
Asumsikan bahwa jalur URL untuk mengakses tindakan di atas adalah: /struts/test/helloworld.action
Untuk mengakses metode other() dari tindakan tersebut, kita dapat memanggilnya seperti ini:
/struts/test/helloworld!lainnya.aksi
Jika kita tidak ingin menggunakan pemanggilan metode dinamis, kita dapat mematikan pemanggilan metode dinamis melalui konstanta struts.enable.DynamicMethodInvocation.
<nama konstan="struts.enable.DynamicMethodInvocation" value="false"/>
10. Gunakan wildcard untuk menentukan tindakan
<nama paket="csdn" namespace="/test" extends="struts-default">
<nama tindakan="helloworld_*" metode="{1}">
<nama hasil="sukses">/WEB-INF/page/hello.jsp</result>
</aksi>
</paket>
kelas publik HelloWorldAction{
pesan String pribadi;
....
public String mengeksekusi() melempar Pengecualian{
this.message = "Aplikasi struts2 pertama saya";
kembalikan "sukses";
}
public String other() melempar Pengecualian{
this.message = "Metode kedua";
kembalikan "sukses";
}
}
Untuk mengakses metode other(), Anda dapat mengaksesnya melalui URL seperti ini: /test/helloworld_other.action
11. Menerima parameter permintaan
Gunakan tipe dasar untuk menerima parameter permintaan (dapatkan/posting)
Tentukan atribut dengan nama yang sama dengan parameter permintaan di kelas Action, dan struts2 dapat secara otomatis menerima parameter permintaan dan menetapkannya ke atribut dengan nama yang sama.
Jalur permintaan: http://localhost:8080/test/view.action?id=78
Tindakan Produk kelas publik {
id Integer pribadi;
public void setId(Integer id) {//struts2 menggunakan teknologi refleksi untuk memanggil metode penyetel properti dengan nama yang sama dengan parameter permintaan untuk mendapatkan nilai parameter permintaan
ini.id = id;
}
Integer publik getId() {kembalikan id;}
}
Gunakan tipe komposit untuk menerima jalur permintaan parameter permintaan: http://localhost:8080/test/view.action?product.id=78
Tindakan Produk kelas publik {
produk Produk milik pribadi;
public void setProduk(Produk produk) { ini.produk = produk }
Produk publik getProduct() {kembalikan produk;}
}
Struts2 pertama-tama membuat objek produk dengan memanggil konstruktor default Produk melalui teknologi refleksi, dan kemudian memanggil metode penyetel properti dengan nama yang sama dengan parameter permintaan dalam produk melalui teknologi refleksi untuk mendapatkan nilai parameter permintaan.
12. Arti konversi tipe
Untuk kerangka kerja MVC yang cerdas, penerapan konversi tipe tidak dapat dihindari. Karena parameter permintaan aplikasi struktur B/S (browser/server) dikirim ke server melalui browser, parameter ini tidak dapat memiliki tipe data yang kaya, jadi tipe data konversi harus diselesaikan di sisi server
Kerangka kerja MVC adalah solusi lapisan presentasi dan harus menyediakan dukungan konversi tipe. Struts2 menyediakan dukungan konversi tipe yang sangat kuat.
13. Pengolahan data lapisan presentasi
Untuk aplikasi web, lapisan presentasi terutama digunakan untuk berinteraksi dengan pengguna, termasuk mengumpulkan data masukan pengguna dan menyajikan status server kepada pengguna. Oleh karena itu, aliran data pada lapisan presentasi pada dasarnya memiliki dua arah: data masukan dan data keluaran.
Untuk data masukan: Anda perlu menyelesaikan konversi dari data string ke beberapa jenis data. Program biasanya tidak dapat diselesaikan secara otomatis dan perlu dikonversi secara manual ke dalam kode.
Untuk data keluaran: Java dan jsp mendukung keluaran langsung dari berbagai tipe data.
Pemrosesan data lainnya pada lapisan presentasi adalah: verifikasi data, yang dibagi menjadi verifikasi klien dan verifikasi sisi server. Hal ini akan dijelaskan secara rinci nanti.
14. Ketik konversi
Semua parameter HTTP adalah tipe string. Data yang disimpan mungkin berupa string, angka, Boolean, tanggal dan waktu, dll. atau tipe JavaBean. Konversi tipe manual, seperti mengonversi string menjadi tanggal, dengan: memperoleh string melalui metode request.getParameter; memeriksa apakah string tersebut kosong;
15. Konversi tipe Struts2
Konversi tipe bawaan Struts2
String dan boolean menyelesaikan konversi antara nilai string dan Boolean
Konversi string dan karakter antara string dan karakter biasa
String, int, dan Integer menyelesaikan konversi antara string dan integer.
String dan Long menyelesaikan konversi antara string dan nilai integer panjang
String, double, dan Double menyelesaikan konversi string dan nilai floating point presisi ganda.
String dan Float menyelesaikan konversi antara string dan floating point presisi tunggal
String dan Tanggal menyelesaikan konversi antara tipe string dan tanggal. Format tanggal menggunakan format SHORT dari Lokal tempat pengguna meminta format tersebut.
String dan array Dalam kasus default, elemen array adalah string. Jika pengguna mendefinisikan konverter tipe, itu juga bisa berupa tipe data komposit lainnya.
String dan Peta dan Daftar
16. API konversi tipe struts
Konverter tipe Struts2 sebenarnya diimplementasikan berdasarkan OGNL. Ada antarmuka ognl.TypeConverter di proyek OGNL. Antarmuka didefinisikan sebagai berikut:
antarmuka publik TypeConverter {
Konversi Objek publikValue(Peta arg0, Objek arg1, Anggota arg2, String arg3,
Objek arg4, Kelas arg5) {
kembalikan nol;
}
Untuk mengimplementasikan konverter tipe, Anda harus mengimplementasikan TypeConverter di atas. Namun, metode pada antarmuka di atas terlalu rumit, sehingga proyek OGNL juga menyediakan kelas implementasi antarmuka ini: ognl.DefaultTypeConverter mewarisi kelas ini. Kelas didefinisikan sebagai berikut:
public class DefaultTypeConverter extends Obyek mengimplementasikan TypeConverter{
public Object convertValue(Map<String,Object> konteks, Nilai objek, Kelas toType) {
}
......//Metode lainnya
}
Peran metode ConvertValue adalah untuk menyelesaikan konversi tipe, tetapi konversi tipe ini bersifat dua arah. Ketika sebuah string perlu diubah menjadi instance objek, metode ini juga digunakan digunakan. Konversi ini dilakukan melalui tipe parameter toType yang merupakan tipe target yang perlu dikonversi. Oleh karena itu, arah konversi dapat ditentukan berdasarkan parameter toType.
Parameter metode ConvertValue dan arti kembali Parameter pertama: konteks adalah konteks lingkungan konversi tipe. Parameter kedua: nilai adalah parameter yang perlu dikonversi. Nilai parameter nilai juga berbeda tergantung pada arah konversi.
Parameter ketiga: toType adalah tipe target yang dikonversi. Nilai kembalian metode ini adalah nilai setelah konversi tipe. Jenis nilainya juga berubah seiring arah konversi. Terlihat bahwa metode convertValue yang dikonversi menerima nilai yang perlu dikonversi, jenis target yang perlu dikonversi adalah parameter, dan kemudian mengembalikan nilai target yang dikonversi.
Mengapa Nilai merupakan array string?
Untuk konverter DefaultTypeConverter, ia harus memperhitungkan situasi yang paling umum, sehingga memperlakukan semua parameter permintaan sebagai array string, bukan string. Setara dengan nilai parameter yang diperoleh getParameterValues()