国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Struts2實現CRUD(增 刪 改 查)功能實例代碼

2019-11-26 14:15:24
字體:
來源:轉載
供稿:網友

CRUD是Create(創建)、Read(讀取)、Update(更新)和Delete(刪除)的縮寫,它是普通應用程序的縮影。如果您掌握了某框架的CRUD編寫,那么意味可以使用該框架創建普通應用程序了,所以大家使用新框架開發OLTP(Online Transaction Processing)應用程序時,首先會研究一下如何編寫CRUD。這類似于大家在學習新編程語言時喜歡編寫“Hello World”。

本文旨在講述Struts 2上的CRUD開發,所以為了例子的簡單易懂,我不會花時間在數據庫的操作上。取而代之的是一個模擬數據庫的哈希表(Hash Map)。

具體實現

首先,讓我們看看的“冒牌”的DAO(Data Access Object,數據訪問對象),代碼如下:

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 = new ConcurrentHashMap<String, Book>();data.put("978-0735619678", new Book("978-0735619678", "Code Complete, Second Edition", 32.99));data.put("978-0596007867", new Book("978-0596007867", "The Art of Project Management", 35.96));data.put("978-0201633610", new Book("978-0201633610", "Design Patterns: Elements of Reusable Object-Oriented Software", 43.19));data.put("978-0596527341", new 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();}public Book getBook(String isbn) {return data.get(isbn);}public void storeBook(Book book) {data.put(book.getIsbn(), book);}public void removeBook(String isbn) {data.remove(isbn);}public void removeBooks(String[] isbns) {for(String isbn : isbns) {data.remove(isbn);}}}

清單1 src/tutorial/dao/BookDao.java

以上代碼相信不用解釋大家也清楚,我使用ConcurrentMap數據結構存儲Book對象,這主要是為了方便檢索和保存Book對象;另外,我還將data變量設為靜態唯一來模擬應用程序的數據庫。

接下來是的數據模型Book類,代碼如下:

package tutorial.model;public class Book {private String isbn;private String title;private double price;public Book() { }public Book(String isbn, String title, double price) {this.isbn = isbn;this.title = title;this.price = price;}public String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;} }

清單2 src/tutorial/model/Book.java

Book類有三個屬性isbn,、title和price分別代表書籍的編號、名稱和價格,其中編號用于唯一標識書籍(相當數據庫中的主鍵)。

然后,我們再來看看Action類的代碼:

package tutorial.action;import java.util.Collection;import tutorial.dao.BookDao;import tutorial.model.Book;import com.opensymphony.xwork2.ActionSupport;public class BookAction extends ActionSupport {private static final long serialVersionUID = 872316812305356L;private String isbn;private String[] isbns;private Book book;private Collection<Book> books;private BookDao dao = BookDao.getInstance();public Book getBook() {return book;}public void setBook(Book book) {this.book = book;}public String getIsbn() {return isbn;}public void setIsbn(String isbn) {this.isbn = isbn;}public String[] getIsbns() {return isbns;}public void setIsbns(String[] isbns) {this.isbns = isbns;}public Collection<Book> getBooks() {return books;}public void setBooks(Collection<Book> books) {this.books = books;}public String load() {book = dao.getBook(isbn);return SUCCESS;}public String list() {books = dao.getBooks();return SUCCESS;}public String store() {dao.storeBook(book);return SUCCESS;}public String remove() {if(null != isbn) {dao.removeBook(isbn);} else {dao.removeBooks(isbns);}return SUCCESS;}}

清單3 src/tutorial/action/BookAction.java

BookAction類中屬性isbn用于表示待編輯或刪除的書籍的編號,屬性isbns用于表示多個待刪除的書籍的編號數組,屬性book表示當前書籍,屬性books則表示當前的書籍列表。BookAction有四個Action方法分別是load、list、store和remove,也即是CRUD都集中在BookAction中實現。

再下來是Action的配置代碼:

<?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><package name="Struts2_CRUD_DEMO" extends="struts-default" namespace="/Book"><action name="List" class="tutorial.action.BookAction" method="list"><result>List.jsp</result></action><action name="Edit" class="tutorial.action.BookAction" method="load"><result>Edit.jsp</result></action><action name="Store" class="tutorial.action.BookAction" method="store"><result type="redirect">List.action</result></action><action name="Remove" class="tutorial.action.BookAction" method="remove"><result type="redirect">List.action</result></action></package></struts>

清單4 src/struts.xml

以上的配置中,我使用了四個Action定義。它們都在“/Book”名值空間內。這樣我就可以分別通過“http://localhost:8080/Struts2_CRUD/Book/List.action”、“http://localhost:8080/Struts2_CRUD/Book/Edit.action”、“http://localhost:8080/Struts2_CRUD/Book/Store.action”和“http://localhost:8080/Struts2_CRUD/Book/Remove.action”來調用BookAction的四個Action方法進行CRUD操作。當然,這只是個人喜好,你大可以只定義一個Action(假設其名稱為“Book”),之后通過“http://localhost:8080/Struts2_CRUD/Book!list.action”的方式來訪問,詳細做法請參考《Struts 2.0的Action講解》。另外,我由于希望在完成編輯或刪除之后回到列表頁,所以使用類型為redirect(重定向)的result。

下面是列表頁面的代碼:

<%@ 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 List</title><style type="text/css">table {border: 1px solid black;border-collapse: collapse;}table thead tr th {border: 1px solid black;padding: 3px;background-color: #cccccc;}table tbody tr td {border: 1px solid black;padding: 3px;}</style></head><body> <h2>Book List</h2><s:form action="Remove" theme="simple"><table cellspacing="0"><thead><tr><th>Select</th><th>ISBN</th><th>Title</th><th>Price</th><th>Operation</th></tr></thead><tbody><s:iterator value="books"><tr><td><input type="checkbox" name="isbns" value='<s:property value="isbn" />' /></td><td><s:property value="isbn" /></td><td><s:property value="title" /></td><td>$<s:property value="price" /></td><td><a href='<s:url action="Edit"><s:param name="isbn" value="isbn" /></s:url>'>Edit</a> <a href='<s:url action="Remove"><s:param name="isbn" value="isbn" /></s:url>'>Delete</a></td></tr></s:iterator></tbody></table><s:submit value="Remove" /><a href="Edit.jsp">Add Book</a></s:form> </body></html>

清單5 WebContent/Book/List.jsp

以上代碼,值得注意的是在<s:form>標簽,我設置了theme屬性為“simple”,這樣可以取消其默認的表格布局。之前,有些朋友問我“如果不希望提交按鈕放在右邊應該怎樣做?”,上述做汗是答案之一。當然,更佳的做法自定義一個theme,并將其設為默認應用到整個站點,如此一來就可以得到統一的站點風格。我會在以后的文章中會對此作詳細的描述。

編輯或添加書籍的頁面代碼如下:

<%@ 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 == book">Add Book</s:if><s:else>Edit Book</s:else></h2><s:form action="Store" ><s:textfield name="book.isbn" label="ISBN" /><s:textfield name="book.title" label="Title" /><s:textfield name="book.price" label="Price" /><s:submit /></s:form></body></html>

清單6 WebContent/Book/Edit.jsp

如果book為null,則表明該頁面用于添加書籍,反之則為編輯頁面。

為了方便大家運行示例,我把web.xml的代碼也貼出來,如下:

<?xml version="1.0" encoding="UTF-8"?><web-app id="WebApp_9" version="2.4"xmlns="http://java.sun.com/xml/ns/j2ee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"><display-name>Struts 2 Fileupload</display-name><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><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list></web-app>

清單7 WebContent/WEB-INF/web.xml

大功告成,下面發布運行應用程序,在瀏覽器中鍵入:http://localhost:8080/Struts2_CRUD/Book/List.action,出現如下圖所示頁面:

清單8 列表頁面

點擊“Add Book”,出現如下圖所示頁面:

清單9 添加書籍頁面

后退回到列表頁面,點擊“Edit”,出現如下圖所示頁面:

清單10 編輯書籍頁面

總結

本文只是粗略地了介紹Struts 2的CRUD實現方法,所以有很多功能沒有實現,如國際化和數據校驗等。大家可以在上面例子的基礎將其完善,當作練習也不錯。有不明白的地方歡迎給我留言,小編會及時回復大家的,在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 民勤县| 阳信县| 洛隆县| 深州市| 隆安县| 锦州市| 肃北| 玉林市| 榕江县| 崇明县| 牟定县| 鸡泽县| 宁强县| 西充县| 双城市| 环江| 新宁县| 罗定市| 乾安县| 灵武市| 榆树市| 重庆市| 丹巴县| 中西区| 鹿邑县| 砚山县| 安新县| 农安县| 乐山市| 西充县| 淄博市| 长寿区| 宁国市| 建昌县| 广灵县| 铜梁县| 越西县| 六枝特区| 亚东县| 六枝特区| 炎陵县|