Struts 2 - Panduan Cepat
Model View Controller atau MVCseperti yang biasa disebut, adalah pola desain perangkat lunak untuk mengembangkan aplikasi web. Pola Model View Controller terdiri dari tiga bagian berikut -
Model - Level terendah dari pola yang bertanggung jawab untuk memelihara data.
View - Ini bertanggung jawab untuk menampilkan semua atau sebagian data kepada pengguna.
Controller - Kode Perangkat Lunak yang mengontrol interaksi antara Model dan Tampilan.
MVC populer karena mengisolasi logika aplikasi dari lapisan antarmuka pengguna dan mendukung pemisahan masalah. Di sini Pengontrol menerima semua permintaan untuk aplikasi dan kemudian bekerja dengan Model untuk menyiapkan data apa pun yang dibutuhkan oleh Tampilan. Tampilan kemudian menggunakan data yang disiapkan oleh Pengontrol untuk menghasilkan respons akhir yang dapat disajikan. Abstraksi MVC dapat direpresentasikan secara grafis sebagai berikut.
Model
Model bertanggung jawab untuk mengelola data aplikasi. Ini menanggapi permintaan dari tampilan dan juga menanggapi instruksi dari pengontrol untuk memperbarui dirinya sendiri.
Pandangan
Artinya penyajian data dalam format tertentu, yang dipicu oleh keputusan pengontrol untuk menyajikan data. Mereka adalah sistem template berbasis skrip seperti JSP, ASP, PHP dan sangat mudah diintegrasikan dengan teknologi AJAX.
Pengendali
Pengontrol bertanggung jawab untuk menanggapi masukan pengguna dan melakukan interaksi pada objek model data. Pengontrol menerima input, itu memvalidasi input dan kemudian melakukan operasi bisnis yang mengubah keadaan model data.
Struts2adalah kerangka kerja berbasis MVC. Dalam bab-bab selanjutnya, mari kita lihat bagaimana kita dapat menggunakan metodologi MVC dalam Struts2.
Struts2adalah kerangka aplikasi web yang populer dan matang berdasarkan pola desain MVC. Struts2 bukan hanya versi baru dari Struts 1, tetapi merupakan penulisan ulang lengkap dari arsitektur Struts.
Kerangka kerja Web awalnya dimulai dengan kerangka kerja Struts sebagai dasar dan tujuannya adalah untuk menawarkan kerangka kerja yang ditingkatkan dan ditingkatkan yang dibangun di atas Struts untuk membuat pengembangan web lebih mudah bagi para pengembang.
Setelah beberapa saat, kerangka kerja Webwork dan komunitas Struts bergandengan tangan untuk membuat kerangka kerja Struts2 yang terkenal.
Fitur Kerangka Struts 2
Berikut adalah beberapa fitur hebat yang mungkin memaksa Anda untuk mempertimbangkan Struts2 -
POJO Forms and POJO Actions- Struts2 telah menyingkirkan Formulir Tindakan yang merupakan bagian integral dari kerangka Struts. Dengan Struts2, Anda dapat menggunakan POJO apa pun untuk menerima input formulir. Demikian pula, Anda sekarang dapat melihat POJO sebagai kelas Tindakan.
Tag Support - Struts2 telah meningkatkan tag formulir dan tag baru yang memungkinkan pengembang untuk menulis lebih sedikit kode.
AJAX Support - Struts2 telah mengakui pengambilalihan oleh teknologi Web2.0, dan telah mengintegrasikan dukungan AJAX ke dalam produk dengan membuat tag AJAX, fungsi ini sangat mirip dengan tag Struts2 standar.
Easy Integration - Integrasi dengan kerangka kerja lain seperti Spring, Tiles, dan SiteMesh kini lebih mudah dengan berbagai integrasi yang tersedia dengan Struts2.
Template Support - Dukungan untuk menghasilkan tampilan menggunakan templat.
Plugin Support- Perilaku inti Struts2 dapat ditingkatkan dan ditambah dengan penggunaan plugin. Sejumlah plugin tersedia untuk Struts2.
Profiling- Struts2 menawarkan profil terintegrasi untuk men-debug dan membuat profil aplikasi. Selain itu, Struts juga menawarkan debugging terintegrasi dengan bantuan alat debugging bawaan.
Easy to Modify Tags- Markup tag di Struts2 dapat diubah menggunakan template Freemarker. Ini tidak membutuhkan pengetahuan JSP atau java. Pengetahuan dasar HTML, XML dan CSS sudah cukup untuk mengubah tag.
Promote Less configuration- Struts2 mempromosikan lebih sedikit konfigurasi dengan bantuan menggunakan nilai default untuk berbagai pengaturan. Anda tidak perlu mengkonfigurasi sesuatu kecuali itu menyimpang dari pengaturan default yang ditetapkan oleh Struts2.
View Technologies - Struts2 memiliki dukungan yang bagus untuk beberapa opsi tampilan (JSP, Freemarker, Velocity dan XSLT)
Di atas adalah 10 fitur teratas dari Struts 2 yang menjadikannya sebagai kerangka kerja yang siap untuk Perusahaan.
Kekurangan Struts 2
Meskipun Struts 2 hadir dengan daftar fitur-fitur hebat, ada beberapa batasan dari versi saat ini - Struts 2 yang memerlukan peningkatan lebih lanjut. Tercantum adalah beberapa poin utama -
Bigger Learning Curve - Untuk menggunakan MVC dengan Struts, Anda harus terbiasa dengan JSP standar, API Servlet, dan kerangka kerja yang besar & rumit.
Poor Documentation - Dibandingkan dengan servlet standar dan JSP API, Struts memiliki lebih sedikit sumber daya online, dan banyak pengguna pertama kali menganggap dokumentasi Apache online membingungkan dan tidak terorganisir dengan baik.
Less Transparent - Dengan aplikasi Struts, ada lebih banyak hal yang terjadi di balik layar dibandingkan dengan aplikasi Web berbasis Java biasa yang membuatnya sulit untuk memahami kerangka kerjanya.
Catatan terakhir, kerangka kerja yang baik harus menyediakan perilaku umum yang dapat digunakan oleh berbagai jenis aplikasi.
Struts 2 adalah salah satu kerangka kerja web terbaik dan sangat digunakan untuk pengembangan Rich Internet Applications (RIA).
Tugas pertama kita adalah menjalankan aplikasi Struts 2 minimal. Bab ini akan memandu Anda tentang cara mempersiapkan lingkungan pengembangan untuk memulai pekerjaan Anda dengan Struts 2.
Saya berasumsi bahwa Anda sudah menginstal JDK (5+), Tomcat dan Eclipse di komputer Anda. Jika Anda belum menginstal komponen ini, ikuti langkah-langkah yang diberikan di jalur cepat -
Langkah 1 - Siapkan Java Development Kit (JDK)
Anda dapat mengunduh versi terbaru SDK dari situs Java Oracle - Unduhan Java SE . Anda akan menemukan instruksi untuk menginstal JDK dalam file yang diunduh, ikuti instruksi yang diberikan untuk menginstal dan mengkonfigurasi pengaturan. Terakhir, setel variabel lingkungan PATH dan JAVA_HOME untuk merujuk ke direktori yang berisi java dan javac, biasanya masing-masing java_install_dir / bin dan java_install_dir.
Jika Anda menjalankan Windows dan menginstal SDK di C: \ jdk1.5.0_20, Anda harus memasukkan baris berikut di file C: \ autoexec.bat Anda.
set PATH = C:\jdk1.5.0_20\bin;%PATH%
set JAVA_HOME = C:\jdk1.5.0_20
Atau, di Windows NT / 2000 / XP -
Anda dapat mengklik kanan My Computer, Select Properties, lalu Advanced, lalu Environment Variables. Kemudian, Anda akan memperbarui nilai PATH dan menekan tombol OK.
Di Unix (Solaris, Linux, dll.), Jika SDK diinstal di /usr/local/jdk1.5.0_20 dan Anda menggunakan shell C, Anda akan memasukkan yang berikut ini ke dalam file .cshrc Anda.
Di Unix (Solaris, Linux, dll.), Jika SDK diinstal di /usr/local/jdk1.5.0_20 dan Anda menggunakan shell C, Anda akan memasukkan yang berikut ini ke dalam file .cshrc Anda.
setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.5.0_20
Atau, jika Anda menggunakan Integrated Development Environment (IDE) seperti Borland JBuilder, Eclipse, IntelliJ IDEA, atau Sun ONE Studio, kompilasi dan jalankan program sederhana untuk mengonfirmasi bahwa IDE mengetahui di mana Anda menginstal Java, jika tidak lakukan pengaturan yang tepat sesuai diberikan dokumen IDE.
Langkah 2 - Siapkan Apache Tomcat
Anda dapat mengunduh Tomcat versi terbaru dari https://tomcat.apache.org/. Setelah Anda mengunduh instalasi, keluarkan distribusi biner ke lokasi yang nyaman.
Misalnya di C: \ apache-tomcat-6.0.33 di windows, atau /usr/local/apachetomcat-6.0.33 di Linux / Unix dan buat variabel lingkungan CATALINA_HOME yang menunjuk ke lokasi ini.
Anda dapat menjalankan Tomcat dengan menjalankan perintah berikut di mesin windows, atau Anda cukup mengklik dua kali pada startup.bat
%CATALINA_HOME%\bin\startup.bat
or
C:\apache-tomcat-6.0.33\bin\startup.bat
Tomcat dapat dimulai dengan menjalankan perintah berikut di mesin Unix (Solaris, Linux, dll.) -
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-6.0.33/bin/startup.sh
Setelah pengaktifan berhasil, aplikasi web default yang disertakan dengan Tomcat akan tersedia dengan mengunjungi http://localhost:8080/. Jika semuanya baik-baik saja, maka itu akan menampilkan hasil berikut -
Informasi lebih lanjut tentang mengonfigurasi dan menjalankan Tomcat dapat ditemukan di dokumentasi yang disertakan di sini, serta di situs web Tomcat: https://tomcat.apache.org/
Tomcat dapat dihentikan dengan menjalankan perintah berikut di mesin windows -
%CATALINA_HOME%\bin\shutdown
or
C:\apache-tomcat-5.5.29\bin\shutdown
Tomcat dapat dihentikan dengan menjalankan perintah berikut di mesin Unix (Solaris, Linux, dll.) -
$CATALINA_HOME/bin/shutdown.sh
or
/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh
Langkah 3 - Siapkan Eclipse (IDE)
Semua contoh dalam tutorial ini ditulis menggunakan Eclipse IDE. Saya menyarankan, Anda menginstal Eclipse versi terbaru di komputer Anda.
Untuk menginstal Eclipse Unduh binari Eclipse terbaru dari https://www.eclipse.org/downloads/. Setelah Anda mengunduh instalasi, buka paket distribusi biner ke lokasi yang nyaman.
Misalnya di C: \ eclipse di windows, atau / usr / local / eclipse di Linux / Unix dan terakhir atur variabel PATH dengan tepat. Eclipse dapat dimulai dengan menjalankan perintah berikut di mesin windows, atau Anda cukup mengklik dua kali pada eclipse.exe
%C:\eclipse\eclipse.exe
Eclipse dapat dimulai dengan menjalankan perintah berikut di mesin Unix (Solaris, Linux, dll.) -
$/usr/local/eclipse/eclipse
Setelah startup berhasil, jika semuanya baik-baik saja, itu akan menampilkan hasil berikut -
Langkah 4 - Siapkan Perpustakaan Struts2
Sekarang jika semuanya baik-baik saja, maka Anda dapat melanjutkan untuk menyiapkan kerangka kerja Struts2 Anda. Berikut adalah langkah-langkah sederhana untuk mengunduh dan menginstal Struts2 di komputer Anda.
Tentukan pilihan apakah Anda ingin menginstal Struts2 di Windows, atau Unix, lalu lanjutkan ke langkah berikutnya untuk mengunduh file .zip untuk windows dan file .tz untuk Unix.
Unduh versi terbaru binari Struts2 dari https://struts.apache.org/download.cgi.
Pada saat menulis tutorial ini, saya mengunduh struts-2.0.14-all.zip dan ketika Anda mengekstrak file yang diunduh itu akan memberi Anda struktur direktori di dalam C: \ struts-2.2.3 sebagai berikut.
Langkah kedua adalah mengekstrak file zip di lokasi mana pun, saya unduh & ekstrak struts-2.2.3-all.zip di c:\ folder di mesin Windows 7 saya sehingga saya memiliki semua file jar C:\struts-2.2.3\lib. Pastikan Anda mengatur variabel CLASSPATH Anda dengan benar jika tidak Anda akan menghadapi masalah saat menjalankan aplikasi Anda.
Dari level tinggi, Struts2 adalah kerangka MVC tarik (atau MVC2). Pola Model-ViewController di Struts2 diimplementasikan dengan lima komponen inti berikut -
- Actions
- Interceptors
- Tumpukan Nilai / OGNL
- Jenis Hasil / Hasil
- Lihat teknologi
Struts 2 sedikit berbeda dari kerangka kerja MVC tradisional, di mana tindakan mengambil peran sebagai model daripada pengontrol, meskipun ada beberapa tumpang tindih.
Diagram di atas menggambarkan Model, View dan Controller ke arsitektur tingkat tinggi Struts2. Kontroler diimplementasikan dengan aStruts2dispatch servlet filter serta interseptor, model ini diimplementasikan dengan tindakan, dan tampilan adalah kombinasi dari jenis hasil dan hasil. Tumpukan nilai dan OGNL menyediakan benang merah, menghubungkan dan memungkinkan integrasi antara komponen lainnya.
Selain komponen-komponen di atas, akan banyak informasi yang berkaitan dengan konfigurasi. Konfigurasi untuk aplikasi web, serta konfigurasi untuk tindakan, interseptor, hasil, dll.
Ini adalah gambaran arsitektur dari pola MVC Struts 2. Kami akan membahas setiap komponen secara lebih rinci di bab-bab selanjutnya.
Minta Siklus Hidup
Berdasarkan diagram di atas, Anda dapat memahami alur kerja melalui siklus hidup permintaan pengguna di Struts 2 sebagai berikut -
Pengguna mengirimkan permintaan ke server untuk meminta beberapa sumber daya (yaitu halaman).
Dispatcher Filter melihat permintaan tersebut dan kemudian menentukan Tindakan yang sesuai.
Fungsi interseptor yang dikonfigurasi berlaku seperti validasi, unggah file, dll.
Tindakan yang dipilih dilakukan berdasarkan operasi yang diminta.
Sekali lagi, interseptor yang dikonfigurasi diterapkan untuk melakukan pasca-pemrosesan jika diperlukan.
Akhirnya, hasil disiapkan oleh tampilan dan mengembalikan hasilnya kepada pengguna.
Seperti yang telah Anda pelajari dari arsitektur Struts 2, saat Anda mengklik hyperlink atau mengirimkan formulir HTML dalam aplikasi web Struts 2, input dikumpulkan oleh Controller yang dikirim ke kelas Java yang disebut Actions. Setelah Tindakan dijalankan, hasil memilih sumber daya untuk memberikan respons. Sumber daya umumnya JSP, tetapi juga bisa berupa file PDF, spreadsheet Excel, atau jendela applet Java.
Dengan asumsi bahwa Anda sudah membangun lingkungan pengembangan Anda. Sekarang, mari kita lanjutkan untuk membangun yang pertamaHello World Struts2proyek. Tujuan dari proyek ini adalah untuk membangun aplikasi web yang mengumpulkan nama pengguna dan menampilkan "Hello World" diikuti dengan nama pengguna.
Kami harus membuat empat komponen berikut untuk setiap proyek Struts 2 -
Sr Tidak | Komponen & Deskripsi |
---|---|
1 | Action Buat kelas tindakan yang akan berisi logika bisnis lengkap dan kontrol interaksi antara pengguna, model, dan tampilan. |
2 | Interceptors Buat pencegat jika diperlukan, atau gunakan pencegat yang sudah ada. Ini adalah bagian dari Controller. |
3 | View Buat JSP untuk berinteraksi dengan pengguna untuk menerima masukan dan menyajikan pesan akhir. |
4 | Configuration Files Buat file konfigurasi untuk memasangkan Action, View dan Controllers. File-file ini adalah struts.xml, web.xml, struts.properties. |
Saya akan menggunakan Eclipse IDE, sehingga semua komponen yang diperlukan akan dibuat di bawah Dynamic Web Project. Mari kita mulai dengan membuat Proyek Web Dinamis.
Buat Proyek Web Dinamis
Mulai Eclipse Anda dan lanjutkan dengan File > New > Dynamic Web Project dan masukkan nama proyek sebagai HelloWorldStruts2 dan setel sisa opsi seperti yang diberikan di layar berikut -
Pilih semua opsi default di layar berikutnya dan terakhir periksa Generate Web.xml deployment descriptorpilihan. Ini akan membuat proyek web dinamis untuk Anda di Eclipse. Sekarang pergilahWindows > Show View > Project Explorer, dan Anda akan melihat jendela proyek Anda seperti di bawah ini -
Sekarang salin file berikut dari folder lib struts 2 C:\struts-2.2.3\lib untuk proyek kami WEB-INF\libmap. Untuk melakukan ini, Anda cukup drag dan drop semua file berikut ke folder WEB-INF \ lib.
- commons-fileupload-x.y.z.jar
- commons-io-x.y.z.jar
- commons-lang-x.y.jar
- commons-logging-x.y.z.jar
- commons-logging-api-x.y.jar
- freemarker-x.y.z.jar
- javassist-.xy.z.GA
- ognl-x.y.z.jar
- struts2-core-x.y.z.jar
- xwork-core.x.y.z.jar
Buat Kelas Aksi
Kelas tindakan adalah kunci untuk aplikasi Struts 2 dan kami menerapkan sebagian besar logika bisnis di kelas tindakan. Jadi mari kita buat file java HelloWorldAction.java di bawahJava Resources > src dengan nama paket com.tutorialspoint.struts2 dengan konten yang diberikan di bawah ini.
Kelas Tindakan menanggapi tindakan pengguna saat pengguna mengklik URL. Satu atau lebih metode kelas Action dijalankan dan hasil String dikembalikan. Berdasarkan nilai hasil, halaman JSP tertentu dirender.
package com.tutorialspoint.struts2;
public class HelloWorldAction {
private String name;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ini adalah kelas yang sangat sederhana dengan satu properti yang disebut "nama". Kami memiliki metode pengambil dan penyetel standar untuk properti "nama" dan metode eksekusi yang mengembalikan string "berhasil".
Kerangka Struts 2 akan membuat objek dari HelloWorldActionkelas dan memanggil metode yang dieksekusi sebagai tanggapan atas tindakan pengguna. Anda memasukkan logika bisnis Anda ke dalam metode ini yang akhirnya mengembalikan konstanta String. Dengan kata lain, untuk setiap URL, Anda harus menerapkan satu kelas tindakan dan Anda dapat menggunakan nama kelas itu secara langsung sebagai nama tindakan Anda atau Anda dapat memetakan ke beberapa nama lain menggunakan file struts.xml seperti yang ditunjukkan di bawah ini.
Buat Tampilan
Kami membutuhkan JSP untuk menyajikan pesan terakhir, halaman ini akan dipanggil oleh kerangka kerja Struts 2 ketika tindakan yang telah ditentukan akan terjadi dan pemetaan ini akan ditentukan dalam file struts.xml. Jadi mari kita buat file jsp di bawah iniHelloWorld.jspdi folder WebContent di proyek eclipse Anda. Untuk melakukan ini, klik kanan pada folder WebContent di penjelajah proyek dan pilihNew >JSP File.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Direktif taglib memberi tahu penampung Servlet bahwa halaman ini akan menggunakan Struts 2 tag dan tag tersebut akan diawali dengan s.
Tag s: property menampilkan nilai dari action class property "name> yang dikembalikan oleh metode getName() dari kelas HelloWorldAction.
Buat Halaman Utama
Kami juga perlu menciptakan index.jspdi folder WebContent. File ini akan berfungsi sebagai URL tindakan awal di mana pengguna dapat mengklik untuk memberi tahu kerangka kerja Struts 2 untuk memanggil metode yang ditentukan dari kelas HelloWorldAction dan membuat tampilan HelloWorld.jsp.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Itu hellotindakan yang ditentukan dalam file tampilan di atas akan dipetakan ke kelas HelloWorldAction dan metode eksekusi menggunakan file struts.xml. Ketika pengguna mengklik tombol Kirim, itu akan menyebabkan kerangka Struts 2 menjalankan metode eksekusi yang ditentukan di kelas HelloWorldAction dan berdasarkan nilai yang dikembalikan dari metode tersebut, tampilan yang sesuai akan dipilih dan ditampilkan sebagai respons.
File Konfigurasi
Kita membutuhkan pemetaan untuk mengikat URL, kelas HelloWorldAction (Model), dan HelloWorld.jsp (tampilan) bersama-sama. Pemetaan memberi tahu framework Struts 2 kelas mana yang akan merespons tindakan pengguna (URL), metode kelas mana yang akan dijalankan, dan tampilan apa yang akan dirender berdasarkan hasil String yang dikembalikan metode tersebut.
Jadi mari kita buat file bernama struts.xml. Karena Struts 2 membutuhkan struts.xml untuk ada di folder kelas. Karenanya, buat file struts.xml di bawah folder WebContent / WEB-INF / class. Eclipse tidak membuat folder "kelas" secara default, jadi Anda harus melakukannya sendiri. Untuk melakukan ini, klik kanan pada folder WEB-INF di penjelajah proyek dan pilihNew > Folder. Struts.xml Anda akan terlihat seperti -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Beberapa kata yang perlu dipahami tentang file konfigurasi di atas. Di sini, kami menetapkan konstantastruts.devMode untuk true, karena kami bekerja di lingkungan pengembangan dan kami perlu melihat beberapa pesan log yang berguna. Kemudian, kami mendefinisikan paket yang disebuthelloworld.
Membuat paket berguna saat Anda ingin mengelompokkan tindakan Anda. Dalam contoh kami, kami menamai tindakan kami sebagai "halo" yang sesuai dengan URL/hello.action dan didukung olehHelloWorldAction.class. Ituexecute metode dari HelloWorldAction.class adalah metode yang dijalankan saat URL /hello.actiondipanggil. Jika hasil dari metode eksekusi mengembalikan "sukses", maka pengguna akan dibawa keHelloWorld.jsp.
Langkah selanjutnya adalah membuat file web.xmlfile yang merupakan titik masuk untuk setiap permintaan ke Struts 2. Titik masuk aplikasi Struts2 akan menjadi filter yang ditentukan dalam deskriptor penerapan (web.xml). Oleh karena itu, kita akan mendefinisikan entri kelas org.apache.struts2.dispatcher.FilterDispatcher di web.xml. File web.xml perlu dibuat di bawah folder WEB-INF di bawah Konten Web. Eclipse telah membuat file kerangka web.xml untuk Anda saat Anda membuat proyek. Jadi, mari kita memodifikasinya 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/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Kami telah menetapkan index.jsp sebagai file selamat datang kami. Kemudian kami telah mengonfigurasi filter Struts2 untuk dijalankan di semua url (yaitu, url apa pun yang cocok dengan pola / *)
Untuk Mengaktifkan Log Rinci
Anda dapat mengaktifkan fungsionalitas logging lengkap saat bekerja dengan Struts 2 dengan membuat logging.properties file di bawah WEB-INF/classesmap. Pertahankan dua baris berikut di file properti Anda -
org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = \
java.util.logging.ConsoleHandler
Default logging.properties menentukan ConsoleHandler untuk merutekan logging ke stdout dan juga FileHandler. Ambang level log penangan dapat diatur menggunakan SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST atau ALL.
Itu dia. Kami siap menjalankan aplikasi Hello World menggunakan framework Struts 2.
Prosedur untuk Menjalankan Aplikasi
Klik kanan pada nama proyek dan klik Export > WAR File untuk membuat file Perang.
Kemudian terapkan WAR ini di direktori webapps Tomcat.
Terakhir, jalankan server Tomcat dan coba akses URL http://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan memberi Anda layar berikut -
Masukkan nilai "Struts2" dan kirimkan halaman tersebut. Anda akan melihat halaman berikutnya
Perhatikan bahwa Anda dapat menentukan index sebagai tindakan dalam file struts.xml dan dalam hal ini Anda dapat memanggil halaman indeks sebagai http://localhost:8080/HelloWorldStruts2/index.action. Lihat di bawah ini bagaimana Anda dapat mendefinisikan indeks sebagai tindakan -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "index">
<result >/index.jsp</result>
</action>
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Bab ini akan memandu Anda melalui konfigurasi dasar yang diperlukan untuk a Struts 2aplikasi. Di sini kita akan melihat apa yang dapat dikonfigurasi dengan bantuan beberapa file konfigurasi penting sepertiweb.xml, struts.xml, strutsconfig.xml dan struts.properties
Sejujurnya, Anda bisa mulai bekerja hanya dengan menggunakan web.xml dan struts.xmlfile konfigurasi (seperti yang telah Anda saksikan di bab sebelumnya di mana contoh kami bekerja menggunakan dua file ini). Namun, untuk pengetahuan Anda, kami akan menjelaskan tentang file lain juga.
File web.xml
File konfigurasi web.xml adalah file konfigurasi J2EE yang menentukan bagaimana elemen permintaan HTTP diproses oleh wadah servlet. Ini bukan hanya file konfigurasi Struts2, tetapi ini adalah file yang perlu dikonfigurasi agar Struts2 berfungsi.
Seperti yang telah dibahas sebelumnya, file ini menyediakan titik masuk untuk aplikasi web apa pun. Titik masuk aplikasi Struts2 akan menjadi filter yang ditentukan dalam deskriptor penerapan (web.xml). Oleh karena itu kami akan mendefinisikan entri kelas FilterDispatcher di web.xml. File web.xml perlu dibuat di bawah folderWebContent/WEB-INF.
Ini adalah file konfigurasi pertama yang perlu Anda konfigurasikan jika Anda memulai tanpa bantuan template atau alat yang menghasilkannya (seperti Eclipse atau Maven2).
Berikut ini adalah konten file web.xml yang kami gunakan dalam contoh terakhir kami.
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Perhatikan bahwa kami memetakan filter Struts 2 ke /*, dan tidak /*.actionyang berarti bahwa semua url akan diurai oleh filter struts. Kami akan membahas ini ketika kami akan melalui bab Anotasi.
File Struts.xml
Itu struts.xmlfile berisi informasi konfigurasi yang akan Anda modifikasi saat tindakan dikembangkan. File ini dapat digunakan untuk mengganti pengaturan default untuk aplikasi, misalnya struts.devMode = false dan pengaturan lain yang ditentukan dalam file properti. File ini dapat dibuat di bawah folderWEB-INF/classes.
Mari kita lihat file struts.xml yang kita buat pada contoh Hello World yang dijelaskan di bab sebelumnya.
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
<-- more actions can be listed here -->
</package>
<-- more packages can be listed here -->
</struts>
Hal pertama yang perlu diperhatikan adalah DOCTYPE. Semua file konfigurasi struts harus memiliki doctype yang benar seperti yang ditunjukkan pada contoh kecil kami. <struts> adalah elemen tag root, di mana kami mendeklarasikan paket yang berbeda menggunakan tag <package>. Di sini <package> memungkinkan pemisahan dan modularisasi konfigurasi. Ini sangat berguna ketika Anda memiliki proyek besar dan proyek dibagi menjadi beberapa modul.
Misalnya, jika project Anda memiliki tiga domain - business_application, customer_application dan staff_application, Anda dapat membuat tiga paket dan menyimpan tindakan terkait dalam paket yang sesuai.
Tag paket memiliki atribut berikut -
Sr Tidak | Atribut & Deskripsi |
---|---|
1 | name (required) Pengenal unik untuk paket tersebut |
2 | extends Paket mana yang diperpanjang dari paket ini? Secara default, kami menggunakan struts-default sebagai paket dasar. |
3 | abstract Jika ditandai benar, paket tersebut tidak tersedia untuk konsumsi pengguna akhir. |
4 | namespace Namespace unik untuk tindakan |
Itu constant tag bersama dengan nama dan atribut nilai harus digunakan untuk menimpa salah satu properti berikut yang ditentukan di default.properties, seperti yang baru saja kita atur struts.devModeProperti. Pengaturanstruts.devMode properti memungkinkan kita untuk melihat lebih banyak pesan debug di file log.
Kami mendefinisikan action tag sesuai dengan setiap URL yang ingin kita akses dan kita mendefinisikan kelas dengan metode execute () yang akan diakses setiap kali kita mengakses URL terkait.
Hasil menentukan apa yang dikembalikan ke browser setelah tindakan dijalankan. String yang dikembalikan dari tindakan harus menjadi nama hasil. Hasil dikonfigurasi per tindakan seperti di atas, atau sebagai hasil "global", tersedia untuk setiap tindakan dalam sebuah paket. Hasil memiliki opsionalname dan typeatribut. Nilai nama defaultnya adalah "sukses".
File Struts.xml dapat tumbuh besar dari waktu ke waktu sehingga memecahnya dengan paket adalah salah satu cara untuk memodularkannya, tetapi Strutsmenawarkan cara lain untuk memodularisasi file struts.xml. Anda dapat membagi file menjadi beberapa file xml dan mengimpornya dengan cara berikut.
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="my-struts1.xml"/>
<include file="my-struts2.xml"/>
</struts>
File konfigurasi lain yang belum kami bahas adalah struts-default.xml. File ini berisi pengaturan konfigurasi standar untuk Struts dan Anda tidak perlu menyentuh pengaturan ini untuk 99,99% proyek Anda. Untuk alasan ini, kami tidak akan membahas terlalu banyak detail tentang file ini. Jika Anda tertarik, lihat didefault.properties file tersedia dalam file struts2-core-2.2.3.jar.
File Struts-config.xml
File konfigurasi struts-config.xml adalah tautan antara komponen Tampilan dan Model di Klien Web, tetapi Anda tidak perlu menyentuh pengaturan ini untuk 99,99% proyek Anda.
File konfigurasi pada dasarnya berisi elemen utama berikut -
Sr Tidak | Interceptor & Deskripsi |
---|---|
1 | struts-config Ini adalah simpul akar dari file konfigurasi. |
2 | form-beans Di sinilah Anda memetakan subkelas ActionForm Anda ke sebuah nama. Anda menggunakan nama ini sebagai alias untuk ActionForm Anda di seluruh file strutsconfig.xml, dan bahkan pada halaman JSP Anda. |
3 | global forwards Bagian ini memetakan halaman di aplikasi web Anda ke sebuah nama. Anda dapat menggunakan nama ini untuk merujuk ke halaman yang sebenarnya. Ini untuk menghindari URL hardcode pada halaman web Anda. |
4 | action-mappings Di sinilah Anda mendeklarasikan penangan formulir dan mereka juga dikenal sebagai pemetaan tindakan. |
5 | controller Bagian ini mengkonfigurasi internal Struts dan jarang digunakan dalam situasi praktis. |
6 | plug-in Bagian ini memberi tahu Struts di mana menemukan file properti Anda, yang berisi prompt dan pesan kesalahan |
Berikut ini adalah contoh file struts-config.xml -
<?xml version = "1.0" Encoding = "ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 1.0//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<!-- ========== Form Bean Definitions ============ -->
<form-beans>
<form-bean name = "login" type = "test.struts.LoginForm" />
</form-beans>
<!-- ========== Global Forward Definitions ========= -->
<global-forwards>
</global-forwards>
<!-- ========== Action Mapping Definitions ======== -->
<action-mappings>
<action
path = "/login"
type = "test.struts.LoginAction" >
<forward name = "valid" path = "/jsp/MainMenu.jsp" />
<forward name = "invalid" path = "/jsp/LoginView.jsp" />
</action>
</action-mappings>
<!-- ========== Controller Definitions ======== -->
<controller contentType = "text/html;charset = UTF-8"
debug = "3" maxFileSize = "1.618M" locale = "true" nocache = "true"/>
</struts-config>
Untuk detail lebih lanjut tentang file struts-config.xml, silakan periksa dokumentasi struts Anda.
File Struts.properties
File konfigurasi ini menyediakan mekanisme untuk mengubah perilaku default kerangka kerja. Sebenarnya, semua properti yang terkandung di dalamstruts.properties file konfigurasi juga dapat dikonfigurasi di web.xml menggunakan init-param, serta menggunakan tag konstan di struts.xmlfile konfigurasi. Tetapi, jika Anda ingin menjaga agar semuanya tetap terpisah dan lebih spesifik, maka Anda dapat membuat file ini di bawah folderWEB-INF/classes.
Nilai yang dikonfigurasi dalam file ini akan menggantikan nilai default yang dikonfigurasi di default.propertiesyang terkandung dalam distribusi struts2-core-xyzjar. Ada beberapa properti yang mungkin Anda pertimbangkan untuk diubah menggunakanstruts.properties file -
### When set to true, Struts will act much more friendly for developers
struts.devMode = true
### Enables reloading of internationalization files
struts.i18n.reload = true
### Enables reloading of XML configuration files
struts.configuration.xml.reload = true
### Sets the port that the server is run on
struts.url.http.port = 8080
Di sini setiap baris dimulai dengan hash (#) akan dianggap sebagai komentar dan akan diabaikan oleh Struts 2.
Actionsadalah inti dari kerangka Struts2, seperti halnya kerangka kerja MVC (Model View Controller). Setiap URL dipetakan ke tindakan tertentu, yang menyediakan logika pemrosesan yang diperlukan untuk melayani permintaan dari pengguna.
Tetapi tindakan itu juga berfungsi dalam dua kapasitas penting lainnya. Pertama, tindakan memainkan peran penting dalam transfer data dari permintaan ke tampilan, apakah itu JSP atau jenis hasil lainnya. Kedua, tindakan harus membantu kerangka kerja dalam menentukan hasil mana yang harus memberikan tampilan yang akan dikembalikan dalam menanggapi permintaan tersebut.
Buat Tindakan
Satu-satunya persyaratan untuk tindakan di Struts2adalah harus ada satu metode noargument yang mengembalikan baik String atau objek Hasil dan harus berupa POJO. Jika metode tanpa argumen tidak ditentukan, perilaku defaultnya adalah menggunakan metode execute ().
Secara opsional, Anda dapat memperpanjang ActionSupport kelas yang mengimplementasikan enam antarmuka termasuk Actionantarmuka. Antarmuka Action adalah sebagai berikut -
public interface Action {
public static final String SUCCESS = "success";
public static final String NONE = "none";
public static final String ERROR = "error";
public static final String INPUT = "input";
public static final String LOGIN = "login";
public String execute() throws Exception;
}
Mari kita lihat metode tindakan dalam contoh Hello World -
package com.tutorialspoint.struts2;
public class HelloWorldAction {
private String name;
public String execute() throws Exception {
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Untuk mengilustrasikan poin bahwa metode tindakan mengontrol tampilan, mari kita lakukan perubahan berikut ke execute metode dan memperluas kelas ActionSupport sebagai berikut -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
if ("SECRET".equals(name)) {
return SUCCESS;
} else {
return ERROR;
}
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Dalam contoh ini, kami memiliki beberapa logika dalam metode eksekusi untuk melihat atribut nama. Jika atribut sama dengan string"SECRET", kami kembali SUCCESS Alhasil sebaliknya kita kembali ERRORhasilnya. Karena kami telah memperluas ActionSupport, jadi kami dapat menggunakan konstanta StringSUCCESSdan ERROR. Sekarang, mari kita ubah file struts.xml kita sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
Buat Tampilan
Mari kita buat file jsp di bawah ini HelloWorld.jspdi folder WebContent di proyek eclipse Anda. Untuk melakukan ini, klik kanan pada folder WebContent di penjelajah proyek dan pilihNew >JSP File. File ini akan dipanggil jika hasil yang dikembalikan adalah SUCCESS yang merupakan "sukses" konstanta String seperti yang ditentukan dalam antarmuka Tindakan -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Berikut adalah file yang akan dipanggil oleh kerangka kerja jika hasil tindakan adalah ERROR yang sama dengan "kesalahan" String konstan. Berikut ini adalah konten dariAccessDenied.jsp
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Access Denied</title>
</head>
<body>
You are not authorized to view this page.
</body>
</html>
Kami juga perlu menciptakan index.jspdi folder WebContent. File ini akan berfungsi sebagai URL tindakan awal tempat pengguna dapat mengklik untuk memberi tahu framework Struts 2 untuk memanggilexecutemetode kelas HelloWorldAction dan membuat tampilan HelloWorld.jsp.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Itu saja, tidak ada perubahan yang diperlukan untuk file web.xml, jadi mari kita gunakan web.xml yang sama dengan yang kita buat di Examplesbab. Sekarang, kami siap menjalankanHello World aplikasi menggunakan framework Struts 2.
Jalankan Aplikasi
Klik kanan pada nama proyek dan klik Export > WARFile untuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan memberi Anda layar berikut -
Mari kita masukkan kata sebagai "RAHASIA" dan Anda akan melihat halaman berikut -
Sekarang masukkan kata lain selain "RAHASIA" dan Anda akan melihat halaman berikut -
Buat Banyak Tindakan
Anda akan sering menentukan lebih dari satu tindakan untuk menangani permintaan yang berbeda dan untuk memberikan URL yang berbeda kepada pengguna, karenanya Anda akan menentukan kelas yang berbeda seperti yang dijelaskan di bawah -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
class MyAction extends ActionSupport {
public static String GOOD = SUCCESS;
public static String BAD = ERROR;
}
public class HelloWorld extends ActionSupport {
...
public String execute() {
if ("SECRET".equals(name)) return MyAction.GOOD;
return MyAction.BAD;
}
...
}
public class SomeOtherClass extends ActionSupport {
...
public String execute() {
return MyAction.GOOD;
}
...
}
Anda akan mengonfigurasi tindakan ini dalam file struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorld"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
<action name = "something"
class = "com.tutorialspoint.struts2.SomeOtherClass"
method = "execute">
<result name = "success">/Something.jsp</result>
<result name = "error">/AccessDenied.jsp</result>
</action>
</package>
</struts>
Seperti yang Anda lihat pada contoh hipotetis di atas, hasil tindakan SUCCESS dan ERROR’s digandakan.
Untuk mengatasi masalah ini, disarankan agar Anda membuat kelas yang berisi hasil hasil.
Interceptor secara konseptual sama dengan filter servlet atau kelas Proxy JDK. Interceptor memungkinkan fungsionalitas lintas sektor untuk diimplementasikan secara terpisah dari tindakan serta kerangka kerja. Anda dapat mencapai hal berikut menggunakan pencegat -
Menyediakan logika preprocessing sebelum aksi dipanggil.
Memberikan logika postprocessing setelah aksi dipanggil.
Menangkap pengecualian sehingga pemrosesan alternatif dapat dilakukan.
Banyak fitur yang disediakan di Struts2 kerangka kerja diimplementasikan menggunakan pencegat;
Examples termasuk penanganan pengecualian, pengunggahan file, callback siklus hidup, dll. Faktanya, karena Struts2 menekankan sebagian besar fungsinya pada interseptor, kemungkinan tidak ada 7 atau 8 interseptor yang ditetapkan per tindakan.
Struts2 Framework Interceptors
Framework Struts 2 menyediakan daftar interseptor out-of-the-box yang baik yang telah dikonfigurasi sebelumnya dan siap digunakan. Beberapa interseptor penting tercantum di bawah ini -
Sr Tidak | Interceptor & Deskripsi |
---|---|
1 | alias Mengizinkan parameter memiliki alias nama yang berbeda di seluruh permintaan. |
2 | checkbox Membantu mengelola kotak centang dengan menambahkan nilai parameter salah untuk kotak centang yang tidak dicentang. |
3 | conversionError Menempatkan informasi kesalahan dari mengonversi string menjadi jenis parameter ke dalam kesalahan bidang tindakan. |
4 | createSession Secara otomatis membuat sesi HTTP jika belum ada. |
5 | debugging Menyediakan beberapa layar debugging yang berbeda untuk pengembang. |
6 | execAndWait Mengirim pengguna ke halaman tunggu perantara saat tindakan dijalankan di latar belakang. |
7 | exception Pengecualian peta yang dilemparkan dari suatu tindakan ke hasil, memungkinkan penanganan pengecualian otomatis melalui pengalihan. |
8 | fileUpload Memfasilitasi pengunggahan file dengan mudah. |
9 | i18n Melacak lokal yang dipilih selama sesi pengguna. |
10 | logger Menyediakan logging sederhana dengan mengeluarkan nama tindakan yang sedang dieksekusi. |
11 | params Menetapkan parameter permintaan pada tindakan. |
12 | prepare Ini biasanya digunakan untuk melakukan pekerjaan pra-pemrosesan, seperti menyiapkan koneksi database. |
13 | profile Mengizinkan informasi profil sederhana untuk dicatat untuk tindakan. |
14 | scope Menyimpan dan mengambil status tindakan dalam sesi atau cakupan aplikasi. |
15 | ServletConfig Menyediakan aksi dengan akses ke berbagai informasi berbasis servlet. |
16 | timer Memberikan informasi pembuatan profil sederhana dalam bentuk berapa lama tindakan yang diperlukan untuk dijalankan. |
17 | token Memeriksa tindakan untuk token yang valid untuk mencegah pengiriman formulir duplikat. |
18 | validation Memberikan dukungan validasi untuk tindakan |
Silakan lihat dokumentasi Struts 2 untuk detail lengkap tentang interseptor yang disebutkan di atas. Tetapi saya akan menunjukkan kepada Anda bagaimana menggunakan pencegat secara umum dalam aplikasi Struts Anda.
Bagaimana Cara Menggunakan Interceptors?
Mari kita lihat bagaimana menggunakan pencegat yang sudah ada ke program "Hello World" kita. Kami akan menggunakantimerinterceptor yang bertujuan untuk mengukur berapa lama waktu yang dibutuhkan untuk mengeksekusi suatu metode tindakan. Pada saat yang sama, saya menggunakanparamsinterseptor yang tujuannya adalah mengirim parameter permintaan ke tindakan. Anda dapat mencoba contoh Anda tanpa menggunakan pencegat ini dan Anda akan menemukannyaname properti tidak disetel karena parameter tidak dapat menjangkau tindakan.
Kami akan menyimpan file HelloWorldAction.java, web.xml, HelloWorld.jsp dan index.jsp seperti yang telah dibuat di Examples bab tetapi mari kita memodifikasi struts.xml file untuk menambahkan pencegat sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<interceptor-ref name = "params"/>
<interceptor-ref name = "timer" />
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang masukkan kata apa pun di kotak teks yang diberikan dan klik tombol Say Hello untuk menjalankan tindakan yang ditentukan. Sekarang jika Anda akan memeriksa log yang dihasilkan, Anda akan menemukan teks berikut -
INFO: Server startup in 3539 ms
27/08/2011 8:40:53 PM
com.opensymphony.xwork2.util.logging.commons.CommonsLogger info
INFO: Executed action [//hello!execute] took 109 ms.
Di sini intinya dibuat karena timer interceptor yang mengatakan bahwa tindakan mengambil total 109ms untuk dieksekusi.
Buat Interceptors Kustom
Menggunakan interseptor khusus dalam aplikasi Anda adalah cara elegan untuk menyediakan fitur aplikasi lintas sektor. Membuat pencegat khusus itu mudah; antarmuka yang perlu diperluas adalah sebagai berikutInterceptor antarmuka -
public interface Interceptor extends Serializable {
void destroy();
void init();
String intercept(ActionInvocation invocation)
throws Exception;
}
Seperti namanya, metode init () menyediakan cara untuk menginisialisasi interseptor, dan metode destroy () menyediakan fasilitas untuk pembersihan interceptor. Tidak seperti tindakan, interseptor digunakan kembali di seluruh permintaan dan perlu threadsafe, terutama metode intercept ().
Itu ActionInvocationobjek menyediakan akses ke lingkungan runtime. Ini memungkinkan akses ke tindakan itu sendiri dan metode untuk menjalankan tindakan dan menentukan apakah tindakan telah dipanggil.
Jika Anda tidak memerlukan inisialisasi atau kode pembersihan, file AbstractInterceptorkelas bisa diperpanjang. Ini menyediakan implementasi nooperation default dari metode init () dan destroy ().
Buat Kelas Interceptor
Mari kita buat MyInterceptor.java berikut di Java Resources > src folder -
package com.tutorialspoint.struts2;
import java.util.*;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyInterceptor extends AbstractInterceptor {
public String intercept(ActionInvocation invocation)throws Exception {
/* let us do some pre-processing */
String output = "Pre-Processing";
System.out.println(output);
/* let us call action or next interceptor */
String result = invocation.invoke();
/* let us do some post-processing */
output = "Post-Processing";
System.out.println(output);
return result;
}
}
Seperti yang Anda perhatikan, tindakan aktual akan dieksekusi menggunakan pencegat oleh invocation.invoke()panggilan. Jadi, Anda dapat melakukan beberapa pemrosesan awal dan beberapa pemrosesan pasca berdasarkan kebutuhan Anda.
Framework itu sendiri memulai proses dengan membuat panggilan pertama ke invoke () objek ActionInvocation. Setiap waktuinvoke()disebut, ActionInvocation berkonsultasi dengan statusnya dan mengeksekusi interseptor mana pun yang datang berikutnya. Ketika semua interseptor yang dikonfigurasi telah dipanggil, metode invoke () akan menyebabkan tindakan itu sendiri dijalankan.
Diagram berikut menunjukkan konsep yang sama melalui aliran permintaan -
Buat Kelas Aksi
Mari kita buat file java HelloWorldAction.java di bawah Java Resources > src dengan nama paket com.tutorialspoint.struts2 dengan konten yang diberikan di bawah ini.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
System.out.println("Inside action....");
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ini adalah kelas yang sama yang telah kita lihat pada contoh sebelumnya. Kami memiliki metode pengambil dan penyetel standar untuk properti "nama" dan metode eksekusi yang mengembalikan string "berhasil".
Buat Tampilan
Mari kita buat file jsp di bawah ini HelloWorld.jsp di folder WebContent di proyek eclipse Anda.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Buat Halaman Utama
Kami juga perlu menciptakan index.jspdi folder WebContent. File ini akan berfungsi sebagai URL tindakan awal di mana pengguna dapat mengklik untuk memberi tahu kerangka kerja Struts 2 untuk memanggil metode yang ditentukan dari kelas HelloWorldAction dan membuat tampilan HelloWorld.jsp.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Itu hello tindakan yang ditentukan dalam file tampilan di atas akan dipetakan ke kelas HelloWorldAction dan metode eksekusi menggunakan file struts.xml.
File Konfigurasi
Sekarang, kita perlu mendaftarkan pencegat kita dan kemudian menyebutnya seperti yang kita panggil pencegat default pada contoh sebelumnya. Untuk mendaftarkan interseptor yang baru didefinisikan, tag <interceptors> ... </interceptors> ditempatkan langsung di bawah tag <package>struts.xmlmengajukan. Anda dapat melewati langkah ini untuk interseptor default seperti yang kita lakukan di contoh sebelumnya. Tapi di sini mari kita daftar dan gunakan sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<interceptors>
<interceptor name = "myinterceptor"
class = "com.tutorialspoint.struts2.MyInterceptor" />
</interceptors>
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<interceptor-ref name = "params"/>
<interceptor-ref name = "myinterceptor" />
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Perlu dicatat bahwa Anda dapat mendaftarkan lebih dari satu interseptor di dalamnya <package> tag dan waktu yang sama Anda dapat memanggil lebih dari satu interseptor di dalam <action>menandai. Anda dapat memanggil pencegat yang sama dengan tindakan yang berbeda.
File web.xml perlu dibuat di bawah folder WEB-INF di bawah Konten Web 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/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang masukkan kata apa pun di kotak teks yang diberikan dan klik tombol Say Hello untuk menjalankan tindakan yang ditentukan. Sekarang jika Anda akan memeriksa log yang dihasilkan, Anda akan menemukan teks berikut di bagian bawah -
Pre-Processing
Inside action....
Post-Processing
Menumpuk Beberapa Interceptor
Seperti yang dapat Anda bayangkan, harus mengonfigurasi beberapa interseptor untuk setiap tindakan akan dengan cepat menjadi sangat tidak dapat dikelola. Untuk alasan ini, pencegat dikelola dengan tumpukan interseptor. Berikut ini contohnya, langsung dari file strutsdefault.xml -
<interceptor-stack name = "basicStack">
<interceptor-ref name = "exception"/>
<interceptor-ref name = "servlet-config"/>
<interceptor-ref name = "prepare"/>
<interceptor-ref name = "checkbox"/>
<interceptor-ref name = "params"/>
<interceptor-ref name = "conversionError"/>
</interceptor-stack>
Taruhan di atas disebut basicStackdan dapat digunakan dalam konfigurasi Anda seperti yang ditunjukkan di bawah ini. Node konfigurasi ini ditempatkan di bawah node <package ... />. Setiap tag <interceptor-ref ... /> merujuk pada interseptor atau tumpukan interseptor yang telah dikonfigurasi sebelum tumpukan interceptor saat ini. Oleh karena itu, sangat penting untuk memastikan bahwa nama tersebut unik di semua konfigurasi tumpukan pencegat dan pencegat saat mengkonfigurasi tumpukan interseptor dan pencegat awal.
Kami telah melihat bagaimana menerapkan interseptor ke aksi, menerapkan tumpukan interseptor tidak berbeda. Faktanya, kami menggunakan tag yang persis sama -
<action name = "hello" class = "com.tutorialspoint.struts2.MyAction">
<interceptor-ref name = "basicStack"/>
<result>view.jsp</result>
</action
Pendaftaran "basicStack" di atas akan mendaftarkan seluruh taruhan dari keenam pencegat dengan tindakan hello. Ini harus dicatat bahwa interseptor dieksekusi sesuai urutan, di mana mereka telah dikonfigurasi. Misalnya, dalam kasus di atas, eksepsi akan dijalankan pertama, kedua akan menjadi servlet-config, dan seterusnya.
Seperti disebutkan sebelumnya, file <results> tag memainkan peran a viewdalam kerangka MVC Struts2. Tindakan tersebut bertanggung jawab untuk menjalankan logika bisnis. Langkah selanjutnya setelah menjalankan logika bisnis adalah menampilkan tampilan menggunakan<results> menandai.
Seringkali ada beberapa aturan navigasi yang dilampirkan dengan hasil. Misalnya, jika metode tindakan adalah untuk mengautentikasi pengguna, ada tiga kemungkinan hasil.
- Login Berhasil
- Gagal Masuk - Nama pengguna atau kata sandi salah
- Akun terkunci
Dalam skenario ini, metode tindakan akan dikonfigurasi dengan tiga kemungkinan string hasil dan tiga tampilan berbeda untuk membuat hasil. Kami telah melihat ini di contoh sebelumnya.
Tapi, Struts2 tidak mengikat Anda dengan menggunakan JSP sebagai teknologi tampilan. Lagipula, tujuan keseluruhan dari paradigma MVC adalah untuk menjaga agar layer tetap terpisah dan sangat dapat dikonfigurasi. Misalnya, untuk klien Web2.0, Anda mungkin ingin mengembalikan XML atau JSON sebagai output. Dalam kasus ini, Anda dapat membuat jenis hasil baru untuk XML atau JSON dan mencapainya.
Struts hadir dengan jumlah yang sudah ditentukan sebelumnya result types dan apa pun yang telah kita lihat, itulah jenis hasil default dispatcher, yang digunakan untuk dikirim ke halaman JSP. Struts memungkinkan Anda menggunakan bahasa markup lain untuk teknologi tampilan untuk menyajikan hasil dan pilihan populer termasukVelocity, Freemaker, XSLT dan Tiles.
Jenis Hasil Dispatcher
Itu dispatchertipe hasil adalah tipe default, dan digunakan jika tidak ada tipe hasil lain yang ditentukan. Ini digunakan untuk meneruskan ke servlet, JSP, halaman HTML, dan seterusnya, di server. Ini menggunakan metode RequestDispatcher.forward () .
Kami melihat versi "singkatan" di contoh sebelumnya, di mana kami menyediakan jalur JSP sebagai badan tag hasil.
<result name = "success">
/HelloWorld.jsp
</result>
Kita juga dapat menentukan file JSP menggunakan tag <param name = "location"> dalam elemen <result ...> sebagai berikut -
<result name = "success" type = "dispatcher">
<param name = "location">
/HelloWorld.jsp
</param >
</result>
Kami juga dapat menyediakan a parseparameter, yang benar secara default. Parameter parse menentukan apakah parameter lokasi akan diurai untuk ekspresi OGNL atau tidak.
Jenis Hasil FreeMaker
Dalam contoh ini, kita akan melihat bagaimana kita bisa menggunakannya FreeMakersebagai teknologi tampilan. Freemaker adalah mesin templat populer yang digunakan untuk menghasilkan keluaran menggunakan templat yang telah ditentukan sebelumnya. Sekarang mari kita buat file template Freemaker bernamahello.fm dengan konten berikut -
Hello World ${name}
File di atas adalah template tempat nameadalah parameter yang akan diteruskan dari luar menggunakan tindakan yang ditentukan. Anda akan menyimpan file ini di CLASSPATH Anda.
Selanjutnya, mari kita ubah struts.xml untuk menentukan hasil sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success" type = "freemarker">
<param name = "location">/hello.fm</param>
</result>
</action>
</package>
</struts>
Mari kita simpan file HelloWorldAction.java, HelloWorldAction.jsp dan index.jsp seperti yang telah kita buat di bab contoh.
Sekarang klik kanan pada nama proyek dan klik Export > WAR File untuk membuat file Perang.
Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut.
Masukkan nilai "Struts2" dan kirimkan halaman tersebut. Anda akan melihat halaman berikutnya.
Seperti yang Anda lihat, ini persis sama dengan tampilan JSP kecuali bahwa kita tidak terikat untuk menggunakan JSP sebagai teknologi tampilan. Kami telah menggunakan Freemaker dalam contoh ini.
Jenis Hasil Pengalihan
Itu redirecttipe hasil memanggil metode response.sendRedirect () standar , menyebabkan browser membuat permintaan baru ke lokasi tertentu.
Kita bisa menyediakan lokasi baik di badan elemen <result ...> atau sebagai elemen <param name = "location">. Redirect juga mendukungparseparameter. Berikut adalah contoh yang dikonfigurasi menggunakan XML -
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success" type = "redirect">
<param name = "location">
/NewWorld.jsp
</param >
</result>
</action>
Jadi cukup ubah file struts.xml Anda untuk menentukan jenis pengalihan seperti yang disebutkan di atas dan buat file baru NewWorld.jpg di mana Anda akan dialihkan setiap kali tindakan hello akan kembali berhasil. Anda dapat memeriksa contoh Tindakan Pengalihan Struts 2 untuk pemahaman yang lebih baik.
Tumpukan Nilai
Tumpukan nilai adalah sekumpulan beberapa objek yang menjaga objek berikut dalam urutan yang disediakan -
Sr Tidak | Objek & Deskripsi |
---|---|
1 | Temporary Objects Ada berbagai objek sementara yang dibuat selama eksekusi halaman. Misalnya nilai iterasi saat ini untuk koleksi yang diulangi dalam tag JSP. |
2 | The Model Object Jika Anda menggunakan objek model dalam aplikasi struts Anda, objek model saat ini ditempatkan sebelum tindakan pada tumpukan nilai. |
3 | The Action Object Ini akan menjadi objek tindakan saat ini yang sedang dieksekusi. |
4 | Named Objects Objek ini termasuk #application, #session, #request, #attr dan #parameters dan merujuk ke cakupan servlet terkait. |
Tumpukan nilai dapat diakses melalui tag yang disediakan untuk JSP, Velocity, atau Freemarker. Ada berbagai tag yang akan kita pelajari dalam bab terpisah, digunakan untuk mendapatkan dan mengatur tumpukan nilai struts 2.0. Anda bisa mendapatkan objek valueStack di dalam tindakan Anda sebagai berikut -
ActionContext.getContext().getValueStack()
Setelah Anda memiliki objek ValueStack, Anda dapat menggunakan metode berikut untuk memanipulasi objek itu -
Sr Tidak | Metode & Deskripsi ValueStack |
---|---|
1 | Object findValue(String expr) Temukan nilai dengan mengevaluasi ekspresi yang diberikan terhadap tumpukan dalam urutan pencarian default. |
2 | CompoundRoot getRoot() Dapatkan CompoundRoot yang menahan objek didorong ke tumpukan. |
3 | Object peek() Tempatkan objek di atas tumpukan tanpa mengubah tumpukan. |
4 | Object pop() Tempatkan objek di atas tumpukan dan keluarkan dari tumpukan. |
5 | void push(Object o) Letakkan benda ini di atas tumpukan. |
6 | void set(String key, Object o) Menetapkan objek pada tumpukan dengan kunci yang diberikan sehingga dapat diambil kembali oleh findValue (key, ...) |
7 | void setDefaultType(Class defaultType) Menyetel jenis default untuk dikonversi jika tidak ada jenis yang diberikan saat mendapatkan nilai. |
8 | void setValue(String expr, Object value) Mencoba menyetel properti pada kacang dalam tumpukan dengan ekspresi yang diberikan menggunakan urutan pencarian default. |
9 | int size() Dapatkan jumlah objek di tumpukan. |
OGNL
Itu Object-Graph Navigation Language(OGNL) adalah bahasa ekspresi yang kuat yang digunakan untuk mereferensikan dan memanipulasi data di ValueStack. OGNL juga membantu dalam transfer data dan konversi tipe.
OGNL sangat mirip dengan JSP Expression Language. OGNL didasarkan pada gagasan memiliki root atau objek default dalam konteksnya. Properti objek default atau root dapat direferensikan menggunakan notasi markup, yang merupakan simbol pagar.
Seperti yang disebutkan sebelumnya, OGNL didasarkan pada konteks dan Struts membuat peta ActionContext untuk digunakan dengan OGNL. Peta ActionContext terdiri dari:
Application - Variabel cakupan aplikasi
Session - Variabel cakupan sesi
Root / value stack - Semua variabel tindakan Anda disimpan di sini
Request - Minta variabel cakupan
Parameters - Parameter permintaan
Atributes - Atribut yang disimpan di halaman, permintaan, sesi dan cakupan aplikasi
Penting untuk dipahami bahwa objek Action selalu tersedia di tumpukan nilai. Jadi, jika objek Action Anda memiliki properti“x” dan “y” ada tersedia untuk Anda gunakan.
Objek di ActionContext dirujuk menggunakan simbol pagar, namun, objek dalam tumpukan nilai bisa langsung direferensikan.
Misalnya, jika employee adalah properti kelas tindakan, maka dapat dirujuk sebagai berikut -
<s:property value = "name"/>
dari pada
<s:property value = "#name"/>
Jika Anda memiliki atribut dalam sesi yang disebut "login", Anda dapat mengambilnya sebagai berikut -
<s:property value = "#session.login"/>
OGNL juga mendukung penanganan koleksi - yaitu Peta, Daftar, dan Set. Misalnya untuk menampilkan daftar dropdown warna, Anda dapat melakukan -
<s:select name = "color" list = "{'red','yellow','green'}" />
Ekspresi OGNL pandai menafsirkan "merah", "kuning", "hijau" sebagai warna dan membuat daftar berdasarkan itu.
Ekspresi OGNL akan digunakan secara ekstensif di bab berikutnya saat kita akan mempelajari tag yang berbeda. Jadi daripada melihatnya secara terpisah, mari kita lihat menggunakan beberapa contoh di bagian Tag Formulir / Tag Kontrol / Tag Data dan Tag Ajax.
Contoh ValueStack / OGNL
Buat Tindakan
Mari kita pertimbangkan kelas tindakan berikut di mana kita mengakses valueStack dan kemudian mengatur beberapa kunci yang akan kita akses menggunakan OGNL dalam tampilan kita, yaitu halaman JSP.
package com.tutorialspoint.struts2;
import java.util.*;
import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
public String execute() throws Exception {
ValueStack stack = ActionContext.getContext().getValueStack();
Map<String, Object> context = new HashMap<String, Object>();
context.put("key1", new String("This is key1"));
context.put("key2", new String("This is key2"));
stack.push(context);
System.out.println("Size of the valueStack: " + stack.size());
return "success";
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Sebenarnya, Struts 2 menambahkan tindakan Anda ke bagian atas valueStack saat dijalankan. Jadi, cara biasa untuk meletakkan barang di Value Stack adalah menambahkan getter / setter untuk nilai ke kelas Action Anda dan kemudian menggunakan tag <s: property> untuk mengakses nilai. Tapi saya menunjukkan kepada Anda bagaimana tepatnya ActionContext dan ValueStack bekerja di struts.
Buat Tampilan
Mari kita buat file jsp di bawah ini HelloWorld.jspdi folder WebContent di proyek eclipse Anda. Tampilan ini akan ditampilkan jika tindakan kembali berhasil -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Entered value : <s:property value = "name"/><br/>
Value of key 1 : <s:property value = "key1" /><br/>
Value of key 2 : <s:property value = "key2" /> <br/>
</body>
</html>
Kami juga perlu menciptakan index.jsp di folder WebContent yang isinya sebagai berikut -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
File Konfigurasi
Berikut ini adalah konten dari struts.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat.
Terakhir, jalankan server Tomcat dan coba akses URL http://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut
Sekarang masukkan kata apa saja di kotak teks yang diberikan dan klik tombol "Say Hello" untuk menjalankan tindakan yang ditentukan. Sekarang, jika Anda akan memeriksa log yang dihasilkan, Anda akan menemukan teks berikut di bagian bawah -
Size of the valueStack: 3
Ini akan menampilkan layar berikut, yang akan menampilkan nilai apa pun yang akan Anda masukkan dan nilai key1 dan key2 yang telah kami masukkan ke ValueStack.
Kerangka Struts 2 menyediakan dukungan bawaan untuk memproses unggahan file menggunakan "Unggahan File berbasis Formulir dalam HTML". Saat file diupload, biasanya file tersebut akan disimpan di direktori sementara dan file tersebut harus diproses atau dipindahkan oleh kelas Action Anda ke direktori permanen untuk memastikan data tidak hilang.
Note - Server mungkin memiliki kebijakan keamanan yang melarang Anda menulis ke direktori selain direktori sementara dan direktori milik aplikasi web Anda.
Mengunggah file di Struts dimungkinkan melalui interseptor yang telah ditentukan sebelumnya yang disebut FileUpload interceptor yang tersedia melalui kelas org.apache.struts2.interceptor.FileUploadInterceptor dan termasuk sebagai bagian daridefaultStack. Anda masih bisa menggunakannya di struts.xml Anda untuk mengatur berbagai parameter seperti yang akan kita lihat di bawah.
Buat File Tampilan
Mari kita mulai dengan membuat tampilan yang akan dibutuhkan untuk menelusuri dan mengunggah file yang dipilih. Jadi mari kita buat fileindex.jsp dengan formulir unggahan HTML biasa yang memungkinkan pengguna mengunggah file -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>File Upload</title>
</head>
<body>
<form action = "upload" method = "post" enctype = "multipart/form-data">
<label for = "myFile">Upload your file</label>
<input type = "file" name = "myFile" />
<input type = "submit" value = "Upload"/>
</form>
</body>
</html>
Ada beberapa hal yang perlu diperhatikan dalam contoh di atas. Pertama, enctype formulir diatur kemultipart/form-data. Ini harus disetel agar unggahan file berhasil ditangani oleh pencegat unggahan file. Poin berikutnya yang diperhatikan adalah metode tindakan formulirupload dan nama bidang unggahan file - yaitu myFile. Kami membutuhkan informasi ini untuk membuat metode aksi dan konfigurasi struts.
Selanjutnya, mari kita buat file jsp sederhana success.jsp untuk menampilkan hasil upload file kita jika berhasil.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Success</title>
</head>
<body>
You have successfully uploaded <s:property value = "myFileFileName"/>
</body>
</html>
Berikut akan menjadi file hasil error.jsp seandainya ada kesalahan dalam mengunggah file -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>File Upload Error</title>
</head>
<body>
There has been an error in uploading the file.
</body>
</html>
Buat Kelas Aksi
Selanjutnya, mari kita buat kelas Java bernama uploadFile.java yang akan menangani pengunggahan file dan menyimpan file itu di lokasi yang aman -
package com.tutorialspoint.struts2;
import java.io.File;
import org.apache.commons.io.FileUtils;
import java.io.IOException;
import com.opensymphony.xwork2.ActionSupport;
public class uploadFile extends ActionSupport {
private File myFile;
private String myFileContentType;
private String myFileFileName;
private String destPath;
public String execute() {
/* Copy file to a safe location */
destPath = "C:/apache-tomcat-6.0.33/work/";
try {
System.out.println("Src File name: " + myFile);
System.out.println("Dst File name: " + myFileFileName);
File destFile = new File(destPath, myFileFileName);
FileUtils.copyFile(myFile, destFile);
} catch(IOException e) {
e.printStackTrace();
return ERROR;
}
return SUCCESS;
}
public File getMyFile() {
return myFile;
}
public void setMyFile(File myFile) {
this.myFile = myFile;
}
public String getMyFileContentType() {
return myFileContentType;
}
public void setMyFileContentType(String myFileContentType) {
this.myFileContentType = myFileContentType;
}
public String getMyFileFileName() {
return myFileFileName;
}
public void setMyFileFileName(String myFileFileName) {
this.myFileFileName = myFileFileName;
}
}
Itu uploadFile.javaadalah kelas yang sangat sederhana. Hal penting yang perlu diperhatikan adalah bahwa interseptor FileUpload bersama dengan Parameters Interceptor melakukan semua tugas berat untuk kami.
Pencegat FileUpload membuat tiga parameter tersedia untuk Anda secara default. Mereka diberi nama dalam pola berikut -
[your file name parameter] - Ini adalah file sebenarnya yang telah diunggah oleh pengguna. Dalam contoh ini, ini akan menjadi "myFile"
[your file name parameter]ContentType- Ini adalah jenis konten file yang diunggah. Dalam contoh ini, ini akan menjadi "myFileContentType"
[your file name parameter]FileName- Ini adalah nama file yang diunggah. Dalam contoh ini, ini akan menjadi "myFileFileName"
Tiga parameter tersedia untuk kami, berkat Struts Interceptors. Yang harus kita lakukan adalah membuat tiga parameter dengan nama yang benar di kelas Action kita dan secara otomatis variabel ini terhubung secara otomatis untuk kita. Jadi, dalam contoh di atas, kami memiliki tiga parameter dan metode tindakan yang hanya mengembalikan "berhasil" jika semuanya berjalan dengan baik jika tidak, ia mengembalikan "kesalahan".
File Konfigurasi
Berikut adalah properti konfigurasi Struts2 yang mengontrol proses pengunggahan file -
Sr Tidak | Properti & Deskripsi |
---|---|
1 | struts.multipart.maxSize Ukuran maksimum (dalam byte) file yang akan diterima sebagai file yang diunggah. Default-nya adalah 250 juta. |
2 | struts.multipart.parser Perpustakaan digunakan untuk mengunggah formulir multi bagian. Secara default adalahjakarta |
3 | struts.multipart.saveDir Lokasi untuk menyimpan file sementara. Secara default adalah javax.servlet.context.tempdir. |
Untuk mengubah pengaturan ini, Anda dapat menggunakan constant tag di file struts.xml aplikasi Anda, seperti yang saya lakukan untuk mengubah ukuran maksimum file yang akan diunggah.
Mari kita miliki struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<constant name = "struts.multipart.maxSize" value = "1000000" />
<package name = "helloworld" extends = "struts-default">
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
Sejak, FileUploadinterseptor adalah bagian dari Stack default interseptor, kita tidak perlu mengkonfigurasinya secara eksplisit. Tapi, Anda bisa menambahkan tag <interceptor-ref> di dalam <action>. Pencegat fileUpload membutuhkan dua parameter(a) maximumSize dan (b) allowedTypes.
Parameter maximumSize mengatur ukuran file maksimum yang diperbolehkan (defaultnya kira-kira 2MB). Parameter allowTypes adalah daftar jenis konten yang diterima (MIME) yang dipisahkan koma seperti yang ditunjukkan di bawah ini -
<action name = "upload" class = "com.tutorialspoint.struts2.uploadFile">
<interceptor-ref name = "basicStack">
<interceptor-ref name = "fileUpload">
<param name = "allowedTypes">image/jpeg,image/gif</param>
</interceptor-ref>
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/upload.jsp. Ini akan menghasilkan layar berikut -
Sekarang pilih file "Contacts.txt" menggunakan tombol Browse dan klik tombol upload yang akan mengupload file pada servis Anda dan Anda akan melihat halaman berikutnya. Anda dapat memeriksa file yang diunggah harus disimpan di C: \ apache-tomcat-6.0.33 \ work.
Perhatikan bahwa FileUpload Interceptor menghapus file yang diunggah secara otomatis sehingga Anda harus menyimpan file yang diunggah secara terprogram di beberapa lokasi sebelum dihapus.
Pesan Kesalahan
Pencegat fileUplaod menggunakan beberapa kunci pesan kesalahan default -
Sr Tidak | Kunci & Deskripsi Pesan Kesalahan |
---|---|
1 | struts.messages.error.uploading Kesalahan umum yang terjadi ketika file tidak dapat diunggah. |
2 | struts.messages.error.file.too.large Terjadi jika file yang diunggah terlalu besar seperti yang ditentukan oleh maximumSize. |
3 | struts.messages.error.content.type.not.allowed Terjadi ketika file yang diunggah tidak cocok dengan jenis konten yang diharapkan yang ditentukan. |
Anda dapat mengganti teks pesan-pesan ini di WebContent/WEB-INF/classes/messages.properties file sumber daya.
Bab ini akan mengajarkan Anda cara mengakses database menggunakan Struts 2 dalam langkah-langkah sederhana. Struts adalah kerangka kerja MVC dan bukan kerangka kerja database tetapi menyediakan dukungan yang sangat baik untuk integrasi JPA / Hibernate. Kita akan melihat integrasi hibernate di bab selanjutnya, tetapi di bab ini kita akan menggunakan JDBC lama biasa untuk mengakses database.
Langkah pertama dalam bab ini adalah mengatur dan mengatur basis data kita. Saya menggunakan MySQL sebagai database saya untuk contoh ini. Saya telah menginstal MySQL di mesin saya dan saya telah membuat database baru yang disebut "struts_tutorial". Saya telah membuat tabel bernamalogindan mengisinya dengan beberapa nilai. Di bawah ini adalah skrip yang saya gunakan untuk membuat dan mengisi tabel.
Database MYSQL saya memiliki nama pengguna default "root" dan "root123" kata sandi
CREATE TABLE `struts_tutorial`.`login` (
`user` VARCHAR( 10 ) NOT NULL ,
`password` VARCHAR( 10 ) NOT NULL ,
`name` VARCHAR( 20 ) NOT NULL ,
PRIMARY KEY ( `user` )
) ENGINE = InnoDB;
INSERT INTO `struts_tutorial`.`login` (`user`, `password`, `name`)
VALUES ('scott', 'navy', 'Scott Burgemott');
Langkah selanjutnya adalah mengunduh file jar Konektor MySQL dan menempatkan file ini di folder WEB-INF \ lib proyek Anda. Setelah kita melakukan ini, kita sekarang siap untuk membuat kelas aksi.
Buat Tindakan
Kelas tindakan memiliki properti yang sesuai dengan kolom dalam tabel database. Kita punyauser, password dan namesebagai atribut String. Dalam metode aksi, kami menggunakan parameter pengguna dan kata sandi untuk memeriksa apakah pengguna ada, jika demikian, kami menampilkan nama pengguna di layar berikutnya.
Jika pengguna memasukkan informasi yang salah, kami mengirim mereka ke layar login lagi.
Berikut ini adalah konten dari LoginAction.java file -
package com.tutorialspoint.struts2;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String user;
private String password;
private String name;
public String execute() {
String ret = ERROR;
Connection conn = null;
try {
String URL = "jdbc:mysql://localhost/struts_tutorial";
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(URL, "root", "root123");
String sql = "SELECT name FROM login WHERE";
sql+=" user = ? AND password = ?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, user);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
name = rs.getString(1);
ret = SUCCESS;
}
} catch (Exception e) {
ret = ERROR;
} finally {
if (conn != null) {
try {
conn.close();
} catch (Exception e) {
}
}
}
return ret;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Buat Halaman Utama
Sekarang, mari kita buat file JSP index.jspuntuk mengumpulkan nama pengguna dan kata sandi. Nama pengguna dan kata sandi ini akan diperiksa terhadap database.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Login</title>
</head>
<body>
<form action = "loginaction" method = "post">
User:<br/><input type = "text" name = "user"/><br/>
Password:<br/><input type = "password" name = "password"/><br/>
<input type = "submit" value = "Login"/>
</form>
</body>
</html>
Buat Tampilan
Sekarang mari kita buat success.jsp file yang akan dipanggil jika tindakan mengembalikan SUCCESS, tetapi kami akan memiliki file tampilan lain jika ada ERROR yang dikembalikan dari tindakan.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Successful Login</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Berikut akan menjadi file tampilan error.jsp dalam kasus ERROR dikembalikan dari tindakan.
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Invalid User Name or Password</title>
</head>
<body>
Wrong user name or password provided.
</body>
</html>
File Konfigurasi
Terakhir, mari kita gabungkan semuanya menggunakan file konfigurasi struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "loginaction"
class = "com.tutorialspoint.struts2.LoginAction"
method = "execute">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Masukkan nama pengguna dan kata sandi yang salah. Anda akan melihat halaman berikutnya.
Sekarang masuk scott sebagai nama pengguna dan navysebagai kata sandi. Anda akan melihat halaman berikutnya.
Bab ini menjelaskan bagaimana Anda dapat mengirim email menggunakan aplikasi Struts 2 Anda.
Untuk latihan ini, Anda perlu mengunduh dan menginstal mail.jar dari JavaMail API 1.4.4 dan menempatkan filemail.jar file di folder WEB-INF \ lib Anda dan kemudian lanjutkan dengan mengikuti langkah-langkah standar untuk membuat file tindakan, tampilan dan konfigurasi.
Buat Tindakan
Langkah selanjutnya adalah membuat metode Tindakan yang menangani pengiriman email. Mari kita buat kelas baru bernamaEmailer.java dengan isi sebagai berikut.
package com.tutorialspoint.struts2;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.opensymphony.xwork2.ActionSupport;
public class Emailer extends ActionSupport {
private String from;
private String password;
private String to;
private String subject;
private String body;
static Properties properties = new Properties();
static {
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.socketFactory.port", "465");
properties.put("mail.smtp.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.port", "465");
}
public String execute() {
String ret = SUCCESS;
try {
Session session = Session.getDefaultInstance(properties,
new javax.mail.Authenticator() {
protected PasswordAuthentication
getPasswordAuthentication() {
return new
PasswordAuthentication(from, password);
}
}
);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
message.setSubject(subject);
message.setText(body);
Transport.send(message);
} catch(Exception e) {
ret = ERROR;
e.printStackTrace();
}
return ret;
}
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public static Properties getProperties() {
return properties;
}
public static void setProperties(Properties properties) {
Emailer.properties = properties;
}
}
Seperti yang terlihat pada kode sumber di atas, file Emailer.javamemiliki properti yang sesuai dengan atribut formulir di halaman email.jsp yang diberikan di bawah ini. Atribut ini adalah -
From- Alamat email pengirim. Karena kami menggunakan SMTP Google, kami memerlukan id gtalk yang valid
Password - Kata sandi akun di atas
To - Kepada siapa harus mengirim email?
Subject - subjek email
Body - Pesan email sebenarnya
Kami belum mempertimbangkan validasi apa pun pada bidang di atas, validasi akan ditambahkan di bab berikutnya. Sekarang mari kita lihat metode execute (). Metode execution () menggunakan pustaka javax Mail untuk mengirim email menggunakan parameter yang disediakan. Jika email berhasil dikirim, tindakan mengembalikan SUKSES, jika tidak maka akan mengembalikan ERROR.
Buat Halaman Utama
Mari kita tulis file JSP halaman utama index.jsp, yang akan digunakan untuk mengumpulkan informasi terkait email yang disebutkan di atas -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Email Form</title>
</head>
<body>
<em>The form below uses Google's SMTP server.
So you need to enter a gmail username and password
</em>
<form action = "emailer" method = "post">
<label for = "from">From</label><br/>
<input type = "text" name = "from"/><br/>
<label for = "password">Password</label><br/>
<input type = "password" name = "password"/><br/>
<label for = "to">To</label><br/>
<input type = "text" name = "to"/><br/>
<label for = "subject">Subject</label><br/>
<input type = "text" name = "subject"/><br/>
<label for = "body">Body</label><br/>
<input type = "text" name = "body"/><br/>
<input type = "submit" value = "Send Email"/>
</form>
</body>
</html>
Buat Tampilan
Kami akan menggunakan file JSP success.jsp yang akan dipanggil jika tindakan mengembalikan SUKSES, tetapi kami akan memiliki file tampilan lain jika ada ERROR yang dikembalikan dari tindakan.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Email Success</title>
</head>
<body>
Your email to <s:property value = "to"/> was sent successfully.
</body>
</html>
Berikut akan menjadi file tampilan error.jsp dalam kasus ERROR dikembalikan dari tindakan.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Email Error</title>
</head>
<body>
There is a problem sending your email to <s:property value = "to"/>.
</body>
</html>
File Konfigurasi
Sekarang mari kita gabungkan semuanya menggunakan file konfigurasi struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "emailer"
class = "com.tutorialspoint.struts2.Emailer"
method = "execute">
<result name = "success">/success.jsp</result>
<result name = "error">/error.jsp</result>
</action>
</package>
</struts>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Masukkan informasi yang diperlukan dan klik Send Emailtombol. Jika semuanya berjalan dengan baik, maka Anda akan melihat halaman berikut.
Pada bab ini, kita akan melihat lebih dalam kerangka validasi Struts. Pada inti Struts, kami memiliki kerangka kerja validasi yang membantu aplikasi menjalankan aturan untuk melakukan validasi sebelum metode tindakan dijalankan.
Validasi sisi klien biasanya dicapai dengan menggunakan Javascript. Namun, seseorang tidak boleh mengandalkan validasi sisi klien saja. Praktik terbaik menyarankan bahwa validasi harus diperkenalkan di semua tingkat kerangka aplikasi Anda. Sekarang mari kita lihat dua cara menambahkan validasi ke proyek Struts kita.
Di sini, kami akan mengambil contoh file Employee yang nama dan usianya harus diambil menggunakan halaman sederhana, dan kami akan menempatkan dua validasi ini untuk memastikan bahwa pengguna selalu memasukkan nama dan usia yang harus dalam kisaran antara 28 dan 65.
Mari kita mulai dengan halaman JSP utama dari contoh tersebut.
Buat Halaman Utama
Mari kita tulis file JSP halaman utama index.jsp, yang akan digunakan untuk mengumpulkan informasi terkait Karyawan yang disebutkan di atas.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form</title>
</head>
<body>
<s:form action = "empinfo" method = "post">
<s:textfield name = "name" label = "Name" size = "20" />
<s:textfield name = "age" label = "Age" size = "20" />
<s:submit name = "submit" label = "Submit" align="center" />
</s:form>
</body>
</html>
Index.jsp menggunakan tag Struts, yang belum kita bahas, tapi kita akan mempelajarinya di bab terkait tag. Tapi untuk saat ini, anggap saja tag s: textfield mencetak kolom input, dan s: submit mencetak tombol kirim. Kami telah menggunakan properti label untuk setiap tag yang membuat label untuk setiap tag.
Buat Tampilan
Kami akan menggunakan file JSP success.jsp yang akan dipanggil jika tindakan yang ditentukan mengembalikan SUCCESS.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>
</html>
Buat Tindakan
Jadi mari kita definisikan kelas aksi kecil Employee, lalu tambahkan metode yang disebut validate() seperti yang ditunjukkan di bawah ini Employee.javamengajukan. Pastikan bahwa kelas tindakan Anda memperluasActionSupport kelas, jika metode validasi Anda tidak akan dijalankan.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport {
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public void validate() {
if (name == null || name.trim().equals("")) {
addFieldError("name","The name is required");
}
if (age < 28 || age > 65) {
addFieldError("age","Age must be in between 28 and 65");
}
}
}
Seperti yang ditunjukkan pada contoh di atas, metode validasi memeriksa apakah bidang 'Nama' memiliki nilai atau tidak. Jika tidak ada nilai yang diberikan, kami menambahkan kesalahan bidang untuk bidang 'Nama' dengan pesan kesalahan khusus. Kedua, kami memeriksa apakah nilai yang dimasukkan untuk bidang 'Usia' antara 28 dan 65 atau tidak, jika kondisi ini tidak memenuhi kami menambahkan kesalahan di atas bidang yang divalidasi.
File Konfigurasi
Akhirnya, mari kita gabungkan semuanya menggunakan struts.xml file konfigurasi sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "empinfo"
class = "com.tutorialspoint.struts2.Employee"
method = "execute">
<result name = "input">/index.jsp</result>
<result name = "success">/success.jsp</result>
</action>
</package>
</struts>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang jangan masukkan informasi yang diperlukan, cukup klik Submittombol. Anda akan melihat hasil sebagai berikut -
Masukkan informasi yang diperlukan tetapi masukkan bidang Dari yang salah, katakanlah nama sebagai "tes" dan usia 30, dan terakhir klik Submittombol. Anda akan melihat hasil sebagai berikut -
Bagaimana Validasi Ini Bekerja?
Ketika pengguna menekan tombol kirim, Struts 2 secara otomatis akan menjalankan metode validasi dan jika ada “if”pernyataan yang tercantum di dalam metode adalah benar, Struts 2 akan memanggil metode addFieldError-nya. Jika ada kesalahan yang ditambahkan, maka Struts 2 tidak akan melanjutkan untuk memanggil metode eksekusi. Sebaliknya kerangka Struts 2 akan kembaliinput sebagai hasil dari pemanggilan tindakan.
Karenanya, saat validasi gagal dan Struts 2 kembali input, kerangka kerja Struts 2 akan menampilkan kembali file index.jsp. Karena, kami menggunakan tag formulir Struts 2, Struts 2 secara otomatis akan menambahkan pesan kesalahan tepat di atas formulir yang diajukan.
Pesan kesalahan ini adalah pesan yang kami tentukan dalam panggilan metode addFieldError. Metode addFieldError membutuhkan dua argumen. Yang pertama, adalahform nama bidang tempat kesalahan berlaku dan yang kedua, adalah pesan kesalahan yang ditampilkan di atas bidang formulir itu.
addFieldError("name","The name is required");
Untuk menangani nilai kembalian input kita perlu menambahkan hasil berikut ke node tindakan kita di struts.xml.
<result name = "input">/index.jsp</result>
Validasi Berbasis XML
Metode kedua untuk melakukan validasi adalah dengan menempatkan file xml di sebelah kelas tindakan. Validasi berbasis XML Struts2 menyediakan lebih banyak pilihan validasi seperti validasi email, validasi rentang integer, bidang validasi formulir, validasi ekspresi, validasi regex, validasi yang diperlukan, validasi string yang diperlukan, validasi panjang string, dll.
File xml perlu diberi nama '[action-class]'-validation.xml. Jadi, dalam kasus kami, kami membuat file bernamaEmployee-validation.xml dengan konten berikut -
<!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"http://www.opensymphony.com/xwork/xwork-validator-1.0.2.dtd">
<validators>
<field name = "name">
<field-validator type = "required">
<message>
The name is required.
</message>
</field-validator>
</field>
<field name = "age">
<field-validator type = "int">
<param name = "min">29</param>
<param name = "max">64</param>
<message>
Age must be in between 28 and 65
</message>
</field-validator>
</field>
</validators>
File XML di atas akan disimpan di CLASSPATH Anda idealnya bersama dengan file kelas. Mari kita memiliki kelas tindakan Karyawan sebagai berikut tanpa harusvalidate() metode -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport{
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Sisa setup akan tetap seperti contoh sebelumnya, sekarang jika Anda akan menjalankan aplikasi, itu akan menghasilkan hasil yang sama seperti yang kita terima pada contoh sebelumnya.
Keuntungan memiliki file xml untuk menyimpan konfigurasi memungkinkan pemisahan validasi dari kode aplikasi. Anda bisa meminta pengembang untuk menulis kode dan analis bisnis membuat file xml validasi. Hal lain yang perlu diperhatikan adalah jenis validator yang tersedia secara default.
Ada lebih banyak validator yang datang secara default dengan Struts. Validator umum termasuk Validator Tanggal, validator Regex, dan validator Panjang String. Periksa tautan berikut untuk lebih detail Struts - Validator Berbasis XML .
Internasionalisasi (i18n) adalah proses perencanaan dan penerapan produk dan layanan sehingga dapat dengan mudah disesuaikan dengan bahasa dan budaya lokal tertentu, proses yang disebut lokalisasi. Proses internasionalisasi disebut pemberdayaan terjemahan atau lokalisasi.
Internasionalisasi disingkat i18n karena kata tersebut dimulai dengan huruf “i” dan diakhiri dengan “n”, dan ada 18 karakter antara i pertama dan n terakhir.
Struts2 menyediakan lokalisasi, yaitu, internasionalisasi (i18n) dukungan melalui kumpulan sumber daya, interseptor dan pustaka tag di tempat-tempat berikut -
Tag UI
Pesan dan Kesalahan.
Di dalam kelas aksi.
Kumpulan Sumber Daya
Struts2 menggunakan bundel sumber daya untuk menyediakan beberapa pilihan bahasa dan lokal kepada pengguna aplikasi web. Anda tidak perlu khawatir tentang menulis halaman dalam berbagai bahasa. Yang harus Anda lakukan adalah membuat bundel sumber daya untuk setiap bahasa yang Anda inginkan. Paket sumber daya akan berisi judul, pesan, dan teks lain dalam bahasa pengguna Anda. Paket sumber daya adalah file yang berisi pasangan kunci / nilai untuk bahasa default aplikasi Anda.
Format penamaan paling sederhana untuk file sumber daya adalah -
bundlename_language_country.properties
Sini, bundlenamebisa berupa ActionClass, Interface, SuperClass, Model, Package, Properti sumber daya global. Bagian selanjutnyalanguage_country mewakili lokal negara misalnya, lokal Spanyol (Spanyol) diwakili oleh es_ES, dan lokal Inggris (Amerika Serikat) diwakili oleh en_US dll di mana Anda dapat melewati bagian negara yang bersifat opsional.
Saat Anda mereferensikan elemen pesan dengan kuncinya, kerangka kerja Struts mencari bundel pesan yang sesuai dengan urutan berikut -
- ActionClass.properties
- Interface.properties
- SuperClass.properties
- model.properties
- package.properties
- struts.properties
- global.properties
Untuk mengembangkan aplikasi Anda dalam berbagai bahasa, Anda harus mempertahankan beberapa file properti yang sesuai dengan bahasa / lokal tersebut dan menentukan semua konten dalam istilah pasangan kunci / nilai.
Misalnya, jika Anda akan mengembangkan aplikasi untuk bahasa Inggris AS (Default), Spanyol, dan Prancis, Anda harus membuat tiga file properti. Di sini saya akan menggunakanglobal.properties file saja, Anda juga dapat menggunakan file properti yang berbeda untuk memisahkan jenis pesan yang berbeda.
global.properties - Secara default, bahasa Inggris (Amerika Serikat) akan diterapkan
global_fr.properties - Ini akan digunakan untuk lokasi Franch.
global_es.properties - Ini akan digunakan untuk bahasa Spanyol.
Akses pesannya
Ada beberapa cara untuk mengakses sumber daya pesan, termasuk getText, tag teks, atribut kunci dari tag UI, dan tag i18n. Mari kita lihat secara singkat -
Menampilkan i18n teks, gunakan panggilan ke getText di tag properti, atau tag lainnya, seperti tag UI sebagai berikut -
<s:property value = "getText('some.key')" />
Itu text tag mengambil pesan dari paket sumber daya default, yaitu struts.properties
<s:text name = "some.key" />
Itu i18n tagmendorong paket sumber daya arbitrer ke tumpukan nilai. Tag lain dalam cakupan tag i18n dapat menampilkan pesan dari paket sumber daya itu−
<s:i18n name = "some.package.bundle">
<s:text name = "some.key" />
</s:i18n>
Itu key atribut sebagian besar tag UI dapat digunakan untuk membuat pesan dari paket sumber daya -
<s:textfield key = "some.key" name = "textfieldName"/>
Contoh Pelokalan
Mari kita targetkan untuk berkreasi index.jspdari bab sebelumnya dalam berbagai bahasa. File yang sama akan ditulis sebagai berikut -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form with Multilingual Support</title>
</head>
<body>
<h1><s:text name = "global.heading"/></h1>
<s:url id = "indexEN" namespace="/" action = "locale" >
<s:param name = "request_locale" >en</s:param>
</s:url>
<s:url id = "indexES" namespace="/" action = "locale" >
<s:param name = "request_locale" >es</s:param>
</s:url>
<s:url id = "indexFR" namespace="/" action = "locale" >
<s:param name = "request_locale" >fr</s:param>
</s:url>
<s:a href="%{indexEN}" >English</s:a>
<s:a href="%{indexES}" >Spanish</s:a>
<s:a href="%{indexFR}" >France</s:a>
<s:form action = "empinfo" method = "post" namespace = "/">
<s:textfield name = "name" key = "global.name" size = "20" />
<s:textfield name = "age" key = "global.age" size = "20" />
<s:submit name = "submit" key = "global.submit" />
</s:form>
</body>
</html>
Kami akan membuat success.jsp file yang akan dipanggil jika tindakan yang ditentukan kembali SUCCESS.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
<s:property value = "getText('global.success')" />
</body>
</html>
Di sini kita perlu membuat dua tindakan berikut. (a) Tindakan pertama a untuk mengurus Lokal dan menampilkan file index.jsp yang sama dengan bahasa yang berbeda (b) Tindakan lain adalah menangani pengiriman formulir itu sendiri. Kedua tindakan tersebut akan mengembalikan SUKSES, tetapi kami akan mengambil tindakan berbeda berdasarkan nilai pengembalian karena tujuan kami berbeda untuk kedua tindakan tersebut.
Tindakan untuk menjaga Lokal
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Locale extends ActionSupport {
public String execute() {
return SUCCESS;
}
}
Tindakan Untuk Mengirimkan Formulir
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class Employee extends ActionSupport{
private String name;
private int age;
public String execute() {
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Sekarang mari kita buat tiga hal berikut global.properties file dan memasukkannya CLASSPATH -
global.properties
global.name = Name
global.age = Age
global.submit = Submit
global.heading = Select Locale
global.success = Successfully authenticated
global_fr.properties
global.name = Nom d'utilisateur
global.age = l'âge
global.submit = Soumettre des
global.heading = Sé lectionnez Local
global.success = Authentifi é avec succès
global_es.properties
global.name = Nombre de usuario
global.age = Edad
global.submit = Presentar
global.heading = seleccionar la configuracion regional
global.success = Autenticado correctamente
Kami akan membuat struts.xml dengan dua tindakan sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<constant name = "struts.custom.i18n.resources" value = "global" />
<package name = "helloworld" extends = "struts-default" namespace="/">
<action name = "empinfo"
class = "com.tutorialspoint.struts2.Employee"
method = "execute">
<result name = "input">/index.jsp</result>
<result name = "success">/success.jsp</result>
</action>
<action name = "locale"
class = "com.tutorialspoint.struts2.Locale"
method = "execute">
<result name = "success">/index.jsp</result>
</action>
</package>
</struts>
Berikut ini adalah konten dari web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang pilih salah satu bahasa, katakanlah kita pilih Spanish, itu akan menampilkan hasil sebagai berikut -
Anda juga dapat mencoba dengan bahasa Prancis. Terakhir, mari kita coba klikSubmit tombol ketika kita berada di Bahasa Spanyol, itu akan menampilkan layar berikut -
Selamat, sekarang Anda memiliki halaman web multibahasa, Anda dapat meluncurkan situs web Anda secara global.
Semua yang ada di permintaan HTTP diperlakukan sebagai Stringoleh protokol. Ini termasuk angka, boolean, bilangan bulat, tanggal, desimal, dan lainnya. Namun, di kelas Struts, Anda bisa memiliki properti tipe data apa pun.
Bagaimana Struts melakukan autowire properti untuk Anda?
Struts menggunakan berbagai jenis konverter di bawah penutup untuk melakukan pengangkatan berat.
Misalnya, jika Anda memiliki atribut integer di kelas Action Anda, Struts secara otomatis mengubah parameter request menjadi atribut integer tanpa Anda melakukan apa pun. Secara default, Struts hadir dengan sejumlah konverter tipe
Jika Anda menggunakan salah satu konverter yang tercantum di bawah ini, maka Anda tidak perlu khawatir -
- Integer, Float, Double, Desimal
- Tanggal dan Waktu
- Array dan Koleksi
- Enumerations
- Boolean
- BigDecimal
Pada saat Anda menggunakan tipe data Anda sendiri, Anda perlu menambahkan konverter Anda sendiri agar Struts mengetahui cara mengonversi nilai tersebut sebelum ditampilkan. Pertimbangkan kelas POJO berikutEnvironment.java.
package com.tutorialspoint.struts2;
public class Environment {
private String name;
public Environment(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Ini adalah kelas yang sangat sederhana yang memiliki atribut bernama name, jadi tidak ada yang istimewa dari kelas ini. Mari kita buat kelas lain yang berisi informasi tentang sistem -SystemDetails.java.
Untuk tujuan latihan ini, saya telah melakukan hardcode Lingkungan ke "Pengembangan" dan Sistem Operasi ke "Windows XP SP3".
Dalam proyek waktu nyata, Anda akan mendapatkan informasi ini dari konfigurasi sistem.
Mari kita memiliki kelas tindakan berikut -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class SystemDetails extends ActionSupport {
private Environment environment = new Environment("Development");
private String operatingSystem = "Windows XP SP3";
public String execute() {
return SUCCESS;
}
public Environment getEnvironment() {
return environment;
}
public void setEnvironment(Environment environment) {
this.environment = environment;
}
public String getOperatingSystem() {
return operatingSystem;
}
public void setOperatingSystem(String operatingSystem) {
this.operatingSystem = operatingSystem;
}
}
Selanjutnya, mari kita buat file JSP sederhana System.jsp untuk menampilkan informasi Lingkungan dan Sistem Operasi.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>System Details</title>
</head>
<body>
Environment: <s:property value = "environment"/><br/>
Operating System:<s:property value = "operatingSystem"/>
</body>
</html>
Mari kita kawat system.jsp dan SystemDetails.java kelas bersama menggunakan struts.xml.
Kelas SystemDetails memiliki metode execute () sederhana yang mengembalikan string "SUCCESS".
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "system"
class = "com.tutorialspoint.struts2.SystemDetails"
method = "execute">
<result name = "success">/System.jsp</result>
</action>
</package>
</struts>
Klik kanan pada nama proyek dan klik Export > WAR File untuk membuat file Perang.
Kemudian terapkan WAR ini di direktori webapps Tomcat.
Terakhir, jalankan server Tomcat dan coba akses URL http://localhost:8080/HelloWorldStruts2/system.action. Ini akan menghasilkan layar berikut -
Apa yang salah dengan keluaran di atas? Struts tahu bagaimana menampilkan dan mengonversi string "Windows XP SP3" dan tipe data bawaan lainnya, tetapi tidak tahu apa yang harus dilakukan dengan properti dariEnvironmentTipe. Itu hanya disebuttoString() metode di kelas
Untuk mengatasi masalah ini, sekarang mari kita membuat dan mendaftar yang sederhana TypeConverter untuk kelas Lingkungan.
Buat kelas bernama EnvironmentConverter.java dengan berikut ini.
package com.tutorialspoint.struts2;
import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;
public class EnvironmentConverter extends StrutsTypeConverter {
@Override
public Object convertFromString(Map context, String[] values, Class clazz) {
Environment env = new Environment(values[0]);
return env;
}
@Override
public String convertToString(Map context, Object value) {
Environment env = (Environment) value;
return env == null ? null : env.getName();
}
}
Itu EnvironmentConverter memperluas StrutsTypeConverter class dan memberi tahu Struts cara mengonversi Environment menjadi String dan sebaliknya dengan mengganti dua metode yaitu convertFromString() dan convertToString().
Sekarang mari kita daftarkan konverter ini sebelum kita menggunakannya dalam aplikasi kita. Ada dua cara untuk mendaftarkan konverter.
Jika konverter hanya akan digunakan dalam tindakan tertentu, maka Anda harus membuat file properti yang perlu dinamai sebagai '[action-class]'converstion.properties.
Dalam kasus kami, kami membuat file bernama SystemDetails-converstion.properties dengan entri pendaftaran berikut -
environment = com.tutorialspoint.struts2.EnvironmentConverter
Dalam contoh di atas, "lingkungan" adalah nama properti di SystemDetails.java kelas dan kami memberi tahu Struts untuk menggunakan EnvironmentConverter untuk mengkonversi ke dan dari properti ini.
Namun, kami tidak akan melakukan ini, Sebaliknya kami akan mendaftarkan konverter ini secara global, sehingga dapat digunakan di seluruh aplikasi. Untuk melakukan ini, buat file properti bernamaxwork-conversion.properties dalam WEBINF/classes folder dengan baris berikut
com.tutorialspoint.struts2.Environment = \
com.tutorialspoint.struts2.EnvironmentConverter
Ini hanya mendaftarkan konverter secara global, jadi Strutsdapat secara otomatis melakukan konversi setiap kali menemukan objek dari jenis Lingkungan. Sekarang, jika Anda mengkompilasi ulang dan menjalankan kembali program tersebut, maka Anda akan mendapatkan hasil yang lebih baik sebagai berikut -
Jelas, sekarang hasilnya akan lebih baik yang berarti konverter Struts kami berfungsi dengan baik.
Ini adalah bagaimana Anda dapat membuat beberapa konverter dan mendaftarkannya untuk digunakan sesuai kebutuhan Anda.
Sebelum memulai tutorial sebenarnya untuk bab ini, mari kita lihat beberapa definisi seperti yang diberikan oleh https://struts.apache.org-
Sr Tidak | Istilah & Deskripsi |
---|---|
1 | TAG Sepotong kecil kode yang dieksekusi dari dalam JSP, FreeMarker, atau Velocity. |
2 | TEMPLATE Sedikit kode, biasanya ditulis dalam FreeMarker, yang dapat dirender oleh tag tertentu (tag HTML). |
3 | THEME Kumpulan templat yang dikemas bersama untuk menyediakan fungsionalitas umum. |
Saya juga menyarankan untuk melalui bab Lokalisasi Struts2 karena kita akan mengambil contoh yang sama sekali lagi untuk melakukan latihan kita.
Saat Anda menggunakan file Struts 2tag seperti <s: submit ...>, <s: textfield ...> dll di halaman web Anda, framework Struts 2 menghasilkan kode HTML dengan gaya dan tata letak yang telah dikonfigurasi sebelumnya. Struts 2 hadir dengan tiga tema bawaan -
Sr Tidak | Tema & Deskripsi |
---|---|
1 | SIMPLE theme Tema minimal tanpa "lonceng dan peluit". Misalnya, tag kolom teks merender tag <input /> HTML tanpa label, validasi, pelaporan kesalahan, atau pemformatan atau fungsi lainnya. |
2 | XHTML theme Ini adalah tema default yang digunakan oleh Struts 2 dan menyediakan semua dasar yang disediakan oleh tema sederhana dan menambahkan beberapa fitur seperti tata letak tabel dua kolom standar untuk HTML, Label untuk setiap HTML, Validasi dan pelaporan kesalahan, dll. |
3 | CSS_XHTML theme Tema ini menyediakan semua dasar yang disediakan oleh tema sederhana dan menambahkan beberapa fitur seperti tata letak berbasis CSS dua kolom standar, menggunakan <div> untuk Tag Struts HTML, Label untuk setiap Tag Struts HTML, ditempatkan sesuai dengan lembar gaya CSS . |
Seperti disebutkan di atas, jika Anda tidak menentukan tema, Struts 2 akan menggunakan tema xhtml secara default. Misalnya, tag pilih Struts 2 ini -
<s:textfield name = "name" label = "Name" />
menghasilkan markup HTML berikut -
<tr>
<td class="tdLabel">
<label for = "empinfo_name" class="label">Name:</label>
</td>
<td>
<input type = "text" name = "name" value = "" id = "empinfo_name"/>
</td>
</tr>
Sini empinfo adalah nama tindakan yang ditentukan dalam file struts.xml.
Memilih Tema
Anda dapat menentukan tema sesuai Struts 2, dasar tag atau Anda dapat menggunakan salah satu metode berikut untuk menentukan tema apa yang harus digunakan Struts 2 -
Atribut tema pada tag tertentu
Atribut tema pada tag yang mengelilingi formulir
Atribut halaman-cakupan bernama "theme"
Atribut cakupan permintaan bernama "theme"
Atribut cakupan sesi bernama "theme"
Atribut cakupan aplikasi bernama "theme"
Properti struts.ui.theme di struts.properties (default-nya ke xhtml)
Berikut adalah sintaks untuk menentukannya di tingkat tag jika Anda ingin menggunakan tema yang berbeda untuk tag yang berbeda -
<s:textfield name = "name" label = "Name" theme="xhtml"/>
Karena tidak terlalu praktis untuk menggunakan tema berdasarkan per tag, jadi kita dapat menentukan aturannya dalam struts.properties file menggunakan tag berikut -
# Standard UI theme
struts.ui.theme = xhtml
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the default template type. Either ftl, vm, or jsp
struts.ui.templateSuffix = ftl
Berikut adalah hasil yang kami ambil dari bab pelokalan di mana kami menggunakan tema default dengan pengaturan struts.ui.theme = xhtml di struts-default.properties file yang datang secara default dalam file struts2-core.xy.z.jar.
Bagaimana Tema Bekerja?
Untuk tema tertentu, setiap tag struts memiliki template terkait seperti s:textfield → text.ftl dan s:password → password.ftl dll.
File template ini dizip dalam file struts2-core.xy.z.jar. File template ini menyimpan tata letak HTML yang telah ditentukan sebelumnya untuk setiap tag.
Lewat sini, Struts 2 framework menghasilkan kode markup HTML akhir menggunakan tag Sturts dan template terkait.
Struts 2 tags + Associated template file = Final HTML markup code.
Template default ditulis dalam FreeMarker dan memiliki ekstensi .ftl.
Anda juga dapat mendesain template Anda menggunakan velocity atau JSP dan karenanya menyetel konfigurasi di struts.properties menggunakan struts.ui.templateSuffix dan struts.ui.templateDir.
Membuat Tema Baru
Cara termudah untuk membuat tema baru adalah dengan menyalin file tema / template yang ada dan melakukan modifikasi yang diperlukan.
Mari kita mulai dengan membuat folder bernama templatedi WebContent / WEBINF / kelas dan sub-folder dengan nama tema baru kami. Misalnya, WebContent / WEB-INF / kelas / template / mitos .
Dari sini, Anda dapat mulai membuat templat dari awal, atau Anda juga dapat menyalin templat dari Struts2 distribution di mana Anda dapat memodifikasinya sesuai kebutuhan di masa mendatang.
Kami akan mengubah template default yang ada xhtmluntuk tujuan pembelajaran. Sekarang, mari kita salin konten dari struts2-core-xyzjar / template / xhtml ke direktori tema kita dan hanya memodifikasi file WebContent / WEBINF / kelas / template / mitos / kontrol .ftl. Saat kita membuka control.ftl yang akan memiliki baris berikut -
<table class="${parameters.cssClass?default('wwFormTable')?html}"<#rt/>
<#if parameters.cssStyle??> style="${parameters.cssStyle?html}"<#rt/>
</#if>
>
Mari kita ubah file di atas control.ftl untuk memiliki konten berikut -
<table style = "border:1px solid black;">
Jika Anda mau memeriksanya form.ftl maka Anda akan menemukannya control.ftldigunakan dalam file ini, tetapi form.ftl merujuk file ini dari tema xhtml. Jadi mari kita ubah sebagai berikut -
<#include "/${parameters.templateDir}/xhtml/form-validate.ftl" />
<#include "/${parameters.templateDir}/simple/form-common.ftl" /> <#if (parameters.validate?default(false))> onreset = "${parameters.onreset?default('clearErrorMessages(this);\
clearErrorLabels(this);')}"
<#else>
<#if parameters.onreset??>
onreset="${parameters.onreset?html}" </#if> </#if> #include "/${parameters.templateDir}/mytheme/control.ftl" />
Saya berasumsi bahwa, Anda tidak akan memiliki banyak pemahaman tentang FreeMarker bahasa template, Anda masih bisa mendapatkan ide bagus tentang apa yang harus dilakukan dengan melihat file .ftl.
Namun, mari kita simpan perubahan di atas, dan kembali ke contoh pelokalan dan buat WebContent/WEB-INF/classes/struts.properties file dengan konten berikut
# Customized them
struts.ui.theme = mytheme
# Directory where theme template resides
struts.ui.templateDir = template
# Sets the template type to ftl.
struts.ui.templateSuffix = ftl
Sekarang setelah perubahan ini, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2. Ini akan menghasilkan layar berikut -
Anda dapat melihat batas di sekitar komponen formulir yang merupakan hasil dari perubahan yang kami lakukan di tema keluar setelah menyalinnya dari tema xhtml. Jika Anda sedikit berusaha mempelajari FreeMarker, maka Anda akan dapat membuat atau memodifikasi tema Anda dengan sangat mudah.
Saya harap sekarang Anda memiliki pemahaman dasar tentang Sturts 2 tema dan templat, bukan?
Strutsmenyediakan cara yang lebih mudah untuk menangani pengecualian yang tidak tertangkap dan mengarahkan pengguna ke halaman kesalahan khusus. Anda dapat dengan mudah mengkonfigurasi Struts agar memiliki halaman kesalahan berbeda untuk pengecualian berbeda.
Struts membuat penanganan pengecualian menjadi mudah dengan menggunakan pencegat "pengecualian". Interceptor "pengecualian" disertakan sebagai bagian dari tumpukan default, jadi Anda tidak perlu melakukan apa pun untuk mengkonfigurasinya. Ini tersedia out-of-the-box siap untuk Anda gunakan.
Mari kita lihat contoh Hello World sederhana dengan beberapa modifikasi pada file HelloWorldAction.java. Di sini, kami sengaja memperkenalkan Pengecualian NullPointer di fileHelloWorldAction kode tindakan.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport{
private String name;
public String execute(){
String x = null;
x = x.substring(0);
return SUCCESS;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Biarkan kami menyimpan konten HelloWorld.jsp sebagai berikut -
<%@ page contentType = "text/html; charset = UTF-8" %>
<%@ taglib prefix = "s" uri = "/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World, <s:property value = "name"/>
</body>
</html>
Berikut ini adalah konten dari index.jsp -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2</h1>
<form action = "hello">
<label for = "name">Please enter your name</label><br/>
<input type = "text" name = "name"/>
<input type = "submit" value = "Say Hello"/>
</form>
</body>
</html>
Anda struts.xml harus terlihat seperti -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
</action>
</package>
</struts>
Sekarang klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Masukkan nilai "Struts2" dan kirimkan halaman tersebut. Anda harus melihat halaman berikut -
Seperti yang ditunjukkan pada contoh di atas, interseptor pengecualian default melakukan pekerjaan yang baik dalam menangani pengecualian.
Mari kita sekarang membuat halaman kesalahan khusus untuk Pengecualian kita. Buat file bernamaError.jsp dengan konten berikut -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
This is my custom error page
</body>
</html>
Sekarang mari kita konfigurasikan Struts untuk menggunakan halaman kesalahan ini jika ada pengecualian. Mari kita memodifikasistruts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<exception-mapping exception = "java.lang.NullPointerException"
result = "error" />
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/Error.jsp</result>
</action>
</package>
</struts>
Seperti yang ditunjukkan pada contoh di atas, sekarang kami telah mengonfigurasi Struts untuk menggunakan Error.jsp khusus untuk NullPointerException. Jika Anda menjalankan kembali program sekarang, Anda sekarang akan melihat output berikut -
Selain itu, kerangka kerja Struts2 dilengkapi dengan pencegat "logging" untuk mencatat pengecualian. Dengan mengaktifkan logger untuk mencatat pengecualian yang tidak tertangkap, kita dapat dengan mudah melihat jejak tumpukan dan mencari tahu apa yang salah
Pemetaan Pengecualian Global
Kami telah melihat bagaimana kami dapat menangani pengecualian khusus tindakan. Kita dapat mengatur pengecualian secara global yang akan diterapkan pada semua tindakan. Misalnya, untuk menangkap pengecualian NullPointerException yang sama, kita bisa menambahkan<global-exception-mappings...> tag di dalam tag <package ...> dan tag <result ...> harus ditambahkan di dalam tag <action ...> di file struts.xml sebagai berikut -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<global-exception-mappings>
<exception-mapping exception = "java.lang.NullPointerException"
result = "error" />
</global-exception-mappings>
<action name = "hello"
class = "com.tutorialspoint.struts2.HelloWorldAction"
method = "execute">
<result name = "success">/HelloWorld.jsp</result>
<result name = "error">/Error.jsp</result>
</action>
</package>
</struts>
Seperti disebutkan sebelumnya, Struts menyediakan dua bentuk konfigurasi. Cara tradisionalnya adalah dengan menggunakanstruts.xmlfile untuk semua konfigurasi. Kami telah melihat begitu banyak contoh di tutorial sejauh ini. Cara lain untuk mengkonfigurasi Struts adalah dengan menggunakan fitur Anotasi Java 5. Dengan menggunakan anotasi struts, kita dapat mencapaiZero Configuration.
Untuk mulai menggunakan anotasi dalam proyek Anda, pastikan Anda telah menyertakan file jar berikut di WebContent/WEB-INF/lib folder -
- struts2-convention-plugin-x.y.z.jar
- asm-x.y.jar
- antlr-x.y.z.jar
- commons-fileupload-x.y.z.jar
- commons-io-x.y.z.jar
- commons-lang-x.y.jar
- commons-logging-x.y.z.jar
- commons-logging-api-x.y.jar
- freemarker-x.y.z.jar
- javassist-.xy.z.GA
- ognl-x.y.z.jar
- struts2-core-x.y.z.jar
- xwork-core.x.y.z.jar
Sekarang, mari kita lihat bagaimana Anda dapat menghapus konfigurasi yang tersedia di file struts.xml mengajukan dan menggantinya dengan annotaions.
Untuk menjelaskan konsep Annotation di Struts2, kita harus mempertimbangkan kembali contoh validasi yang dijelaskan di bab Validasi Struts2 .
Di sini, kami akan mengambil contoh seorang Karyawan yang namanya, usianya akan dicatat menggunakan halaman sederhana, dan kami akan menempatkan dua validasi untuk memastikan bahwa ÜSER selalu memasukkan nama dan usia harus antara 28 dan 65.
Mari kita mulai dengan halaman JSP utama dari contoh tersebut.
Buat Halaman Utama
Mari kita tulis file JSP halaman utama index.jsp, yang digunakan untuk mengumpulkan informasi terkait Karyawan yang disebutkan di atas.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Employee Form</title>
</head>
<body>
<s:form action = "empinfo" method = "post">
<s:textfield name = "name" label = "Name" size = "20" />
<s:textfield name = "age" label = "Age" size = "20" />
<s:submit name = "submit" label = "Submit" align="center" />
</s:form>
</body>
</html>
Index.jsp menggunakan tag Struts, yang belum kita bahas tetapi kita akan mempelajarinya di bab terkait tag. Tapi untuk saat ini, anggap saja tag s: textfield mencetak kolom input, dan s: submit mencetak tombol kirim. Kami telah menggunakan properti label untuk setiap tag yang membuat label untuk setiap tag.
Buat Tampilan
Kami akan menggunakan file JSP success.jsp yang akan dipanggil jika tindakan yang ditentukan kembali SUCCESS.
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Success</title>
</head>
<body>
Employee Information is captured successfully.
</body>
</html>
Buat Tindakan
Di sinilah anotasi digunakan. Mari kita definisikan ulang kelas tindakanEmployee dengan anotasi, lalu tambahkan metode yang disebut validate () seperti yang ditunjukkan di bawah ini Employee.javamengajukan. Pastikan bahwa kelas tindakan Anda memperluasActionSupport kelas, jika metode validasi Anda tidak akan dijalankan.
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.validator.annotations.*;
@Results({
@Result(name = "success", Location = "/success.jsp"),
@Result(name = "input", Location = "/index.jsp")
})
public class Employee extends ActionSupport {
private String name;
private int age;
@Action(value = "/empinfo")
public String execute() {
return SUCCESS;
}
@RequiredFieldValidator( message = "The name is required" )
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@IntRangeFieldValidator(message = "Age must be in between 28 and 65", min = "29", max = "65")
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Kami telah menggunakan beberapa anotasi dalam contoh ini. Biarkan saya membahasnya satu per satu -
Pertama, kami menyertakan file Resultsanotasi. A Anotasi hasil adalah kumpulan hasil.
Di bawah anotasi hasil, kami memiliki dua anotasi hasil. Hasil anotasi memilikinameyang sesuai dengan hasil dari metode eksekusi. Mereka juga berisi lokasi di mana tampilan harus disajikan sesuai dengan nilai yang dikembalikan dari eksekusi ()
Anotasi berikutnya adalah Actionanotasi. Ini digunakan untuk menghias metode execute (). Metode Tindakan juga mengambil nilai yang merupakan URL tempat tindakan tersebut dipanggil.
Akhirnya, saya telah menggunakan dua validationpenjelasan. Saya telah mengonfigurasi validator bidang yang diperlukanname bidang dan validator kisaran integer pada agebidang. Saya juga telah menentukan pesan khusus untuk validasi.
File Konfigurasi
Kami benar-benar tidak membutuhkannya struts.xml file konfigurasi, jadi mari kita hapus file ini dan biarkan kami memeriksa konten web.xml file -
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
<init-param>
<param-name>struts.devMode</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/index.jsp. Ini akan menghasilkan layar berikut -
Sekarang jangan masukkan informasi yang diperlukan, cukup klik Submittombol. Anda akan melihat hasil sebagai berikut -
Masukkan informasi yang diperlukan tetapi masukkan bidang Dari yang salah, katakanlah nama sebagai "tes" dan usia 30, dan terakhir klik Submittombol. Anda akan melihat hasil sebagai berikut -
Struts 2 Jenis Anotasi
Aplikasi Struts 2 dapat menggunakan anotasi Java 5 sebagai alternatif untuk konfigurasi properti XML dan Java. Anda dapat memeriksa daftar anotasi terpenting yang terkait dengan berbagai kategori -
Struts 2 Jenis Anotasi .
Tag Struts 2 memiliki sekumpulan tag yang memudahkan untuk mengontrol aliran eksekusi halaman.
Berikut adalah daftar Tag Kontrol Struts 2 yang penting -
Tag If dan Else
Tag ini menjalankan aliran kondisi dasar yang ditemukan di setiap bahasa.
'If' tag digunakan dengan sendirinya atau dengan 'Else If' Tag dan / atau satu / beberapa 'Else' Tag seperti yang ditunjukkan di bawah ini -
<s:if test = "%{false}">
<div>Will Not Be Executed</div>
</s:if>
<s:elseif test = "%{true}">
<div>Will Be Executed</div>
</s:elseif>
<s:else>
<div>Will Not Be Executed</div>
</s:else>
Periksa Contoh Rinci
Tag Iterator
Ini iteratorakan mengulangi suatu nilai. Nilai yang dapat diulang dapat berupa file itherjava.util.Collection atau java.util.Iterator. Saat melakukan iterasi melalui iterator, Anda dapat menggunakanSort tag untuk mengurutkan hasil atau SubSet tag untuk mendapatkan sub set daftar atau larik.
Contoh berikut mengambil nilai metode getDays () dari objek saat ini pada tumpukan nilai dan menggunakannya untuk mengulang.
Tag <s: property /> mencetak nilai iterator saat ini.
<s:iterator value = "days">
<p>day is: <s:property/></p>
</s:iterator>
Periksa Contoh Rinci
Gabung Tag
Ini merge tag mengambil dua atau lebih daftar sebagai parameter dan menggabungkan semuanya seperti yang ditunjukkan di bawah ini -
<s:merge var = "myMergedIterator">
<s:param value = "%{myList1}" />
<s:param value = "%{myList2}" />
<s:param value = "%{myList3}" />
</s:merge>
<s:iterator value = "%{#myMergedIterator}">
<s:property />
</s:iterator>
Periksa Contoh Rinci
Tambahkan Tag
Ini append tag mengambil dua atau lebih daftar sebagai parameter dan menambahkan semuanya bersama-sama seperti yang ditunjukkan di bawah ini -
<s:append var = "myAppendIterator">
<s:param value = "%{myList1}" />
<s:param value = "%{myList2}" />
<s:param value = "%{myList3}" />
</s:append>
<s:iterator value = "%{#myAppendIterator}">
<s:property />
</s:iterator>
Periksa Contoh Rinci
Tag Generator
Ini generatortag menghasilkan iterator berdasarkan atribut val yang disediakan. Tag generator berikut menghasilkan iterator dan mencetaknya menggunakan tag iterator.
<s:generator val = "%{'aaa,bbb,ccc,ddd,eee'}">
<s:iterator>
<s:property /><br/>
</s:iterator>
</s:generator>
Periksa Contoh Rinci
Struts 2 data tagsdigunakan terutama untuk memanipulasi data yang ditampilkan di halaman. Di bawah ini adalah daftar tag data penting: <Mulai di sini>
Tag Tindakan
Tag ini memungkinkan pengembang untuk memanggil tindakan langsung dari halaman JSP dengan menentukan nama tindakan dan namespace opsional. Isi tubuh dari tag digunakan untuk merender hasil dari Action. Prosesor hasil apa pun yang ditentukan untuk tindakan ini di struts.xml akan diabaikan, kecuali parameter executeResult ditentukan.
<div>Tag to execute the action</div>
<br />
<s:action name = "actionTagAction" executeresult = "true" />
<br />
<div>To invokes special method in action class</div>
<br />
<s:action name = "actionTagAction!specialMethod" executeresult = "true" />
Periksa Contoh Rinci
Sertakan Tag
Ini include akan digunakan untuk menyertakan file JSP di halaman JSP lain.
<-- First Syntax -->
<s:include value = "myJsp.jsp" />
<-- Second Syntax -->
<s:include value = "myJsp.jsp">
<s:param name = "param1" value = "value2" />
<s:param name = "param2" value = "value2" />
</s:include>
<-- Third Syntax -->
<s:include value = "myJsp.jsp">
<s:param name = "param1">value1</s:param>
<s:param name = "param2">value2</s:param>
</s:include>
Periksa Contoh Rinci
Tag Kacang
Ini beantag membuat instance kelas yang sesuai dengan spesifikasi JavaBeans. Tag ini memiliki badan yang dapat berisi sejumlah elemen Param untuk menyetel metode mutator apa pun pada kelas itu. Jika atribut var disetel pada BeanTag, itu akan menempatkan kacang yang dipakai ke dalam Konteks tumpukan.
<s:bean name = "org.apache.struts2.util.Counter" var = "counter">
<s:param name = "first" value = "20"/>
<s:param name = "last" value = "25" />
</s:bean>
Periksa Contoh Rinci
Tag Tanggal
Ini datetag akan memungkinkan Anda untuk memformat Tanggal dengan cara yang cepat dan mudah. Anda dapat menentukan format ubahsuaian (mis. "Hh / MM / tttt jj: mm"), Anda dapat membuat notasi yang mudah dibaca (seperti "dalam 2 jam, 14 menit"), atau Anda dapat kembali ke format yang telah ditentukan sebelumnya dengan kunci 'struts.date.format' di file properti Anda.
<s:date name = "person.birthday" format = "dd/MM/yyyy" />
<s:date name = "person.birthday" format = "%{getText('some.i18n.key')}" />
<s:date name = "person.birthday" nice="true" />
<s:date name = "person.birthday" />
Periksa Contoh Rinci
Tag Param
Ini paramtag dapat digunakan untuk membuat parameter tag lainnya. Tag ini memiliki dua parameter berikut.
name (String) - nama parameter
nilai (Objek) - nilai parameter
<pre>
<ui:component>
<ui:param name = "key" value = "[0]"/>
<ui:param name = "value" value = "[1]"/>
<ui:param name = "context" value = "[2]"/>
</ui:component>
</pre>
Periksa Contoh Rinci
Tag Properti
Ini property tag digunakan untuk mendapatkan properti dari sebuah nilai, yang akan menjadi default di bagian atas tumpukan jika tidak ada yang ditentukan.
<s:push value = "myBean">
<!-- Example 1: -->
<s:property value = "myBeanProperty" />
<!-- Example 2: -->TextUtils
<s:property value = "myBeanProperty" default = "a default value" />
</s:push>
Periksa Contoh Rinci
Tag Dorong
Ini push tag digunakan untuk mendorong nilai pada tumpukan untuk penggunaan yang disederhanakan.
<s:push value = "user">
<s:propery value = "firstName" />
<s:propery value = "lastName" />
</s:push>
Periksa Contoh Rinci
Tag Set
Ini settag memberikan nilai ke variabel dalam cakupan tertentu. Ini berguna ketika Anda ingin menetapkan variabel ke ekspresi kompleks dan kemudian mereferensikan variabel itu setiap kali daripada ekspresi kompleks. Cakupan yang tersedia adalahapplication, session, request, page dan action.
<s:set name = "myenv" value = "environment.name"/>
<s:property value = "myenv"/>
Periksa Contoh Rinci
Tag Teks
Ini text tag digunakan untuk membuat pesan teks I18n.
<!-- First Example -->
<s:i18n name = "struts.action.test.i18n.Shop">
<s:text name = "main.title"/>
</s:i18n>
<!-- Second Example -->
<s:text name = "main.title" />
<!-- Third Examlpe -->
<s:text name = "i18n.label.greetings">
<s:param >Mr Smith</s:param>
</s:text>
Periksa Contoh Rinci
Tag URL
Ini url tag digunakan untuk membuat URL.
<-- Example 1 -->
<s:url value = "editGadget.action">
<s:param name = "id" value = "%{selected}" />
</s:url>
<-- Example 2 -->
<s:url action = "editGadget">
<s:param name = "id" value = "%{selected}" />
</s:url>
<-- Example 3-->
<s:url includeParams="get">
<s:param name = "id" value = "%{'22'}" />
</s:url>
Periksa Contoh Rinci
Daftar formtag adalah bagian dari Tag UI Struts. Tag ini membantu dalam rendering antarmuka pengguna yang diperlukan untuk aplikasi web Struts dan dapat dikategorikan ke dalam tiga kategori. Bab ini akan membawa Anda membahas ketiga jenis tag UI -
Tag UI Sederhana
Kami telah menggunakan tag ini dalam contoh kami, kami akan menyikatnya di bab ini. Mari kita lihat tampilan halaman sederhanaemail.jsp dengan beberapa tag UI sederhana -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<s:head/>
<title>Hello World</title>
</head>
<body>
<s:div>Email Form</s:div>
<s:text name = "Please fill in the form below:" />
<s:form action = "hello" method = "post" enctype = "multipart/form-data">
<s:hidden name = "secret" value = "abracadabra"/>
<s:textfield key = "email.from" name = "from" />
<s:password key = "email.password" name = "password" />
<s:textfield key = "email.to" name = "to" />
<s:textfield key = "email.subject" name = "subject" />
<s:textarea key = "email.body" name = "email.body" />
<s:label for = "attachment" value = "Attachment"/>
<s:file name = "attachment" accept = "text/html,text/plain" />
<s:token />
<s:submit key = "submit" />
</s:form>
</body>
</html>
Jika Anda mengetahui HTML, maka semua tag yang digunakan adalah tag HTML yang sangat umum dengan awalan tambahan s:bersama dengan setiap tag dan atribut yang berbeda. Ketika kami menjalankan program di atas, kami mendapatkan antarmuka pengguna berikut asalkan Anda telah menyiapkan pemetaan yang tepat untuk semua kunci yang digunakan.
Seperti yang ditunjukkan, s: head menghasilkan elemen javascript dan stylesheet yang diperlukan untuk aplikasi Struts2.
Selanjutnya, kita memiliki elemen teks s: div dan s:. S: div digunakan untuk membuat elemen HTML Div. Ini berguna untuk orang yang tidak suka menggabungkan tag HTML dan Struts. Bagi orang-orang itu, mereka memiliki pilihan untuk menggunakan s: div untuk merender div.
S: teks seperti yang ditunjukkan digunakan untuk membuat teks di layar.
Selanjutnya kita memiliki famiilar s: tag form. Tag s: form memiliki atribut tindakan yang menentukan ke mana harus mengirimkan formulir. Karena kita memiliki elemen file upload dalam form, kita harus mengatur enctype menjadi multipart. Jika tidak, kita bisa membiarkannya kosong.
Di akhir tag formulir, kita memiliki s: submit tag. Ini digunakan untuk mengirimkan formulir. Saat formulir dikirim, semua nilai formulir dikirim ke tindakan yang ditentukan di s: tag form.
Di dalam s: form, kami memiliki atribut tersembunyi yang disebut rahasia. Ini membuat elemen tersembunyi di HTML. Dalam kasus kami, elemen "rahasia" memiliki nilai "abrakadabra". Elemen ini tidak terlihat oleh pengguna akhir dan digunakan untuk membawa status dari satu tampilan ke tampilan lain.
Selanjutnya kita memiliki tag s: label, s: textfield, s: password dan s: textarea. Ini digunakan untuk membuat label, bidang input, kata sandi dan area teks masing-masing. Kami telah melihat ini beraksi dalam contoh "Struts - Mengirim Email".
Hal penting yang perlu diperhatikan di sini adalah penggunaan atribut "key". Atribut "key" digunakan untuk mengambil label untuk kontrol ini dari file properti. Kami telah membahas fitur ini di Struts2 Localization, bab internasionalisasi.
Kemudian, kita memiliki tag s: file yang menampilkan komponen upload file input. Komponen ini memungkinkan pengguna untuk mengunggah file. Dalam contoh ini, kami telah menggunakan parameter "accept" dari tag s: file untuk menentukan jenis file mana yang diizinkan untuk diunggah.
Akhirnya kami memiliki s: token tag. Tag token menghasilkan token unik yang digunakan untuk mengetahui apakah formulir telah dikirim ganda
Saat formulir dirender, variabel tersembunyi ditempatkan sebagai nilai token. Katakanlah, misalnya tokennya adalah "ABC". Saat formulir ini dikirimkan, Struts Fitler memeriksa token terhadap token yang disimpan dalam sesi. Jika cocok, itu menghapus token dari sesi. Sekarang, jika formulir tidak sengaja dikirim ulang (baik dengan menyegarkan atau dengan menekan tombol kembali browser), formulir akan dikirim ulang dengan "ABC" sebagai token. Dalam kasus ini, filter memeriksa kembali token terhadap token yang disimpan dalam sesi. Tetapi karena token "ABC" telah dihapus dari sesi, itu tidak akan cocok dan filter Struts akan menolak permintaan tersebut.
Tag UI Grup
Tag UI grup digunakan untuk membuat tombol radio dan kotak centang. Mari kita lihat tampilan halaman sederhanaHelloWorld.jsp dengan kotak centang dan tag tombol radio -
<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
</head>
<body>
<s:form action = "hello.action">
<s:radio label = "Gender" name = "gender" list="{'male','female'}" />
<s:checkboxlist label = "Hobbies" name = "hobbies"
list = "{'sports','tv','shopping'}" />
</s:form>
</body>
</html>
Ketika kami menjalankan program di atas, output kami akan terlihat seperti berikut -
Mari kita lihat contohnya sekarang. Pada contoh pertama, kami membuat tombol radio sederhana dengan label "Gender". Atribut nama wajib untuk tag tombol radio, jadi kami menentukan nama yang "jenis kelamin". Kami kemudian memberikan daftar jenis kelamin. Daftar ini diisi dengan nilai "pria" dan "wanita". Oleh karena itu, dalam output kita mendapatkan tombol radio dengan dua nilai di dalamnya.
Pada contoh kedua, kami membuat daftar kotak centang. Ini untuk mengumpulkan hobi pengguna. Pengguna dapat memiliki lebih dari satu hobi dan oleh karena itu kami menggunakan kotak centang, bukan tombol radio. Kotak centang diisi dengan daftar "olahraga", "TV", dan "Belanja". Ini menampilkan hobi sebagai daftar kotak centang.
Pilih Tag UI
Mari kita jelajahi variasi berbeda dari Select Tag yang ditawarkan oleh Struts. Mari kita lihat tampilan halaman sederhanaHelloWorld.jsp dengan tag pilihan -
<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
</head>
<body>
<s:form action = "login.action">
<s:select name = "username" label = "Username"
list = "{'Mike','John','Smith'}" />
<s:select label = "Company Office" name = "mySelection"
value = "%{'America'}" list="%{#{'America':'America'}}">
<s:optgroup label = "Asia"
list = "%{#{'India':'India','China':'China'}}" />
<s:optgroup label = "Europe"
list="%{#{'UK':'UK','Sweden':'Sweden','Italy':'Italy'}}" />
</s:select>
<s:combobox label = "My Sign" name = "mySign"
list = "#{'aries':'aries','capricorn':'capricorn'}" headerkey = "-1"
headervalue = "--- Please Select ---" emptyOption = "true" value = "capricorn" />
<s:doubleselect label = "Occupation" name = "occupation"
list = "{'Technical','Other'}" doublename = "occupations2"
doubleList="top == 'Technical' ?
{'I.T', 'Hardware'} : {'Accounting', 'H.R'}" />
</s:form>
</body>
</html>
Ketika kami menjalankan program di atas, output kami akan terlihat seperti berikut -
Sekarang mari kita membahas kasus individu, satu per satu.
Pertama, tag pilih membuat kotak pilih HTML. Pada contoh pertama, kami membuat kotak pilih sederhana dengan nama "username" dan label "username". Kotak pilih akan diisi dengan daftar yang berisi nama Mike, John dan Smith.
Pada contoh kedua, perusahaan kami memiliki kantor pusat di Amerika. Ia juga memiliki kantor global di Asia dan Eropa. Kami ingin menampilkan kantor di kotak pilih tetapi kami ingin mengelompokkan kantor global menurut nama benua. Di sinilah optgroup berguna. Kami menggunakan tag s: optgroup untuk membuat grup baru. Kami memberi grup label dan daftar terpisah.
Pada contoh ketiga, kotak kombo digunakan. Kotak kombo adalah kombinasi dari bidang input dan kotak pilih. Pengguna dapat memilih nilai dari kotak pilih dalam hal ini bidang input secara otomatis diisi dengan nilai yang telah dipilih pengguna. Jika pengguna memasukkan nilai secara langsung, tidak ada nilai dari kotak pilih yang akan dipilih.
Dalam contoh kami, kami memiliki kotak kombo yang mencantumkan tanda-tanda matahari. Kotak pilih mencantumkan hanya empat entri yang memungkinkan pengguna untuk mengetikkan tanda matahari jika tidak ada dalam daftar. Kami juga menambahkan entri header ke kotak pilih. Entri header adalah salah satu yang ditampilkan di bagian atas kotak pilih. Dalam kasus kami, kami ingin menampilkan "Silakan Pilih". Jika user tidak memilih apapun, maka kita asumsikan -1 sebagai nilainya. Dalam beberapa kasus, kami tidak ingin pengguna memilih nilai kosong. Dalam kondisi tersebut, seseorang akan menyetel properti "emptyOption" ke false. Akhirnya, dalam contoh kami, kami menyediakan "capricorn" sebagai nilai default untuk kotak kombo.
Dalam contoh keempat, kami memiliki pilihan ganda. Pilih ganda digunakan saat Anda ingin menampilkan dua kotak pilih. Nilai yang dipilih di kotak pilih pertama menentukan apa yang muncul di kotak pilih kedua. Dalam contoh kami, kotak pilih pertama menampilkan "Teknis" dan "Lainnya". Jika pengguna memilih Teknis, kami akan menampilkan IT dan Perangkat Keras di kotak pilih kedua. Jika tidak, kami akan menampilkan Akuntansi dan SDM. Hal ini dimungkinkan dengan menggunakan atribut "list" dan "doubleList" seperti yang ditunjukkan pada contoh.
Dalam contoh di atas, kami melakukan perbandingan untuk melihat apakah kotak pilih atas sama dengan Teknis. Jika ya, maka kami menampilkan IT dan Hardware.
Kita juga perlu memberi nama untuk kotak atas ("name = 'Occupations') dan kotak bawah (doubleName = 'Occupations2')
Struts menggunakan kerangka kerja DOJO untuk implementasi tag AJAX. Pertama-tama, untuk melanjutkan contoh ini, Anda perlu menambahkan struts2-dojo-plugin-2.2.3.jar ke classpath Anda.
Anda bisa mendapatkan file ini dari folder lib unduhan struts2 Anda (C: \ struts-2.2.3all \ struts-2.2.3 \ lib \ struts2-dojo-plugin-2.2.3.jar)
Untuk latihan ini, mari kita ubah HelloWorld.jsp sebagai berikut -
<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<%@ taglib prefix = "sx" uri = "/struts-dojo-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
<sx:head />
</head>
<body>
<s:form>
<sx:autocompleter label = "Favourite Colour"
list = "{'red','green','blue'}" />
<br />
<sx:datetimepicker name = "deliverydate" label = "Delivery Date"
displayformat = "dd/MM/yyyy" />
<br />
<s:url id = "url" value = "/hello.action" />
<sx:div href="%{#url}" delay="2000">
Initial Content
</sx:div>
<br/>
<sx:tabbedpanel id = "tabContainer">
<sx:div label = "Tab 1">Tab 1</sx:div>
<sx:div label = "Tab 2">Tab 2</sx:div>
</sx:tabbedpanel>
</s:form>
</body>
</html>
Ketika kami menjalankan contoh di atas, kami mendapatkan output berikut -
Mari kita lihat contoh ini selangkah demi selangkah.
Hal pertama yang harus diperhatikan adalah penambahan pustaka tag baru dengan awalan sx. Ini (struts-dojo-tags) adalah pustaka tag yang khusus dibuat untuk integrasi ajax.
Kemudian di dalam head HTML kita sebut sx: head. Ini menginisialisasi kerangka dojo dan membuatnya siap untuk semua pemanggilan AJAX di dalam halaman. Langkah ini penting - panggilan ajax Anda tidak akan berfungsi tanpa sx: head diinisialisasi.
Pertama kita memiliki tag pelengkapan otomatis. Tag autocompleter terlihat seperti kotak pilih. Itu diisi dengan nilai merah, hijau dan biru. Tetapi perbedaan antara kotak pilih dan kotak ini adalah bahwa kotak itu selesai secara otomatis. Artinya, jika Anda mulai mengetik gr, maka akan mengisinya dengan "hijau". Selain itu, tag ini sangat mirip dengan tag s: select yang telah kita bahas sebelumnya.
Selanjutnya, kami memiliki pemilih waktu tanggal. Tag ini membuat bidang masukan dengan tombol di sebelahnya. Saat tombol ditekan, pemilih waktu tanggal popup ditampilkan. Ketika pengguna memilih tanggal, tanggal diisi ke dalam teks masukan dalam format yang ditentukan dalam atribut tag. Dalam contoh kami, kami telah menetapkan dd / MM / yyyy sebagai format untuk tanggal.
Selanjutnya kita membuat tag url ke file system.action yang kita buat di latihan sebelumnya. Tidak harus system.action - bisa jadi file tindakan apa pun yang Anda buat sebelumnya. Kemudian kami memiliki div dengan hyperlink disetel ke url dan penundaan disetel ke 2 detik. Yang terjadi ketika Anda menjalankan ini adalah, "Konten Awal" akan ditampilkan selama 2 detik, kemudian konten div akan diganti dengan konten darihello.action eksekusi.
Akhirnya kami memiliki panel tab sederhana dengan dua tab. Tab adalah divs sendiri dengan label Tab 1 dan Tab2.
Perlu dicatat bahwa integrasi tag AJAX di Struts masih dalam proses dan kematangan integrasi ini perlahan-lahan meningkat dengan setiap rilis.
Spring adalah kerangka kerja web populer yang menyediakan integrasi mudah dengan banyak tugas web umum. Jadi pertanyaannya adalah, mengapa kita membutuhkan Spring saat kita memiliki Struts2? Yah, Spring lebih dari sekedar kerangka MVC - ia menawarkan banyak barang lain yang tidak tersedia di Struts.
Misalnya: injeksi ketergantungan yang dapat berguna untuk kerangka kerja apa pun. Dalam bab ini, kita akan melihat contoh sederhana untuk melihat bagaimana mengintegrasikan Spring dan Struts2 secara bersamaan.
Pertama-tama, Anda perlu menambahkan file berikut ke jalur build proyek dari instalasi Spring. Anda dapat mengunduh dan menginstal versi terbaru Spring Framework darihttps://www.springsource.org/download
- org.springframework.asm-x.y.z.M(a).jar
- org.springframework.beans-x.y.z.M(a).jar
- org.springframework.context-x.y.z.M(a).jar
- org.springframework.core-x.y.z.M(a).jar
- org.springframework.expression-x.y.z.M(a).jar
- org.springframework.web-x.y.z.M(a).jar
- org.springframework.web.servlet-x.y.z.M(a).jar
Terakhir tambahkan struts2-spring-plugin-x.y.z.jar di Anda WEB-INF/libdari direktori struts lib Anda. Jika Anda menggunakan Eclipse maka Anda mungkin menghadapi pengecualian java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener .
Untuk memperbaiki masalah ini, Anda harus masuk Markertab dan klik kanan pada dependensi kelas satu per satu dan lakukan Perbaikan cepat untuk mempublikasikan / mengekspor semua dependensi. Terakhir, pastikan tidak ada konflik ketergantungan yang tersedia di bawah tab penanda.
Sekarang mari kita atur web.xml untuk integrasi Struts-Spring 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/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id = "WebApp_ID" version = "3.0">
<display-name>Struts 2</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
Hal penting yang perlu diperhatikan di sini adalah listener yang telah kita konfigurasikan. ItuContextLoaderListenerdiperlukan untuk memuat file konteks pegas. File konfigurasi Spring dipanggilapplicationContext.xml file dan itu harus ditempatkan pada tingkat yang sama dengan web.xml mengajukan
Mari kita buat kelas tindakan sederhana bernama User.java dengan dua properti - firstName dan lastName.
package com.tutorialspoint.struts2;
public class User {
private String firstName;
private String lastName;
public String execute() {
return "success";
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Sekarang mari kita buat applicationContext.xml file konfigurasi musim semi dan buat instance User.javakelas. Seperti yang disebutkan sebelumnya, file ini harus berada di bawah folder WEB-INF -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id = "userClass" class = "com.tutorialspoint.struts2.User">
<property name = "firstName" value = "Michael" />
<property name = "lastName" value = "Jackson" />
</bean>
</beans>
Seperti yang terlihat di atas, kami telah mengkonfigurasi kacang pengguna dan kami telah memasukkan nilainya Michael dan Jacksonke dalam kacang. Kami juga memberi kacang ini nama "userClass", sehingga kami dapat menggunakannya kembali di tempat lain. Selanjutnya mari kita buatUser.jsp di folder WebContent -
<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>Hello World From Struts2 - Spring integration</h1>
<s:form>
<s:textfield name = "firstName" label = "First Name"/><br/>
<s:textfield name = "lastName" label = "Last Name"/><br/>
</s:form>
</body>
</html>
Itu User.jspfile cukup lurus ke depan. Ini hanya melayani satu tujuan - untuk menampilkan nilai nama depan dan nama belakang objek pengguna. Terakhir, mari kita gabungkan semua entitas menggunakanstruts.xml mengajukan.
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "helloworld" extends = "struts-default">
<action name = "user" class="userClass"
method = "execute">
<result name = "success">/User.jsp</result>
</action>
</package>
</struts>
Hal penting yang perlu diperhatikan adalah kami menggunakan id userClassuntuk merujuk ke kelas. Ini berarti bahwa kami menggunakan pegas untuk melakukan injeksi ketergantungan untuk kelas Pengguna.
Sekarang klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/User.jsp. Ini akan menghasilkan layar berikut -
Sekarang kita telah melihat bagaimana menyatukan dua kerangka kerja yang hebat. Ini menyimpulkan bab integrasi Struts - Spring.
Dalam bab ini, mari kita melalui langkah-langkah yang terlibat dalam mengintegrasikan kerangka kerja Tiles dengan Struts2. Apache Tiles adalah kerangka kerangka kerja yang dibangun untuk menyederhanakan pengembangan antarmuka pengguna aplikasi web.
Pertama-tama kita perlu mengunduh file jar tiles dari situs web Apache Tiles . Anda perlu menambahkan file jar berikut ke jalur kelas proyek.
- tiles-api-x.y.z.jar
- tiles-compat-x.y.z.jar
- tiles-core-x.y.z.jar
- tiles-jsp-x.y.z.jar
- tiles-servlet-x.y.z.jar
Sebagai tambahan di atas, kami harus menyalin file jar berikut dari unduhan struts2 di file WEB-INF/lib.
- commons-beanutils-x.y.zjar
- commons-digester-x.y.jar
- struts2-tiles-plugin-x.y.z.jar
Sekarang mari kita atur web.xmluntuk integrasi Struts-Tiles seperti yang diberikan di bawah ini. Ada dua hal penting yang perlu diperhatikan di sini. Pertama, kita perlu memberi tahu tiles, di mana menemukan file konfigurasi tilestiles.xml. Dalam kasus kami, itu akan di bawah/WEB-INFmap. Selanjutnya kita perlu menginisialisasi pendengar Tiles yang disertakan dengan unduhan Struts2.
<?xml version = "1.0" Encoding = "UTF-8"?>
<web-app xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xmlns = "http://java.sun.com/xml/ns/javaee"
xmlns:web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation = "http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id = "WebApp_ID" version = "2.5">
<display-name>Struts2Example15</display-name>
<context-param>
<param-name>
org.apache.tiles.impl.BasicTilesContainer.DEFINITIONS_CONFIG
</param-name>
<param-value>
/WEB-INF/tiles.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.apache.struts2.tiles.StrutsTilesListener
</listener-class>
</listener>
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
Selanjutnya mari kita buat tiles.xml di bawah / folder WEB-INF dengan konten berikut -
<?xml version = "1.0" Encoding = "UTF-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
"-//Apache Software Foundation//DTD Tiles Configuration 2.0//EN"
"http://tiles.apache.org/dtds/tiles-config_2_0.dtd">
<tiles-definitions>
<definition name = "baseLayout" template="/baseLayout.jsp">
<put-attribute name = "title" value = "Template"/>
<put-attribute name = "banner" value = "/banner.jsp"/>
<put-attribute name = "menu" value = "/menu.jsp"/>
<put-attribute name = "body" value = "/body.jsp"/>
<put-attribute name = "footer" value = "/footer.jsp"/>
</definition>
<definition name = "tiger" extends = "baseLayout">
<put-attribute name = "title" value = "Tiger"/>
<put-attribute name = "body" value = "/tiger.jsp"/>
</definition>
<definition name = "lion" extends = "baseLayout">
<put-attribute name = "title" value = "Lion"/>
<put-attribute name = "body" value = "/lion.jsp"/>
</definition>
</tiles-definitions>
Selanjutnya, kami mendefinisikan tata letak kerangka dasar di file baseLayout.jsp. Ini memiliki lima area yang dapat digunakan kembali / diganti. Yaitutitle, banner, menu, body dan footer. Kami memberikan nilai default untuk baseLayout dan kemudian kami membuat dua penyesuaian yang memperluas dari tata letak default. Tata letak macan mirip dengan tata letak dasar, kecuali menggunakantiger.jspsebagai badannya dan teks "Harimau" sebagai judulnya. Demikian pula, tata letak singa mirip dengan tata letak dasar, kecuali menggunakanlion.jsp sebagai badannya dan teks "Singa" sebagai judulnya.
Mari kita lihat file jsp individu. Berikut ini adalah konten daribaseLayout.jsp file -
<%@ taglib uri = "http://tiles.apache.org/tags-tiles" prefix = "tiles"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset = UTF-8">
<title>
<tiles:insertAttribute name = "title" ignore="true" />
</title>
</head>
<body>
<tiles:insertAttribute name = "banner" /><br/>
<hr/>
<tiles:insertAttribute name = "menu" /><br/>
<hr/>
<tiles:insertAttribute name = "body" /><br/>
<hr/>
<tiles:insertAttribute name = "footer" /><br/>
</body>
</html>
Di sini, kami hanya mengumpulkan halaman HTML dasar yang memiliki atribut ubin. Kami memasukkan atribut ubin di tempat-tempat di mana kami membutuhkannya. Selanjutnya, mari kita buat filebanner.jsp file dengan konten berikut -
<img src="http://www.tutorialspoint.com/images/tp-logo.gif"/>
Itu menu.jsp file akan memiliki baris berikut yang merupakan link - ke TigerMenu.action dan aksi struts LionMenu.action.
<%@taglib uri = "/struts-tags" prefix = "s"%>
<a href = "<s:url action = "tigerMenu"/>" Tiger</a><br>
<a href = "<s:url action = "lionMenu"/>" Lion</a><br>
Itu lion.jsp file akan memiliki konten berikut -
<img src="http://upload.wikimedia.org/wikipedia/commons/d/d2/Lion.jpg"/>
The lion
Itu tiger.jsp file akan memiliki konten berikut -
<img src="http://www.freewebs.com/tigerofdarts/tiger.jpg"/>
The tiger
Selanjutnya, mari kita buat file kelas tindakan MenuAction.java yang berisi berikut ini -
package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;
public class MenuAction extends ActionSupport {
public String tiger() { return "tiger"; }
public String lion() { return "lion"; }
}
Ini adalah kelas yang sangat mudah. Kami mendeklarasikan dua metode tiger () dan lion () yang mengembalikan harimau dan singa sebagai hasil masing-masing. Mari kita gabungkan semuanya distruts.xml file -
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name = "default" extends = "struts-default">
<result-types>
<result-type name = "tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name = "*Menu" method = "{1}"
class = "com.tutorialspoint.struts2.MenuAction">
<result name = "tiger" type = "tiles">tiger</result>
<result name = "lion" type = "tiles">lion</result>
</action>
</package>
</struts>
Mari kita periksa apa yang kita lakukan di file di atas. Pertama-tama, kami mendeklarasikan tipe hasil baru yang disebut "ubin" karena kami sekarang menggunakan ubin, bukan jsp biasa untuk teknologi tampilan. Struts2 memiliki dukungannya untuk jenis hasil Tampilan Ubin, jadi kita membuat jenis hasil "ubin" menjadi kelas "org.apache.struts2.view.tiles.TilesResult".
Selanjutnya, kami ingin mengatakan jika permintaan untuk /tigerMenu.action membawa pengguna ke halaman ubin harimau dan jika permintaan untuk /lionMenu.action membawa pengguna ke halaman ubin singa.
Kami mencapai ini dengan menggunakan sedikit ekspresi reguler. Dalam definisi tindakan kami, kami mengatakan apa pun yang cocok dengan pola "* Menu" akan ditangani oleh tindakan ini. Metode pencocokan akan dipanggil di kelas MenuAction. Artinya, tigerMenu.action akan memanggil tiger () dan lionMenu.action akan memanggil lion (). Kami kemudian perlu memetakan hasil dari hasil ke halaman ubin yang sesuai.
Sekarang klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/tigerMenu.jsp. Ini akan menghasilkan layar berikut -
Demikian pula, jika Anda membuka halaman lionMenu.action, Anda akan melihat halaman singa yang menggunakan tata letak ubin yang sama.
Hibernate adalah layanan permintaan dan ketekunan Objek / Relasional berkinerja tinggi yang dilisensikan di bawah GNU Lesser General Public License (LGPL) sumber terbuka dan gratis untuk diunduh. Dalam bab ini. kita akan belajar bagaimana mencapai integrasi Struts 2 dengan Hibernate. Jika Anda tidak terbiasa dengan Hibernate, Anda dapat memeriksa tutorial Hibernate kami .
Pengaturan Database
Untuk tutorial ini, saya akan menggunakan database MySQL "struts2_tutorial". Saya terhubung ke database ini di komputer saya menggunakan nama pengguna "root" dan tanpa kata sandi. Pertama-tama, Anda perlu menjalankan skrip berikut. Skrip ini membuat tabel baru bernamastudent dan membuat beberapa catatan di tabel ini -
CREATE TABLE IF NOT EXISTS `student` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`first_name` varchar(40) NOT NULL,
`last_name` varchar(40) NOT NULL,
`marks` int(11) NOT NULL,
PRIMARY KEY (`id`)
);
--
-- Dumping data for table `student`
--
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(1, 'George', 'Kane', 20);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(2, 'Melissa', 'Michael', 91);
INSERT INTO `student` (`id`, `first_name`, `last_name`, `marks`)
VALUES(3, 'Jessica', 'Drake', 21);
Konfigurasi Hibernasi
Selanjutnya mari kita buat hibernate.cfg.xml yang merupakan file konfigurasi hibernate.
<?xml version = '1.0' encoding = 'utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name = "hibernate.connection.driver_class">c
om.mysql.jdbc.Driver
</property>
<property name = "hibernate.connection.url">
jdbc:mysql://www.tutorialspoint.com/struts_tutorial
</property>
<property name = "hibernate.connection.username">root</property>
<property name = "hibernate.connection.password"></property>
<property name = "hibernate.connection.pool_size">10</property>
<property name = "show_sql">true</property>
<property name = "dialect">
org.hibernate.dialect.MySQLDialect
</property>
<property name = "hibernate.hbm2ddl.auto">update</property>
<mapping class = "com.tutorialspoint.hibernate.Student" />
</session-factory>
</hibernate-configuration>
Mari kita lihat file konfigurasi hibernasi. Pertama, kami menyatakan bahwa kami menggunakan driver MySQL. Kemudian kami mendeklarasikan url jdbc untuk menghubungkan ke database. Kemudian kami menyatakan nama pengguna koneksi, kata sandi dan ukuran kolam. Kami juga menunjukkan bahwa kami ingin melihat SQL di file log dengan mengaktifkan "show_sql" menjadi true. Silakan ikuti tutorial hibernasi untuk memahami apa arti properti ini.
Terakhir, kami menetapkan kelas pemetaan ke com.tutorialspoint.hibernate.Student yang akan kami buat di bab ini.
Penyiapan Lingkungan
Selanjutnya Anda membutuhkan banyak sekali toples untuk proyek ini. Terlampir adalah tangkapan layar dari daftar lengkap file JAR yang diperlukan -
Sebagian besar file JAR dapat diperoleh sebagai bagian dari distribusi struts Anda. Jika Anda memiliki server aplikasi seperti glassfish, websphere atau jboss yang terpasang, Anda bisa mendapatkan sebagian besar file jar yang tersisa dari folder lib appserver. Jika tidak, Anda dapat mengunduh file satu per satu -
File jar hibernasi - Hibernate.org
Struts hibernate plugin - Struts hibernate plugin
File JTA - file JTA
File Dom4j - Dom4j
file log4j - log4j
Sisa file, Anda harus bisa mendapatkan dari distribusi Struts2 Anda.
Kelas Hibernasi
Mari kita sekarang membuat kelas java yang diperlukan untuk integrasi hibernate. Berikut ini adalah konten dariStudent.java -
package com.tutorialspoint.hibernate;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "student")
public class Student {
@Id
@GeneratedValue
private int id;
@Column(name = "last_name")
private String lastName;
@Column(name = "first_name")
private String firstName;
private int marks;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getMarks() {
return marks;
}
public void setMarks(int marks) {
this.marks = marks;
}
}
Ini adalah kelas POJO yang mewakili studenttabel sesuai spesifikasi Hibernate. Ini memiliki properti id, firstName dan lastName yang sesuai dengan nama kolom dari tabel siswa. Selanjutnya mari kita buatStudentDAO.java mengajukan sebagai berikut -
package com.tutorialspoint.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.googlecode.s2hibernate.struts2.plugin.\
annotations.SessionTarget;
import com.googlecode.s2hibernate.struts2.plugin.\
annotations.TransactionTarget;
public class StudentDAO {
@SessionTarget
Session session;
@TransactionTarget
Transaction transaction;
@SuppressWarnings("unchecked")
public List<Student> getStudents() {
List<Student> students = new ArrayList<Student>();
try {
students = session.createQuery("from Student").list();
} catch(Exception e) {
e.printStackTrace();
}
return students;
}
public void addStudent(Student student) {
session.save(student);
}
}
Kelas StudentDAO adalah lapisan akses data untuk kelas Siswa. Ini memiliki metode untuk mendaftar semua siswa dan kemudian menyimpan catatan siswa baru.
Kelas Aksi
File berikut AddStudentAction.javamendefinisikan kelas tindakan kami. Kami memiliki dua metode aksi di sini - eksekusi () dan listStudents (). Metode execute () digunakan untuk menambahkan record siswa baru. Kami menggunakan metode save () dao untuk mencapai ini.
Metode lainnya, listStudents () digunakan untuk membuat daftar siswa. Kami menggunakan metode daftar dao untuk mendapatkan daftar semua siswa.
package com.tutorialspoint.struts2;
import java.util.ArrayList;
import java.util.List;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.tutorialspoint.hibernate.Student;
import com.tutorialspoint.hibernate.StudentDAO;
public class AddStudentAction extends ActionSupport implements ModelDriven<Student> {
Student student = new Student();
List<Student> students = new ArrayList<Student>();
StudentDAO dao = new StudentDAO();
@Override
public Student getModel() {
return student;
}
public String execute() {
dao.addStudent(student);
return "success";
}
public String listStudents() {
students = dao.getStudents();
return "success";
}
public Student getStudent() {
return student;
}
public void setStudent(Student student) {
this.student = student;
}
public List<Student> getStudents() {
return students;
}
public void setStudents(List<Student> students) {
this.students = students;
}
}
Anda akan melihat bahwa kami mengimplementasikan antarmuka ModelDriven. Ini digunakan ketika kelas tindakan Anda berurusan dengan kelas model konkret (seperti Student) sebagai lawan dari properti individu (seperti firstName, lastName). Antarmuka ModelAware mengharuskan Anda untuk mengimplementasikan metode untuk mengembalikan model. Dalam kasus kami, kami mengembalikan objek "siswa".
Buat File Tampilan
Sekarang mari kita buat file student.jsp lihat file dengan konten berikut -
<%@ page contentType = "text/html; charset = UTF-8"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<html>
<head>
<title>Hello World</title>
<s:head />
</head>
<body>
<s:form action = "addStudent">
<s:textfield name = "firstName" label = "First Name"/>
<s:textfield name = "lastName" label = "Last Name"/>
<s:textfield name = "marks" label = "Marks"/>
<s:submit/>
<hr/>
<table>
<tr>
<td>First Name</td>
<td>Last Name</td>
<td>Marks</td>
</tr>
<s:iterator value = "students">
<tr>
<td><s:property value = "firstName"/></td>
<td><s:property value = "lastName"/></td>
<td><s:property value = "marks"/></td>
</tr>
</s:iterator>
</table>
</s:form>
</body>
</html>
Student.jsp cukup mudah. Di bagian atas, kami memiliki formulir yang dikirimkan ke "addStudent.action". Dibutuhkan firstName, lastName, dan marks. Karena tindakan addStudent terkait dengan ModelAware "AddSudentAction", secara otomatis kacang mahasiswa akan dibuat dengan nilai-nilai untuk firstName, lastName dan tanda terisi otomatis.
Di bagian bawah, kita melihat daftar siswa (lihat AddStudentAction.java). Kami mengulangi daftar dan menampilkan nilai untuk nama depan, nama belakang, dan tanda dalam tabel.
Konfigurasi Struts
Mari kita gabungkan semuanya menggunakan struts.xml -
<?xml version = "1.0" Encoding = "UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name = "struts.devMode" value = "true" />
<package name = "myhibernate" extends = "hibernate-default">
<action name = "addStudent" method = "execute"
class = "com.tutorialspoint.struts2.AddStudentAction">
<result name = "success" type = "redirect">
listStudents
</result>
</action>
<action name = "listStudents" method = "listStudents"
class = "com.tutorialspoint.struts2.AddStudentAction">
<result name = "success">/students.jsp</result>
</action>
</package>
</struts>
Hal penting yang perlu diperhatikan di sini adalah bahwa paket "myhibernate" kami memperluas paket default struts2 yang disebut "hibernate-default". Kami kemudian mendeklarasikan dua tindakan - addStudent dan listStudents. addStudent memanggil execute () pada kelas AddStudentAction dan setelah berhasil, ia memanggil metode tindakan listStudents.
Metode tindakan listStudent memanggil listStudents () di kelas AddStudentAction dan menggunakan student.jsp sebagai tampilan.
Sekarang, klik kanan pada nama proyek dan klik Export > WAR Fileuntuk membuat file Perang. Kemudian terapkan WAR ini di direktori webapps Tomcat. Terakhir, jalankan server Tomcat dan coba akses URLhttp://localhost:8080/HelloWorldStruts2/student.jsp. Ini akan menghasilkan layar berikut -
Di bagian atas, kami mendapatkan formulir untuk memasukkan nilai-nilai untuk catatan siswa baru dan bagian bawah mencantumkan siswa dalam database. Lanjutkan dan tambahkan catatan siswa baru dan tekan kirim. Layar akan menyegarkan dan menampilkan daftar yang diperbarui setiap kali Anda mengklik Kirim.