CRUD adalah singkatan dari membuat, membaca, memperbarui, dan menghapus, dan itu adalah mikrokosmos dari aplikasi biasa. Jika Anda menguasai penulisan kerangka kerja yang kasar, itu berarti Anda dapat menggunakan kerangka kerja untuk membuat aplikasi biasa. Oleh karena itu, ketika Anda menggunakan kerangka kerja baru untuk mengembangkan aplikasi OLTP (Pemrosesan Transaksi Online), Anda pertama -tama akan mempelajari cara menulis CRUD. Ini mirip dengan cara orang suka menulis "Hello World" saat belajar bahasa pemrograman baru.
Artikel ini dimaksudkan untuk menggambarkan pengembangan CRUD pada Struts 2, jadi demi kesederhanaan dan kemudahan pemahaman, saya tidak akan menghabiskan waktu dalam operasi basis data. Sebaliknya, tabel hash (peta hash) yang mensimulasikan database.
Implementasi spesifik
Pertama, mari kita lihat DAO "palsu" (objek akses data, objek akses data), kodenya adalah sebagai berikut:
package tutorial.dao;import java.util.Collection;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentMap;import tutorial.model.Book;public class BookDao {private static final BookDao instance;private static final ConcurrentMap<String, Book> data;static {instance = new Bookdao (); data = concurrentHashMap baru <string, book> (); data.put ("978-0735619678", buku baru ("978-0735619678", "Code Lengkap, Edisi Kedua", 32.99)); Data.put ("978-0596600" (32.99))); Data ("978-05969678" ")); Buku ("978-0596007867", "The Art of Project Management", 35.96)); data.put ("978-0201633610", buku baru ("978-0201633610", "Pola Desain: Pola Data." 978 (Data.19.19.19.199, "DATA (43.19, Book("978-0596527341", "Information Architecture for the World Wide Web: Designing Large-Scale Web Sites", 25.19));data.put("978-0735605350", new Book("978-0735605350", "Software Estimation: Demystifying the Black Art", 25.19));}private BookDao() {} public static bookdao getInstance () {return instance;} public collection <book> getBooks () {return data.values ();} buku publik getBook (string isbn) {return data.get (isbn);} public void storebook (buku buku) {data.put (book.getisbn); {data.remove (ISBN);} public void Remebooks (String [] isBn) {for (String ISBN: ISBN) {data.remove (ISBN);}}}Listing 1 SRC/Tutorial/Dao/Bookdao.java
Saya percaya bahwa tidak ada penjelasan yang diperlukan untuk kode di atas. Saya menggunakan struktur data ConcurrentMap untuk menyimpan objek buku, yang terutama untuk memfasilitasi pengambilan dan penyimpanan objek buku; Selain itu, saya juga mengatur variabel data menjadi unik secara statis untuk mensimulasikan database aplikasi.
Berikutnya adalah kelas buku model data, kodenya adalah sebagai berikut:
Paket tutorial.model; buku kelas publik {private string isbn; judul string pribadi; harga ganda pribadi; buku publik () {} buku publik (string isbn, judul string, harga ganda) {this.isbn = isbn; this.title = title; this.price = harga;} public string getisbn () {return isbn; this.price = price;} public string getisbn () {return isbn; isbn;} public double getPrice () {return price;} public void setPrice (harga ganda) {this.price = harga;} public string getTitle () {return title;} public void setTitle (string title) {this.title = title;}}Listing 2 SRC/Tutorial/Model/Book.java
Kelas buku memiliki tiga atribut: ISBN, judul dan harga masing -masing mewakili angka, nama, dan harga buku. Jumlahnya digunakan untuk mengidentifikasi buku secara unik (setara dengan kunci utama dalam database).
Kemudian, mari kita lihat kode kelas tindakan:
Paket tutorial.action; impor java.util.collection; impor tutorial.dao.bookdao; impor tutorial.model.book; import com.opensymphony.xwork2.actionsupport; bookaction kelas publik memperluas actionsupport {private static final serialversionuid = 872316812305356 piver private; private non -string; 8723168812305356. {private static SerialVersionuid = 872316812305356 SERIALVERSI PRIVATE = 872316812305356666666666 Koleksi <Book> buku; bookdao pribadi dao = bookdao.getInstance (); buku publik getBook () {return book;} public void setbook (buku buku) {this.book = buku;} public string getisbn () {return isbn;} public void setisbn (string isbn) {this. isbn;} public void setisbnns (string [] isbnns) {this.isbns = isBnns;} koleksi publik <book> getBooks () {return books;} public void setBooks (koleksi <book> buku) {this.Books = books;} public string load () {book = dao (buku) {this.Books = books;} public string load () {book = dao (buku) {this.Books = books;} public string load () {book = dao (BUKU) {this.Books = BUKU; dao.getBooks (); return success;} public string store () {dao.storebook (buku); return success;} public string remove () {if (null! = isbn) {dao.removebook (isbn);} else {dao.removebooks (isbns);} return success;Listing 3 SRC/Tutorial/Action/Bookaction.java
Di kelas BookAction, atribut ISBN digunakan untuk mewakili jumlah buku yang akan diedit atau dihapus, atribut ISBNS digunakan untuk mewakili angka angka buku yang akan dihapus, buku atribut mewakili buku saat ini, dan buku atribut mewakili daftar buku saat ini. BookAction memiliki empat metode tindakan, memuat, daftar, menyimpan dan menghapus, yaitu, crud semuanya diimplementasikan dalam BookAction.
Berikutnya adalah kode konfigurasi 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"> <pruts> <pingruts = "pangkas =" "" "" ""> <pakat = "struts> <dtds2_cruts2 extends = "struts-default" namespace = "/book"> <action name = "list" method = "list"> <rances> list.jsp </rence> </cich> <action name = "edit" method = "load"> <Rance> edit.jsp </hasilnya type = "redirect"> list.action </result> </chere> </ action> <action name = "ramping" method = "reveed"> <result type = "redirect"> list.action </result> </action> </package> </struts>
Daftar 4 SRC/Struts.xml
Dalam konfigurasi di atas, saya menggunakan empat definisi tindakan. Mereka semua berada dalam namespace "/buku". Dengan cara ini, saya dapat memanggil empat metode aksi bookaction untuk operasi crud oleh "http: // localhost: 8080/struts2_crud/book/list.action", "http: // localhost: 8080/struts2_crud/book/edit.action", "http: // 8080/struts2_crud/book/edit.action", "http://poords2.108080 "http: // localhost: 8080/struts2_crud/book/remeid.action". Tentu saja, ini hanya preferensi pribadi. Anda hanya dapat mendefinisikan suatu tindakan (dengan asumsi namanya adalah "buku"), dan kemudian mengaksesnya melalui "http: // localhost: 8080/struts2_crud/book! List.action". Untuk detailnya, silakan merujuk ke "Penjelasan Tindakan Struts 2.0". Juga, saya menggunakan hasil pengalihan jenis (pengalihan) karena saya ingin kembali ke halaman daftar setelah menyelesaikan pengeditan atau penghapusan.
Berikut ini kode untuk halaman daftar:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd"><html xmlns =" http://www.w3.org/1999/xhtml "> <head> </tnels =" TABLE/TACKS = "TABLY> </TACKS =" TABLE/TACKS = "TABLY> </xhtml"> </tnels = " solid black; border-collapse: collapse;} tabel itu tre tr th {border: 1px solid black; padding: 3px; latar belakang-warna: #cccccc;} tabel tbody td {border: 1px solid black; padding: 3px;} </tyle> </head "<body> <h2> daftar buku </h2> </style =" THOME "</head" <body> <h2> Daftar buku </h2> </smf: forming = "THOME =" THOME = <h2> Daftar Buku </h2> </ste: forming = "THOME =" THOME "THOME" THOME "THOME" THOME "THOME" THOME = CellPacing = "0"> <Thead> <tr> <th> SELECT </th> <t th> ISBN </TH> <TH> JUDUL </t> <TH> Harga </th> <TH> Operasi </th> </tr> </podead> <tpody> <sh "name =" Buku "> </TR> <TD> <TBody =" name centang = "Buku"> <TR> <TD> <TBody = "name Buku =" value = "isbn" /> ' /> </td> <td> <s: value properti = "isbn" /> /> </td> <td> $ <s: nilai properti = "harga" /> </td> <td> <a href =' <s: URL Action = "Edit"> <tdo Param = " /> </s: url> '> Edit </a> <a href =' <s: url action = "ramping"> <s: param name = "isbn" value = "isbn"/> </s: url> '> delete </a> </td> </tr> </s: iterator> </tbody> </tode = "sm/ttr> </tr> </s: iterator> </tbody> </tode =" smo "save" </tr> </s: iterator> </tbody> </tode = "smP: sm: sm: iTerator> </tbody> </tbody> </td" href = "edit.jsp"> Tambahkan buku </a> </s: form> </body> </html>Listing 5 WebContent/Book/List.jsp
Dalam kode di atas, perlu dicatat bahwa dalam tag <S: Form>, saya mengatur properti tema menjadi "sederhana", sehingga dapat membatalkan tata letak tabel defaultnya. Sebelumnya, beberapa teman bertanya kepada saya, "Apa yang harus saya lakukan jika saya tidak ingin tombol kirim ditempatkan di sebelah kanan?" Keringat di atas adalah salah satu jawabannya. Tentu saja, lebih baik untuk menyesuaikan tema dan menerapkannya ke seluruh situs secara default, sehingga Anda bisa mendapatkan gaya situs terpadu. Saya akan menjelaskan ini secara rinci dalam artikel mendatang.
Kode halaman untuk mengedit atau menambahkan buku adalah sebagai berikut:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %><%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><title>Book</title></head><body> <h2><s:if test="null == BUKU "> Tambahkan buku </s: if> <s: else> Edit Buku </s: else> </h2> <s: formule action =" store "> <s: TextField name =" book.isbn "label =" isbn " /> <s: namefield =" book.title "label =" title " /<s: sm: textfield =" books = "book." /> </s: Form> </body> </html>
Listing 6 WebContent/Book/Edit.jsp
Jika buku ini null, itu berarti halaman tersebut digunakan untuk menambahkan buku, dan sebaliknya adalah halaman edit.
Untuk memfasilitasi semua orang untuk menjalankan contoh, saya juga memposting kode web.xml, sebagai berikut:
<? Xml Version = "1.0" encoding = "UTF-8"?> <web-app id = "webapp_9" Versi = "2.4" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalocation = "htttp:n http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>struts 2 FileUpload </play-name> <nilter> <nilter-name> struts2 </tiler-name> <nilter-class> org.apache.struts2.dispatcher.filterdispatcher </filter-class> </filter> <nilter-mapping> <filter-name> struts2 </tilter-name> <roRl-pattern>/*</ruRl-pattern> </tiler-Mapping> <creendak-file-list> <creendak-file> index.html </welcome-file> </celcome-file-list> </web-app>
Listing 7 WebContent/Web-Inf/Web.xml
Tugas selesai, berikut ini diterbitkan untuk menjalankan aplikasi, ketik: http: // localhost: 8080/struts2_crud/book/list.action di browser, dan halaman yang ditunjukkan pada gambar di bawah ini muncul:
Daftar 8 Halaman Daftar
Klik "Tambah Buku" dan halaman yang ditunjukkan pada gambar di bawah ini muncul:
Daftar 9 Tambahkan Halaman Buku
Kembali ke halaman daftar dan klik "Edit", dan halaman yang ditunjukkan pada gambar di bawah ini muncul:
Listing 10 Edit Buku Halaman
Meringkaskan
Artikel ini hanya secara singkat memperkenalkan metode implementasi CRUD dari Struts 2, sehingga banyak fungsi yang tidak diimplementasikan, seperti internasionalisasi dan verifikasi data. Anda dapat memperbaikinya berdasarkan contoh di atas, dan juga baik untuk berlatih. Jika Anda tidak mengerti, silakan tinggalkan saya pesan. Editor akan membalas semua orang tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin Network!