1. Akses atau tambahkan atribut permintaan/sesi/aplikasi
lingkup String publik() melempar Pengecualian{
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Application scope");//Masukkan aplikasi ke dalam ServletContext
ctx.getSession().put("ses", "session range");//Masukkan ses ke dalam sesi
ctx.put("req", "request range");//Masukkan req ke dalam permintaan
kembalikan "ruang lingkup";
}
JSP:
<tubuh>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req<br>
</tubuh>
2. Dapatkan objek HttpServletRequest / HttpSession / ServletContext / HttpServletResponse
Metode pertama, dapatkan langsung melalui kelas ServletActionContext:
public String rsa() melempar Pengecualian{
Permintaan HttpServletRequest = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
permintaan.getSession()
Respon HttpServletResponse = ServletActionContext.getResponse();
kembalikan "ruang lingkup";
}
Metode kedua, implementasikan antarmuka yang ditentukan dan masukkan ketika kerangka struts sedang berjalan:
kelas publik HelloWorldAction mengimplementasikan ServletRequestAware, ServletResponseAware, ServletContextAware{
permintaan HttpServletRequest pribadi;
servletContext pribadi servletContext;
respons HttpServletResponse pribadi;
public void setServletRequest(permintaan HttpServletRequest) {
this.request=permintaan;
}
public void setServletResponse(HttpServletResponse res) {
this.response=res;
}
public void setServletContext(ServletContext ser) {
ini.servletContext=ser;
}
}
3. Unggah berkas
Langkah pertama: Tambahkan commons-fileupload-1.2.1.jar dan commons-io-1.3.2.jar di bawah WEB-INF/lib. Kedua file dapat diunduh dari http://commons.apache.org/.
Langkah 2: Atur enctype tabel formulir ke: "multipart/form-data", sebagai berikut:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" nama="uploadImage">
</bentuk>
Langkah 3: Tambahkan atribut berikut di kelas Action. Bagian merah dari atribut sesuai dengan nama field file di formulir:
kelas publik HelloWorldAction{
File pribadi uploadImage;//Dapatkan file yang diunggah
private String uploadImageContentType;//Dapatkan jenis file
private String uploadImageFileName;//Dapatkan nama file
//Metode pengambil/penyetel properti dihilangkan di sini.
unggahan String publik() memunculkan Pengecualian{
String realpath = ServletActionContext.getServletContext().getRealPath("/gambar");
File file = File baru (realpath);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, File baru(file, uploadImageFileName));
kembalikan "sukses";
}
}
4. Unggah banyak file
Langkah pertama: Tambahkan commons-fileupload-1.2.1.jar dan commons-io-1.3.2.jar di bawah WEB-INF/lib. Kedua file dapat diunduh dari http://commons.apache.org/.
Langkah 2: Atur enctype tabel formulir ke: "multipart/form-data", sebagai berikut:
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" nama="uploadImages">
<input type="file" nama="uploadImages">
</bentuk>
Langkah 3: Tambahkan atribut berikut di kelas Action. Bagian merah dari atribut sesuai dengan nama field file di formulir:
kelas publik HelloWorldAction{
File pribadi[] uploadImages;//Dapatkan file yang diunggah
private String[] uploadImagesContentType;//Dapatkan jenis file
private String[] uploadImagesFileName;//Dapatkan nama file
//Metode pengambil/penyetel properti dihilangkan di sini.
unggahan String publik() memunculkan Pengecualian{
String realpath = ServletActionContext.getServletContext().getRealPath("/gambar");
File file = File baru (realpath);
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ File uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, File baru(file, uploadImagesFileName[i]));
}
kembalikan "sukses";
}}
5. Pencegat khusus
Untuk menyesuaikan interseptor, Anda perlu mengimplementasikan antarmuka com.opensymphony.xwork2.interceptor.Interceptor:
PermissionInterceptor kelas publik mengimplementasikan Interceptor {
serialVersionUID panjang akhir statis pribadi = -5178310397732210602L;
kehancuran publik void() {
}
kekosongan publik init() {
}
intersepsi String publik (doa ActionInvocation) melempar Pengecualian {
System.out.println("Masukkan interseptor");
if(pengguna ada di sesi){
Hasil string = doa.invoke();
}kalau tidak{
kembalikan "masuk";
}
//System.out.println("Nilai kembalian:"+ hasil);
//mengembalikan hasil;
}
}
<nama paket="csdn" namespace="/test" extends="struts-default">
<pencegat>
<nama pencegat="izin" />
<nama tumpukan pencegat = "permissionStack">
<interceptor-ref nama = "defaultStack" />
<nama pencegat-ref = "izin" />
</interceptor-stack>
</pencegat>
<nama tindakan="helloworld_*" metode="{1}">
<nama hasil="sukses">/WEB-INF/page/hello.jsp</result>
<interceptor-ref nama="permissionStack"/>
</aksi>
</paket>
Karena fungsi di struts2 seperti pengunggahan file, verifikasi data, dan enkapsulasi parameter permintaan menjadi tindakan semuanya diimplementasikan oleh interseptor di defaultStack default sistem, interseptor yang kami definisikan perlu mereferensikan defaultStack default sistem sehingga aplikasi dapat menggunakan struts2 Banyak fitur yang disediakan oleh kerangka kerja.
Jika Anda ingin semua tindakan dalam paket menggunakan interseptor khusus, Anda dapat mendefinisikan interseptor sebagai interseptor default melalui <default-interceptor-ref name="permissionStack"/>. Catatan: Hanya satu pencegat default yang dapat ditentukan per paket. Selain itu, setelah kami secara eksplisit menentukan pencegat untuk suatu tindakan dalam paket, pencegat default tidak akan berfungsi.
6. Verifikasi masukan
Di struts2, kita dapat memverifikasi semua metode tindakan atau memverifikasi metode tindakan tertentu.
Struts2 menyediakan dua metode implementasi untuk verifikasi input:
1. Diimplementasikan dengan menulis kode secara manual.
2. Diimplementasikan berdasarkan konfigurasi XML.
7. Tulis kode secara manual untuk memverifikasi masukan semua metode dalam tindakan
Dengan mengganti metode validasi(), metode validasi() akan memverifikasi semua metode dalam tindakan yang memiliki tanda tangan yang sama dengan metode eksekusi. Ketika verifikasi data tertentu gagal, kita harus memanggil metode addFieldError() untuk menambahkan informasi kegagalan verifikasi ke fieldErrors sistem (untuk menggunakan metode addFieldError(), tindakan dapat mewarisi ActionSupport). struts2 akan Permintaan diteruskan ke hasil bernama input. Informasi kegagalan dapat ditampilkan melalui <s:fielderror/> pada tampilan input.
validasi() contoh penggunaan:
validasi kekosongan publik() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "Nomor ponsel tidak boleh kosong");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("ponsel", "Format nomor ponsel salah" }
}
}
Setelah verifikasi gagal, permintaan diteruskan ke tampilan input:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Gunakan <s:fielderror/> di halaman addUser.jsp untuk menampilkan informasi kegagalan.
Diimplementasikan melalui metode validasixxx(), validasixxx() hanya akan memverifikasi metode bernama xxx dalam tindakan. Huruf pertama *** harus menggunakan huruf kapital. Ketika verifikasi data tertentu gagal, kita harus memanggil metode addFieldError() untuk menambahkan informasi kegagalan verifikasi ke fieldErrors sistem (untuk menggunakan metode addFieldError(), tindakan dapat mewarisi ActionSupport). struts2 akan Permintaan diteruskan ke hasil bernama input. Informasi kegagalan dapat ditampilkan melalui <s:fielderror/> pada tampilan input.
Contoh penggunaan metode validasixxx():
public String add() melempar Pengecualian{ return "success";}
public void validasiTambahkan(){
if(username==null && "".equals(username.trim())) this.addFieldError("username", "Username tidak boleh kosong");
}
Setelah verifikasi gagal, permintaan diteruskan ke tampilan input:
<result name="input">/WEB-INF/page/addUser.jsp</result>
Gunakan <s:fielderror/> di halaman addUser.jsp untuk menampilkan informasi kegagalan.
8. Proses verifikasi masukan
1. Pengonversi tipe melakukan konversi tipe pada parameter permintaan dan menetapkan nilai yang dikonversi ke atribut dalam tindakan.
2. Jika pengecualian terjadi selama konversi tipe, sistem akan menyimpan informasi pengecualian ke ActionContext, dan interseptor ConversionError akan menambahkan informasi pengecualian ke fieldErrors. Terlepas dari apakah pengecualian terjadi selama konversi tipe, langkah 3 akan dimasukkan.
3. Sistem terlebih dahulu memanggil metode validasixxx() dalam tindakan melalui teknologi refleksi, dimana xxx adalah nama metodenya.
4. Kemudian panggil metode validasi() dalam tindakan.
5. Setelah 4 langkah di atas, jika ada informasi kesalahan di bidangKesalahan dalam sistem (yaitu, ukuran kumpulan yang menyimpan informasi kesalahan lebih besar dari 0), sistem akan secara otomatis meneruskan permintaan ke tampilan bernama masukan. Jika tidak ada informasi kesalahan di bidang Kesalahan dalam sistem, sistem akan menjalankan metode pemrosesan dalam tindakan.
9. Menerapkan verifikasi masukan untuk semua metode tindakan berdasarkan metode konfigurasi XML
Saat menggunakan metode konfigurasi berbasis XML untuk mengimplementasikan verifikasi input, Action juga perlu mewarisi ActionSupport dan menyediakan file verifikasi. File verifikasi dan kelas tindakan ditempatkan dalam paket yang sama. Format penamaan file adalah: ActionClassName-validation. xml, di mana ActionClassName adalah nama kelas tindakan yang sederhana, dan -validation adalah metode penulisan tetap. Jika kelas Action adalah cn.csdn.UserAction, maka nama filenya harus: UserAction-validation.xml. Berikut ini adalah template file verifikasi:
<?xml versi="1.0" pengkodean="UTF-8"?>
<!Validator DOCTYPE PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<validator>
<nama kolom="nama pengguna">
<field-validator type="requiredstring">
<param name="trim">benar</param>
<message>Nama pengguna tidak boleh kosong!</message>
</validator-bidang>
</bidang>
</validator>
<field> menentukan atribut yang akan diverifikasi dalam tindakan, dan <field-validator> menentukan validator.String validator yang ditentukan di atas disediakan oleh sistem. Sistem menyediakan validator yang dapat memenuhi sebagian besar persyaratan verifikasi validator dapat ditemukan di default.xml di bawah com.opensymphony.xwork2.validator.validators di xwork-2.x.jar.
<message> adalah pesan cepat setelah verifikasi gagal. Jika internasionalisasi diperlukan, Anda dapat menentukan atribut key untuk pesan tersebut, dan nilai key adalah kunci dalam file sumber daya.
Dalam file verifikasi ini, atribut nama pengguna dari jenis string dalam tindakan diverifikasi. Pertama-tama, metode trim() harus dipanggil untuk menghilangkan spasi, lalu menentukan apakah nama pengguna tersebut kosong.
Saat menulis file verifikasi, pesan bantuan tidak dapat muncul. Saat menulis file verifikasi ActionClassName-validation.xml, jika pesan bantuan tidak muncul, Anda dapat mengatasi masalahnya sebagai berikut:
windowwos->preferensi->myeclipse->file dan editor->xml->xmlkatalog
Klik "tambah", pilih "Sistem file" di lokasi di jendela yang muncul, lalu pilih xwork-validator-1.0.3.dtd di direktori src/java dari direktori dekompresi xwork-2.1.2, dan kembali ke pengaturan jendela Jangan terburu-buru menutup jendela, sebaiknya ubah Key Type di jendela menjadi URI. Kunci diubah menjadi http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd