读书人

转 Struts2+Spring2+Hibernate3 图书治

发布时间: 2012-06-27 14:20:08 作者: rapoo

转 Struts2+Spring2+Hibernate3 图书管理

这篇文章是从网友http://www.blogjava.net/sterning/archive/2007/09/30/149775.html转来的,
他真是一位大好人,虽然在别的网站有很多转走的这篇文章,但我也想在自己的BLOG上再转一次,
理由很简单,想自己收藏一份,感谢原创sterning

Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:MVC 2模型的使用、功能齐全的标志库(Tag Library)、开放源代码。而Spring的出现,在某些方面极大的方面了Struts的开发。同时,Hibernate作为对象持久化的框架,能显示的提高软件开发的效率与生产力。这三种流行框架的整合应用,可以发挥它们各自的优势,使软件开发更加的快速与便捷。

struts2发布已经很久了,但关于如何使用它的教程及实例并不多。特别是与Spring及Hibernate等流行框架的集成,并不多见。现在就将笔者使用Myeclipse工具应用struts2 + spring2 + hibernate3?实现CRUD操作的步骤一一纪录下来,为初学者少走弯路略尽绵薄之力!在本文中,笔者将Struts2.0.6、Spring2.0.6和Hibernate3.1进行整合,希望通过这样的整合示例,让读者了解这些框架各自的特点,以便于在自己的项目中,根据实际情况,尽快的过渡到Struts2的时代。本文的内容基于Struts2.0.6。

?

一、???????准备工作

spring2与1.x区别不大,可以平滑的过度,笔者也是把spring1.28换成了spring2.0.6,算是升级到spring 2.0了。struts2基本就是webwork2.2,与以前的struts1.x可以说没任何关系了。因为是第一次用struts2,也是第一次用webwork,所以有很多不完善,不规范的地方,还望大家来拍砖。

开发环境:MyEclipse5.0+Eclipse3.2+JDK5.0+

Tomcat5.5+struts2+Spring2.0.6+Hibernate3.1。本示例通过对一个图书进行管理的系统,提供基本的增加、删除、修改、查询等功能。

lib包需要以下右图所示的这些包。其中Struts2.0.6的下载地址为:

转 Struts2+Spring2+Hibernate3 图书治理
?????? http://people.apache.org/builds/struts/2.0.6

Hibernate3.1的下载地址为:

http://www.hibernate.org

spring2.0.6的下载地址为:

http://www.springframework.org

使用的数据库为mysql 5.0,使用的JDBC驱动JAR包为:mysql-connection-java-5.0.4-bin

创建数据表的sql语句为:

create database game

转 Struts2+Spring2+Hibernate3 图书治理CREATE?TABLE?`books`?(
转 Struts2+Spring2+Hibernate3 图书治理??`book_id`?int(11)?NOT?NULL?default?'0',
转 Struts2+Spring2+Hibernate3 图书治理??`book_name`?varchar(200)?character?set?gb2312?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_author`?varchar(100)?character?set?gb2312?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_publish`?varchar(100)?character?set?gb2312?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_date`?date?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_isbn`?varchar(20)?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_page`?int(11)?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_price`?decimal(10,2)?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??`book_content`?varchar(100)?character?set?gb2312?default?NULL,
转 Struts2+Spring2+Hibernate3 图书治理??PRIMARY?KEY??(`book_id`)
转 Struts2+Spring2+Hibernate3 图书治理)?ENGINE=InnoDB?DEFAULT?CHARSET=gbk?ROW_FORMAT=COMPRESSED;转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理
?

二、???????建立公共类

1、AbstractAction

?

Struts2和Struts1.x的差别,最明显的就是Struts2是一个pull-MVC架构。Struts1.x?必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。Struts 2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。

虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载(Override)

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.commons;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.opensymphony.xwork2.ActionSupport;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?AbstractAction?extends?ActionSupport?{
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理

com.sterning.commons.AbstractAction.java

参考JavaDoc,可知ActionSupport类实现了接口:

com.opensymphony.xwork2.Action

com.opensymphony.xwork2.LoaleProvider

com.opensymphony.xwork2.TextProvider

com.opensymphony.xwork2.Validateable

com.opensymphony.xwork2.ValidationAware

com.uwyn.rife.continuations.ContinuableObject

java.io.Searializable

java.lang.Cloneable

2、Pager分页类

为了增加程序的分页功能,特意建立共用的分页类。

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.commons;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.math.*;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?Pager?{
转 Struts2+Spring2+Hibernate3 图书治理????private?int?totalRows;?//总行数
转 Struts2+Spring2+Hibernate3 图书治理????private?int?pageSize?=?5;?//每页显示的行数
转 Struts2+Spring2+Hibernate3 图书治理????private?int?currentPage;?//当前页号
转 Struts2+Spring2+Hibernate3 图书治理????private?int?totalPages;?//总页数
转 Struts2+Spring2+Hibernate3 图书治理????private?int?startRow;?//当前页在数据库中的起始行
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?Pager()?{
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?Pager(int?_totalRows)?{
转 Struts2+Spring2+Hibernate3 图书治理????????totalRows?=?_totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????????totalPages=totalRows/pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????????int?mod=totalRows%pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????????if(mod>0){
转 Struts2+Spring2+Hibernate3 图书治理????????????totalPages++;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????currentPage?=?1;
转 Struts2+Spring2+Hibernate3 图书治理????????startRow?=?0;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getStartRow()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?startRow;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getTotalPages()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?totalPages;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getCurrentPage()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getPageSize()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setTotalRows(int?totalRows)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.totalRows?=?totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setStartRow(int?startRow)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.startRow?=?startRow;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setTotalPages(int?totalPages)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.totalPages?=?totalPages;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setCurrentPage(int?currentPage)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.currentPage?=?currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setPageSize(int?pageSize)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.pageSize?=?pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getTotalRows()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?first()?{
转 Struts2+Spring2+Hibernate3 图书治理????????currentPage?=?1;
转 Struts2+Spring2+Hibernate3 图书治理????????startRow?=?0;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?previous()?{
转 Struts2+Spring2+Hibernate3 图书治理????????if?(currentPage?==?1)?{
转 Struts2+Spring2+Hibernate3 图书治理????????????return;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????currentPage--;
转 Struts2+Spring2+Hibernate3 图书治理????????startRow?=?(currentPage?-?1)?*?pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?next()?{
转 Struts2+Spring2+Hibernate3 图书治理????????if?(currentPage?<?totalPages)?{
转 Struts2+Spring2+Hibernate3 图书治理????????????currentPage++;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????startRow?=?(currentPage?-?1)?*?pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?last()?{
转 Struts2+Spring2+Hibernate3 图书治理????????currentPage?=?totalPages;
转 Struts2+Spring2+Hibernate3 图书治理????????startRow?=?(currentPage?-?1)?*?pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????public?void?refresh(int?_currentPage)?{
转 Struts2+Spring2+Hibernate3 图书治理????????currentPage?=?_currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????????if?(currentPage?>?totalPages)?{
转 Struts2+Spring2+Hibernate3 图书治理????????????last();
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理

com.sterning.commons.Pager.java

同时,采用PagerService类来发布成为分页类服务PagerService,代码如下:

转 Struts2+Spring2+Hibernate3 图书治理同时,采用PagerService类来发布成为分页类服务PagerService,代码如下:
转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.commons;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?PagerService?{
转 Struts2+Spring2+Hibernate3 图书治理????public?Pager?getPager(String?currentPage,String?pagerMethod,int?totalRows)?{
转 Struts2+Spring2+Hibernate3 图书治理????????//????定义pager对象,用于传到页面
转 Struts2+Spring2+Hibernate3 图书治理????????Pager?pager?=?new?Pager(totalRows);
转 Struts2+Spring2+Hibernate3 图书治理????????//????如果当前页号为空,表示为首次查询该页
转 Struts2+Spring2+Hibernate3 图书治理????????//????如果不为空,则刷新pager对象,输入当前页号等信息
转 Struts2+Spring2+Hibernate3 图书治理????????if?(currentPage?!=?null)?{
转 Struts2+Spring2+Hibernate3 图书治理????????????pager.refresh(Integer.parseInt(currentPage));
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????//????获取当前执行的方法,首页,前一页,后一页,尾页。
转 Struts2+Spring2+Hibernate3 图书治理????????if?(pagerMethod?!=?null)?{
转 Struts2+Spring2+Hibernate3 图书治理????????????if?(pagerMethod.equals("first"))?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????pager.first();
转 Struts2+Spring2+Hibernate3 图书治理????????????}?else?if?(pagerMethod.equals("previous"))?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????pager.previous();
转 Struts2+Spring2+Hibernate3 图书治理????????????}?else?if?(pagerMethod.equals("next"))?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????pager.next();
转 Struts2+Spring2+Hibernate3 图书治理????????????}?else?if?(pagerMethod.equals("last"))?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????pager.last();
转 Struts2+Spring2+Hibernate3 图书治理????????????}
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????return?pager;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理com.sterning.commons.PagerService.java

三、???????建立数据持久化层

1、编写实体类Books及books.hbm.xml映射文件。

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.model;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.Date;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?Books?{
转 Struts2+Spring2+Hibernate3 图书治理????//????Fields?
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookId;//编号
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookName;//书名
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookAuthor;//作者
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookPublish;//出版社
转 Struts2+Spring2+Hibernate3 图书治理????private?Date?bookDate;//出版日期
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookIsbn;//ISBN
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookPage;//页数
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookPrice;//价格
转 Struts2+Spring2+Hibernate3 图书治理????private?String?bookContent;//内容提要
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????//????Constructors
转 Struts2+Spring2+Hibernate3 图书治理????public?Books(){}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????//????Property?accessors
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookId()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookId;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookId(String?bookId)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookId?=?bookId;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookName()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookName(String?bookName)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookName?=?bookName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookAuthor()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookAuthor;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookAuthor(String?bookAuthor)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookAuthor?=?bookAuthor;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookContent()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookContent;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookContent(String?bookContent)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookContent?=?bookContent;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?Date?getBookDate()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookDate;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookDate(Date?bookDate)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookDate?=?bookDate;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookIsbn()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookIsbn;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookIsbn(String?bookIsbn)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookIsbn?=?bookIsbn;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookPage()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookPage(String?bookPage)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookPage?=?bookPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookPrice()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookPrice;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookPrice(String?bookPrice)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookPrice?=?bookPrice;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookPublish()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookPublish;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookPublish(String?bookPublish)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookPublish?=?bookPublish;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理??com.sterning.books.model.Books.java

???????接下来要把实体类Books的属性映射到books表,编写下面的books.hbm.xml文件:

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?hibernate-mapping?PUBLIC?"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"
转 Struts2+Spring2+Hibernate3 图书治理"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<hibernate-mapping>
转 Struts2+Spring2+Hibernate3 图书治理?????<class?name="com.sterning.books.model.Books"?table="books"?>
转 Struts2+Spring2+Hibernate3 图书治理?????????<id?name="bookId"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_id"?length="5"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????????<generator?class="assigned"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</id>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="bookName"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_name"?length="100"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理?????????<property?name="bookAuthor"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_author"?length="100"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="bookPublish"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_publish"?length="100"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理?????????<property?name="bookDate"?type="java.sql.Timestamp">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_date"?length="7"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理??????????<property?name="bookIsbn"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_isbn"?length="20"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="bookPage"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_page"?length="11"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="bookPrice"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_price"?length="4"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>?
转 Struts2+Spring2+Hibernate3 图书治理?????????<property?name="bookContent"?type="string">
转 Struts2+Spring2+Hibernate3 图书治理????????????<column?name="book_content"?length="100"?/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理?????</class>
转 Struts2+Spring2+Hibernate3 图书治理</hibernate-mapping>
转 Struts2+Spring2+Hibernate3 图书治理??????? com.sterning.books.model.books.hbm.xml

2、hibernate.cfg.xml配置文件如下:(注意它的位置在scr/hibernate.cfg.xml

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="ISO-8859-1"?>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?hibernate-configuration?PUBLIC
转 Struts2+Spring2+Hibernate3 图书治理????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
转 Struts2+Spring2+Hibernate3 图书治理????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
转 Struts2+Spring2+Hibernate3 图书治理<hibernate-configuration>
转 Struts2+Spring2+Hibernate3 图书治理<session-factory>
转 Struts2+Spring2+Hibernate3 图书治理????<property?name="show_sql">true</property>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<mapping?resource="com/sterning/books/model/books.hbm.xml"></mapping>
转 Struts2+Spring2+Hibernate3 图书治理</session-factory>
转 Struts2+Spring2+Hibernate3 图书治理</hibernate-configuration>
转 Struts2+Spring2+Hibernate3 图书治理??Com.sterning.bean.hibernate.hibernate.cfg.xml

四、???????建立DAO?

DAO访问层负责封装底层的数据访问细节,不仅可以使概念清晰,而且可以提高开发效率。

1、建立DAO的接口类:BooksDao

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.dao.iface;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.List;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.model.Books;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?interface?BooksDao?{
转 Struts2+Spring2+Hibernate3 图书治理????List?getAll();//获得所有记录
转 Struts2+Spring2+Hibernate3 图书治理????List?getBooks(int?pageSize,?int?startRow);//获得所有记录
转 Struts2+Spring2+Hibernate3 图书治理????int?getRows();//获得总行数
转 Struts2+Spring2+Hibernate3 图书治理????int?getRows(String?fieldname,String?value);//获得总行数
转 Struts2+Spring2+Hibernate3 图书治理????List?queryBooks(String?fieldname,String?value);//根据条件查询
转 Struts2+Spring2+Hibernate3 图书治理????List?getBooks(String?fieldname,String?value,int?pageSize,?int?startRow);//根据条件查询
转 Struts2+Spring2+Hibernate3 图书治理????Books?getBook(String?bookId);//根据ID获得记录
转 Struts2+Spring2+Hibernate3 图书治理????String?getMaxID();//获得最大ID值
转 Struts2+Spring2+Hibernate3 图书治理????void?addBook(Books?book);//添加记录
转 Struts2+Spring2+Hibernate3 图书治理????void?updateBook(Books?book);//修改记录
转 Struts2+Spring2+Hibernate3 图书治理????void?deleteBook(Books?book);//删除记录????
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理??com.sterning.books.dao.iface.BooksDao.java

?

2、实现此接口的类文件,BooksMapDao

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.dao.hibernate;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.sql.SQLException;
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.Iterator;
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.List;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?org.hibernate.HibernateException;
转 Struts2+Spring2+Hibernate3 图书治理import?org.hibernate.Query;
转 Struts2+Spring2+Hibernate3 图书治理import?org.hibernate.Session;
转 Struts2+Spring2+Hibernate3 图书治理import?org.springframework.orm.hibernate3.HibernateCallback;
转 Struts2+Spring2+Hibernate3 图书治理import?org.springframework.orm.hibernate3.support.HibernateDaoSupport;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.dao.iface.BooksDao;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.model.Books;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.commons.PublicUtil;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理/**
转 Struts2+Spring2+Hibernate3 图书治理?*?@author?cwf
转 Struts2+Spring2+Hibernate3 图书治理?*
转 Struts2+Spring2+Hibernate3 图书治理?*/
转 Struts2+Spring2+Hibernate3 图书治理public?class?BooksMapDao?extends?HibernateDaoSupport?implements?BooksDao?{
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?BooksMapDao(){}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:添加信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:对象?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?addBook(Books?book)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.getHibernateTemplate().save(book);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:删除信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?对象
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?deleteBook(Books?book)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.getHibernateTemplate().delete(book);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得所有的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:信息的集合
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getAll()?{
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="FROM?Books?ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????return?this.getHibernateTemplate().find(sql);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getRows()?{
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="FROM?Books?ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????List?list=this.getHibernateTemplate().find(sql);
转 Struts2+Spring2+Hibernate3 图书治理????????return?list.size();
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得所有的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:信息的集合
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getBooks(int?pageSize,?int?startRow)?throws?HibernateException?{
转 Struts2+Spring2+Hibernate3 图书治理????????final?int?pageSize1=pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????????final?int?startRow1=startRow;
转 Struts2+Spring2+Hibernate3 图书治理????????return?this.getHibernateTemplate().executeFind(new?HibernateCallback(){
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????????????public?List?doInHibernate(Session?session)?throws?HibernateException,?SQLException?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????//?TODO?自动生成方法存根
转 Struts2+Spring2+Hibernate3 图书治理????????????????Query?query=session.createQuery("FROM?Books?ORDER?BY?bookName");
转 Struts2+Spring2+Hibernate3 图书治理????????????????query.setFirstResult(startRow1);
转 Struts2+Spring2+Hibernate3 图书治理????????????????query.setMaxResults(pageSize1);
转 Struts2+Spring2+Hibernate3 图书治理????????????????return?query.list();
转 Struts2+Spring2+Hibernate3 图书治理????????????}
转 Struts2+Spring2+Hibernate3 图书治理????????});
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得一条的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?ID
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:对象
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?Books?getBook(String?bookId)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?(Books)this.getHibernateTemplate().get(Books.class,bookId);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得最大ID
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:最大ID
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getMaxID()?{
转 Struts2+Spring2+Hibernate3 图书治理????????String?date=PublicUtil.getStrNowDate();
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="SELECT?MAX(bookId)+1?FROM?Books??";
转 Struts2+Spring2+Hibernate3 图书治理????????String?noStr?=?null;
转 Struts2+Spring2+Hibernate3 图书治理????????List?ll?=?(List)?this.getHibernateTemplate().find(sql);
转 Struts2+Spring2+Hibernate3 图书治理????????Iterator?itr?=?ll.iterator();
转 Struts2+Spring2+Hibernate3 图书治理????????if?(itr.hasNext())?{
转 Struts2+Spring2+Hibernate3 图书治理????????????Object?noint?=?itr.next();
转 Struts2+Spring2+Hibernate3 图书治理????????????if(noint?==?null){
转 Struts2+Spring2+Hibernate3 图书治理????????????????noStr?=?"1";????????????????
转 Struts2+Spring2+Hibernate3 图书治理????????????}else{
转 Struts2+Spring2+Hibernate3 图书治理????????????????noStr?=?noint.toString();
转 Struts2+Spring2+Hibernate3 图书治理????????????}
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????if(noStr.length()==1){
转 Struts2+Spring2+Hibernate3 图书治理????????????noStr="000"+noStr;
转 Struts2+Spring2+Hibernate3 图书治理????????}else?if(noStr.length()==2){
转 Struts2+Spring2+Hibernate3 图书治理????????????noStr="00"+noStr;
转 Struts2+Spring2+Hibernate3 图书治理????????}else?if(noStr.length()==3){
转 Struts2+Spring2+Hibernate3 图书治理????????????noStr="0"+noStr;
转 Struts2+Spring2+Hibernate3 图书治理????????}else{
转 Struts2+Spring2+Hibernate3 图书治理????????????noStr=noStr;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????return?noStr;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:修改信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?对象
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?updateBook(Books?pd)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.getHibernateTemplate().update(pd);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:查询信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?集合
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?queryBooks(String?fieldname,String?value)?{
转 Struts2+Spring2+Hibernate3 图书治理????????System.out.println("value:?"+value);
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="FROM?Books?where?"+fieldname+"?like?'%"+value+"%'"+"ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????return?this.getHibernateTemplate().find(sql);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getRows(String?fieldname,String?value)?{
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="";
转 Struts2+Spring2+Hibernate3 图书治理????????if(fieldname==null||fieldname.equals("")||fieldname==null||fieldname.equals(""))
转 Struts2+Spring2+Hibernate3 图书治理????????????sql="FROM?Books?ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????else????
转 Struts2+Spring2+Hibernate3 图书治理????????????sql="FROM?Books?where?"+fieldname+"?like?'%"+value+"%'"+"ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????List?list=this.getHibernateTemplate().find(sql);
转 Struts2+Spring2+Hibernate3 图书治理????????return?list.size();
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:查询信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?集合
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getBooks(String?fieldname,String?value,int?pageSize,?int?startRow)?{
转 Struts2+Spring2+Hibernate3 图书治理????????final?int?pageSize1=pageSize;
转 Struts2+Spring2+Hibernate3 图书治理????????final?int?startRow1=startRow;
转 Struts2+Spring2+Hibernate3 图书治理????????final?String?queryName=fieldname;
转 Struts2+Spring2+Hibernate3 图书治理????????final?String?queryValue=value;
转 Struts2+Spring2+Hibernate3 图书治理????????String?sql="";
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????if(queryName==null||queryName.equals("")||queryValue==null||queryValue.equals(""))
转 Struts2+Spring2+Hibernate3 图书治理????????????sql="FROM?Books?ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????else????
转 Struts2+Spring2+Hibernate3 图书治理????????????sql="FROM?Books?where?"+fieldname+"?like?'%"+value+"%'"+"ORDER?BY?bookName";
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????final?String?sql1=sql;
转 Struts2+Spring2+Hibernate3 图书治理????????return?this.getHibernateTemplate().executeFind(new?HibernateCallback(){
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????????????public?List?doInHibernate(Session?session)?throws?HibernateException,?SQLException?{
转 Struts2+Spring2+Hibernate3 图书治理????????????????//?TODO?自动生成方法存根
转 Struts2+Spring2+Hibernate3 图书治理????????????????Query?query=session.createQuery(sql1);
转 Struts2+Spring2+Hibernate3 图书治理????????????????query.setFirstResult(startRow1);
转 Struts2+Spring2+Hibernate3 图书治理????????????????query.setMaxResults(pageSize1);
转 Struts2+Spring2+Hibernate3 图书治理????????????????return?query.list();
转 Struts2+Spring2+Hibernate3 图书治理????????????}
转 Struts2+Spring2+Hibernate3 图书治理????????});
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理?com.sterning.books.dao.hibernate.BooksMapDao.java

五、???????业务逻辑层

?

在业务逻辑层需要认真思考每个业务逻辑所能用到的持久层对象和DAO。DAO层之上是业务逻辑层,DAO类可以有很多个,但业务逻辑类应该只有一个,可以在业务逻辑类中调用各个DAO类进行操作。

1、创建服务接口类IBookService

转 Struts2+Spring2+Hibernate3 图书治理1、????创建服务接口类IBookService
转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.services.iface;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.List;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.model.Books;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?interface?IBooksService?{
转 Struts2+Spring2+Hibernate3 图书治理????List?getAll();//获得所有记录
转 Struts2+Spring2+Hibernate3 图书治理????List?getBooks(int?pageSize,?int?startRow);//获得所有记录
转 Struts2+Spring2+Hibernate3 图书治理????int?getRows();//获得总行数
转 Struts2+Spring2+Hibernate3 图书治理????int?getRows(String?fieldname,String?value);//获得总行数
转 Struts2+Spring2+Hibernate3 图书治理????List?queryBooks(String?fieldname,String?value);//根据条件查询
转 Struts2+Spring2+Hibernate3 图书治理????List?getBooks(String?fieldname,String?value,int?pageSize,?int?startRow);//根据条件查询
转 Struts2+Spring2+Hibernate3 图书治理????Books?getBook(String?bookId);//根据ID获得记录
转 Struts2+Spring2+Hibernate3 图书治理????String?getMaxID();//获得最大ID值
转 Struts2+Spring2+Hibernate3 图书治理????void?addBook(Books?pd);//添加记录
转 Struts2+Spring2+Hibernate3 图书治理????void?updateBook(Books?pd);//修改记录
转 Struts2+Spring2+Hibernate3 图书治理????void?deleteBook(String?bookId);//删除记录????
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理??com.sterning.books.services.iface.IBookService.java

2、实现此接口类:BookService:

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.services;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.List;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.dao.iface.BooksDao;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.model.Books;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.services.iface.IBooksService;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?BooksService?implements?IBooksService{
转 Struts2+Spring2+Hibernate3 图书治理????private?BooksDao?booksDao;
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?BooksService(){}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:添加信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:对象?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?addBook(Books?book)?{
转 Struts2+Spring2+Hibernate3 图书治理????????booksDao.addBook(book);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:删除信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?对象
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?deleteBook(String?bookId)?{
转 Struts2+Spring2+Hibernate3 图书治理????????Books?book=booksDao.getBook(bookId);
转 Struts2+Spring2+Hibernate3 图书治理????????booksDao.deleteBook(book);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得所有的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:信息的集合
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getAll()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getAll();
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getRows()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getRows();
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得所有的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:信息的集合
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getBooks(int?pageSize,?int?startRow)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getBooks(pageSize,?startRow);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得一条的信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?ID
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:对象
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?Books?getBook(String?bookId)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getBook(bookId);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得最大ID
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:最大ID
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getMaxID()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getMaxID();
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:修改信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?对象
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?void?updateBook(Books?book)?{
转 Struts2+Spring2+Hibernate3 图书治理????????booksDao.updateBook(book);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:查询信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?集合
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?queryBooks(String?fieldname,String?value)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.queryBooks(fieldname,?value);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:获得总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:总行数
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?int?getRows(String?fieldname,String?value)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getRows(fieldname,?value);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????/**
转 Struts2+Spring2+Hibernate3 图书治理?????*?函数说明:查询信息
转 Struts2+Spring2+Hibernate3 图书治理?????*?参数说明:?集合
转 Struts2+Spring2+Hibernate3 图书治理?????*?返回值:
转 Struts2+Spring2+Hibernate3 图书治理?????*/
转 Struts2+Spring2+Hibernate3 图书治理????public?List?getBooks(String?fieldname,String?value,int?pageSize,?int?startRow)?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao.getBooks(fieldname,?value,pageSize,startRow);
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?BooksDao?getBooksDao()?{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksDao;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBooksDao(BooksDao?booksDao)?{
转 Struts2+Spring2+Hibernate3 图书治理????????this.booksDao?=?booksDao;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理? com.sterning.books.services.BookService.java

六、????????创建Action类:BookAction?

有Struts 1.x经验的朋友都知道Action是Struts的核心内容,当然Struts 2.0也不例外。不过,Struts 1.x与Struts 2.0的Action模型很大的区别。

??

Struts 1.x

Stuts 2.0

接口

必须继承org.apache.struts.action.Action或者其子类

无须继承任何类型或实现任何接口

表单数据

表单数据封装在FormBean中

表单数据包含在Action中,通过Getter和Setter获取

1、建立BookAction

转 Struts2+Spring2+Hibernate3 图书治理package?com.sterning.books.web.actions;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?java.util.Collection;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.model.Books;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.books.services.iface.IBooksService;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.commons.AbstractAction;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.commons.Pager;
转 Struts2+Spring2+Hibernate3 图书治理import?com.sterning.commons.PagerService;
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理public?class?BooksAction?extends?AbstractAction?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????private?IBooksService?booksService;
转 Struts2+Spring2+Hibernate3 图书治理????private?PagerService?pagerService;
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????private?Books?book;
转 Struts2+Spring2+Hibernate3 图书治理????private?Pager?pager;
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????protected?Collection?availableItems;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?pagerMethod;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?bookId;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?queryName;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?queryValue;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?searchName;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?searchValue;
转 Struts2+Spring2+Hibernate3 图书治理????protected?String?queryMap;
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?list()?throws?Exception?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????if(queryMap?==null||queryMap.equals(""))转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????
转 Struts2+Spring2+Hibernate3 图书治理????????}else转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????String[]?str=queryMap.split("~");
转 Struts2+Spring2+Hibernate3 图书治理????????????this.setQueryName(str[0]);
转 Struts2+Spring2+Hibernate3 图书治理????????????this.setQueryValue(str[1]);
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????System.out.println("asd"+this.getQueryValue());
转 Struts2+Spring2+Hibernate3 图书治理????????int?totalRow=booksService.getRows(this.getQueryName(),this.getQueryValue());
转 Struts2+Spring2+Hibernate3 图书治理????????pager=pagerService.getPager(this.getCurrentPage(),?this.getPagerMethod(),?totalRow);
转 Struts2+Spring2+Hibernate3 图书治理????????this.setCurrentPage(String.valueOf(pager.getCurrentPage()));
转 Struts2+Spring2+Hibernate3 图书治理????????this.setTotalRows(String.valueOf(totalRow));
转 Struts2+Spring2+Hibernate3 图书治理????????availableItems=booksService.getBooks(this.getQueryName(),this.getQueryValue(),pager.getPageSize(),?pager.getStartRow());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????this.setQueryName(this.getQueryName());
转 Struts2+Spring2+Hibernate3 图书治理????????this.setQueryValue(this.getQueryValue());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????this.setSearchName(this.getQueryName());
转 Struts2+Spring2+Hibernate3 图书治理????????this.setSearchValue(this.getQueryValue());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????return?SUCCESS;?????????
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?load()?throws?Exception?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????if(bookId!=null)
转 Struts2+Spring2+Hibernate3 图书治理????????????book?=?booksService.getBook(bookId);
转 Struts2+Spring2+Hibernate3 图书治理????????else
转 Struts2+Spring2+Hibernate3 图书治理????????????bookId=booksService.getMaxID();
转 Struts2+Spring2+Hibernate3 图书治理????????return?SUCCESS;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?save()?throws?Exception?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????if(this.getBook().getBookPrice().equals(""))转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????this.getBook().setBookPrice("0.0");
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????String?id=this.getBook().getBookId();
转 Struts2+Spring2+Hibernate3 图书治理????????Books?book=booksService.getBook(id);
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????if(book?==?null)
转 Struts2+Spring2+Hibernate3 图书治理????????????booksService.addBook(this.getBook());
转 Struts2+Spring2+Hibernate3 图书治理????????else
转 Struts2+Spring2+Hibernate3 图书治理????????????booksService.updateBook(this.getBook());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????this.setQueryName(this.getQueryName());
转 Struts2+Spring2+Hibernate3 图书治理????????this.setQueryValue(this.getQueryValue());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????if(this.getQueryName()==null||this.getQueryValue()==null||this.getQueryName().equals("")||this.getQueryValue().equals(""))转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????
转 Struts2+Spring2+Hibernate3 图书治理????????}else转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????queryMap=this.getQueryName()+"~"+this.getQueryValue();
转 Struts2+Spring2+Hibernate3 图书治理????????}????????
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????return?SUCCESS;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?delete()?throws?Exception?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????booksService.deleteBook(this.getBookId());
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????if(this.getQueryName()==null||this.getQueryValue()==null||this.getQueryName().equals("")||this.getQueryValue().equals(""))转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????
转 Struts2+Spring2+Hibernate3 图书治理????????}else转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????????queryMap=this.getQueryName()+"~"+this.getQueryValue();
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????return?SUCCESS;
转 Struts2+Spring2+Hibernate3 图书治理????}????
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?Books?getBook()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?book;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBook(Books?book)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.book?=?book;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?IBooksService?getBooksService()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?booksService;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBooksService(IBooksService?booksService)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.booksService?=?booksService;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?Collection?getAvailableItems()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?availableItems;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getCurrentPage()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setCurrentPage(String?currentPage)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.currentPage?=?currentPage;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getPagerMethod()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?pagerMethod;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setPagerMethod(String?pagerMethod)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.pagerMethod?=?pagerMethod;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?Pager?getPager()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?pager;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setPager(Pager?pager)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.pager?=?pager;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getTotalRows()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setTotalRows(String?totalRows)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.totalRows?=?totalRows;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getBookId()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?bookId;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setBookId(String?bookId)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.bookId?=?bookId;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getQueryName()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?queryName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setQueryName(String?queryName)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.queryName?=?queryName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getQueryValue()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?queryValue;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setQueryValue(String?queryValue)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.queryValue?=?queryValue;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getSearchName()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?searchName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setSearchName(String?searchName)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.searchName?=?searchName;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getSearchValue()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?searchValue;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setSearchValue(String?searchValue)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.searchValue?=?searchValue;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?String?getQueryMap()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?queryMap;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setQueryMap(String?queryMap)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.queryMap?=?queryMap;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????public?PagerService?getPagerService()?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????return?pagerService;
转 Struts2+Spring2+Hibernate3 图书治理????}
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????public?void?setPagerService(PagerService?pagerService)?转 Struts2+Spring2+Hibernate3 图书治理{
转 Struts2+Spring2+Hibernate3 图书治理????????this.pagerService?=?pagerService;
转 Struts2+Spring2+Hibernate3 图书治理????}????
转 Struts2+Spring2+Hibernate3 图书治理}
转 Struts2+Spring2+Hibernate3 图书治理

com.sterning.books.web.actions.BookAction.java

(1)、默认情况下,当请求bookAction.action发生时(这个会在后面的Spring配置文件中见到的),Struts运行时(Runtime)根据struts.xml里的Action映射集(Mapping),实例化com.sterning.books.web.actions.BookAction类,并调用其execute方法。当然,我们可以通过以下两种方法改变这种默认调用。这个功能(Feature)有点类似Struts 1.x中的LookupDispathAction。

在classes/sturts.xml中新建Action,并指明其调用的方法;

访问Action时,在Action名后加上“!xxx”(xxx为方法名)。

(2)、细心的朋友应该可能会发现com.sterning.books.web.actions.BookAction.java中Action方法(execute)返回都是SUCCESS。这个属性变量我并没有定义,所以大家应该会猜到它在ActionSupport或其父类中定义。没错,SUCCESS在接口com.opensymphony.xwork2.Action中定义,另外同时定义的还有ERROR,?INPUT,?LOGIN,?NONE。

此外,我在配置Action时都没有为result定义名字(name),所以它们默认都为success。值得一提的是Struts 2.0中的result不仅仅是Struts 1.x中forward的别名,它可以实现除forward外的很激动人心的功能,如将Action输出到FreeMaker模板、Velocity模板、JasperReports和使用XSL转换等。这些都过result里的type(类型)属性(Attribute)定义的。另外,您还可以自定义result类型。

(3)、使用Struts 2.0,表单数据的输入将变得非常方便,和普通的POJO一样在Action编写Getter和Setter,然后在JSP的UI标志的name与其对应,在提交表单到Action时,我们就可以取得其值。

(4)、Struts 2.0更厉害的是支持更高级的POJO访问,如this.getBook().getBookPrice()。private Books book所引用的是一个关于书的对象类,它可以做为一个属性而出现在BookActoin.java类中。这样对我们开发多层系统尤其有用。它可以使系统结构更清晰。

(5)、有朋友可能会这样问:“如果我要取得Servlet API中的一些对象,如request、response或session等,应该怎么做?这里的execute不像Struts 1.x的那样在参数中引入。”开发Web应用程序当然免不了跟这些对象打交道。在Strutx 2.0中可以有两种方式获得这些对象:非IoC(控制反转Inversion of Control)方式和IoC方式。

非IoC方式

要获得上述对象,关键是Struts 2.0中com.opensymphony.xwork2.ActionContext类。我们可以通过它的静态方法getContext()获取当前Action的上下文对象。另外,org.apache.struts2.ServletActionContext作为辅助类(Helper Class),可以帮助您快捷地获得这几个对象。

HttpServletRequest request = ServletActionContext.getRequest();

HttpServletResponse response = ServletActionContext.getResponse();

HttpSession session = request.getSession();

如果你只是想访问session的属性(Attribute),你也可以通过ActionContext.getContext().getSession()获取或添加session范围(Scoped)的对象。

IoC方式

要使用IoC方式,我们首先要告诉IoC容器(Container)想取得某个对象的意愿,通过实现相应的接口做到这点。如实现SessionAware, ServletRequestAware, ServletResponseAware接口,从而得到上面的对象。

1、对BookAction类的Save方法进行验证

正如《Writing Secure Code》文中所写的名言All input is evil:“所有的输入都是罪恶的”,所以我们应该对所有的外部输入进行校验。而表单是应用程序最简单的入口,对其传进来的数据,我们必须进行校验。Struts2的校验框架十分简单方便,只在如下两步:

在Xxx-validation.xml文件中的<message>元素中加入key属性;

在相应的jsp文件中的<s:form>标志中加入validate="true"属性,就可以在用Javascript在客户端校验数据。

其验证文件为:BooksAction-save-validation.xml

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="UTF-8"?>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?validators?PUBLIC?"-//OpenSymphony?Group//XWork?Validator?1.0//EN"?"http://www.opensymphony.com/xwork/xwork-validator-1.0.dtd">
转 Struts2+Spring2+Hibernate3 图书治理<validators>
转 Struts2+Spring2+Hibernate3 图书治理????<!--?Field-Validator?Syntax?-->
转 Struts2+Spring2+Hibernate3 图书治理????<field?name="book.bookName">
转 Struts2+Spring2+Hibernate3 图书治理????????<field-validator?type="requiredstring">
转 Struts2+Spring2+Hibernate3 图书治理????????????<message?key="book.bookName.required"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</field-validator>
转 Struts2+Spring2+Hibernate3 图书治理????</field>
转 Struts2+Spring2+Hibernate3 图书治理????<field?name="book.bookAuthor">
转 Struts2+Spring2+Hibernate3 图书治理????????<field-validator?type="requiredstring">
转 Struts2+Spring2+Hibernate3 图书治理????????????<message?key="book.bookAuthor.required"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</field-validator>
转 Struts2+Spring2+Hibernate3 图书治理????</field>
转 Struts2+Spring2+Hibernate3 图书治理????<field?name="book.bookPublish">
转 Struts2+Spring2+Hibernate3 图书治理????????<field-validator?type="requiredstring">
转 Struts2+Spring2+Hibernate3 图书治理????????????<message?key="book.bookPublish.required"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</field-validator>
转 Struts2+Spring2+Hibernate3 图书治理????</field>
转 Struts2+Spring2+Hibernate3 图书治理</validators>
转 Struts2+Spring2+Hibernate3 图书治理?com.sterning.books.web.actions.BooksAction-save-validation.xml

1、对BookAction类的Save方法进行验证的资源文件

???????注意配置文件的名字应该是:配置文件(类名-validation.xml)的格式。BooksAction类的验证资源文件为:BooksAction.properties

转 Struts2+Spring2+Hibernate3 图书治理book=Books
转 Struts2+Spring2+Hibernate3 图书治理book.bookName.required=\u8bf7\u8f93\u5165\u4e66\u540d
转 Struts2+Spring2+Hibernate3 图书治理book.bookAuthor.required=\u8bf7\u8f93\u5165\u4f5c\u8005
转 Struts2+Spring2+Hibernate3 图书治理book.bookPublish.required=\u8bf7\u8f93\u5165\u51fa\u7248\u793e
转 Struts2+Spring2+Hibernate3 图书治理format.date={0,date,yyyy-MM-dd}
转 Struts2+Spring2+Hibernate3 图书治理

com.sterning.books.web.actions.BooksAction.properties

???????资源文件的查找顺序是有一定规则的。之所以说Struts 2.0的国际化更灵活是因为它可以根据不同需要配置和获取资源(properties)文件。在Struts 2.0中有下面几种方法:

(1)、使用全局的资源文件。这适用于遍布于整个应用程序的国际化字符串,它们在不同的包(package)中被引用,如一些比较共用的出错提示;

(2)、使用包范围内的资源文件。做法是在包的根目录下新建名的package.properties和package_xx_XX.properties文件。这就适用于在包中不同类访问的资源;

(3)、使用Action范围的资源文件。做法为Action的包下新建文件名(除文件扩展名外)与Action类名同样的资源文件。它只能在该Action中访问。如此一来,我们就可以在不同的Action里使用相同的properties名表示不同的值。例如,在ActonOne中title为“动作一”,而同样用title在ActionTwo表示“动作二”,节省一些命名工夫;

(4)、使用<s:i18n>标志访问特定路径的properties文件。在使用这一方法时,请注意<s:i18n>标志的范围。在<s:i18n name="xxxxx">到</s:i18n>之间,所有的国际化字符串都会在名为xxxxx资源文件查找,如果找不到,Struts 2.0就会输出默认值(国际化字符串的名字)。

例如:某个ChildAction中调用了getText("user.title"),Struts 2.0的将会执行以下的操作:

查找ChildAction_xx_XX.properties文件或ChildAction.properties;

查找ChildAction实现的接口,查找与接口同名的资源文件MyInterface.properties;

查找ChildAction的父类ParentAction的properties文件,文件名为ParentAction.properties;

判断当前ChildAction是否实现接口ModelDriven。如果是,调用getModel()获得对象,查找与其同名的资源文件;

查找当前包下的package.properties文件;

查找当前包的父包,直到最顶层包;

在值栈(Value Stack)中,查找名为user的属性,转到user类型同名的资源文件,查找键为title的资源;

查找在struts.properties配置的默认的资源文件,参考例1;

输出user.title。

七、???????Web页面

?

在这一节中,主要使用到了Struts2的标签库。在这里,会对所用到的主要标签做一个初步的介绍。更多的知识请读者访问Struts的官方网站做更多的学习。在编写Web页面之前,先从总体上,对Struts 1.x与Struts 2.0的标志库(Tag Library)作比较。

Struts 1.x

Struts 2.0

分类

将标志库按功能分成HTML、Tiles、Logic和Bean等几部分

严格上来说,没有分类,所有标志都在URI为“/struts-tags”命名空间下,不过,我们可以从功能上将其分为两大类:非UI标志和UI标志

表达式语言(expression languages)

不支持嵌入语言(EL)

OGNL、JSTL、Groovy和Velcity

?

1、主页面:index.jsp,其代码如下:

?

转 Struts2+Spring2+Hibernate3 图书治理<%@page?pageEncoding="UTF-8"?contentType="text/html;?charset=UTF-8"?%>
转 Struts2+Spring2+Hibernate3 图书治理<%@?taglib?prefix="s"?uri="/struts-tags"?%>
转 Struts2+Spring2+Hibernate3 图书治理<html>
转 Struts2+Spring2+Hibernate3 图书治理<head>
转 Struts2+Spring2+Hibernate3 图书治理<meta?http-equiv="Content-Type"?content="text/html;?charset=GBK"/>
转 Struts2+Spring2+Hibernate3 图书治理<title>图书管理系统</title>
转 Struts2+Spring2+Hibernate3 图书治理</head>
转 Struts2+Spring2+Hibernate3 图书治理<body>
转 Struts2+Spring2+Hibernate3 图书治理<p><a?href="<s:url?action="list"?/>">进入图书管理系统</a></p>
转 Struts2+Spring2+Hibernate3 图书治理</body>
转 Struts2+Spring2+Hibernate3 图书治理</html>
转 Struts2+Spring2+Hibernate3 图书治理

?

WebRoot/index.jsp

要在JSP中使用Struts 2.0标志,先要指明标志的引入。通过在JSP的代码的顶部加入以下代码可以做到这点。<%@taglib prefix="s" uri="/struts-tags" %>

1、<s:url>标签:该标签用于创建url,可以通过"param"标签提供request参数。当includeParams的值时'all'或者'get', param标签中定义的参数将有优先权,也就是说其会覆盖其他同名参数的值。

2、列表页面:list.jsp

?

转 Struts2+Spring2+Hibernate3 图书治理<%@page?pageEncoding="gb2312"?contentType="text/html;?charset=UTF-8"?%>
转 Struts2+Spring2+Hibernate3 图书治理<%@?taglib?prefix="s"?uri="/struts-tags"?%>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<html>
转 Struts2+Spring2+Hibernate3 图书治理<head><title>图书管理系统</title></head>
转 Struts2+Spring2+Hibernate3 图书治理????<style?type="text/css">
转 Struts2+Spring2+Hibernate3 图书治理????????table?{
转 Struts2+Spring2+Hibernate3 图书治理????????????border:?1px?solid?black;
转 Struts2+Spring2+Hibernate3 图书治理????????????border-collapse:?collapse;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????table?thead?tr?th?{
转 Struts2+Spring2+Hibernate3 图书治理????????????border:?1px?solid?black;
转 Struts2+Spring2+Hibernate3 图书治理????????????padding:?3px;
转 Struts2+Spring2+Hibernate3 图书治理????????????background-color:?#cccccc;
转 Struts2+Spring2+Hibernate3 图书治理????????????background-color:?expression(this.rowIndex?%?2?==?0???"#FFFFFF"?:?"#EEEEEE");
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????????table?tbody?tr?td?{
转 Struts2+Spring2+Hibernate3 图书治理????????????border:?1px?solid?black;
转 Struts2+Spring2+Hibernate3 图书治理????????????padding:?3px;
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????????.trs{
转 Struts2+Spring2+Hibernate3 图书治理????????????background-color:?expression(this.rowIndex?%?2?==?0???"#FFFFFF"?:?"#EEEEEE");
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????</style>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<script?language="JavaScript">???
转 Struts2+Spring2+Hibernate3 图书治理????????function?doSearch(){
转 Struts2+Spring2+Hibernate3 图书治理????????????if(document.all.searchValue.value=="")
转 Struts2+Spring2+Hibernate3 图书治理????????????{????
转 Struts2+Spring2+Hibernate3 图书治理????????????????alert("请输入查询关键字!");
转 Struts2+Spring2+Hibernate3 图书治理????????????}else{
转 Struts2+Spring2+Hibernate3 图书治理????????????????window.location.href="bookAdmin/list.action?queryName="+document.all.searchName.value+"&&queryValue="+document.all.searchValue.value;
转 Struts2+Spring2+Hibernate3 图书治理?????????????}
转 Struts2+Spring2+Hibernate3 图书治理????????}
转 Struts2+Spring2+Hibernate3 图书治理????</script>
转 Struts2+Spring2+Hibernate3 图书治理<body>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<table?align="center">
转 Struts2+Spring2+Hibernate3 图书治理<tr?align="center">
转 Struts2+Spring2+Hibernate3 图书治理????<td>
转 Struts2+Spring2+Hibernate3 图书治理????????<select?name="searchName">
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookName">书名</option>
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookAuthor">作者</option>
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookPublish">出版社</option>
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookDate">出版日期</option>
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookIsbn">ISNB</option>
转 Struts2+Spring2+Hibernate3 图书治理????????????<option?value="bookPage">页数</option>
转 Struts2+Spring2+Hibernate3 图书治理????????</select>
转 Struts2+Spring2+Hibernate3 图书治理????????<input?type="text"?name="searchValue"?value=""?size="10"/>
转 Struts2+Spring2+Hibernate3 图书治理????????<input?type="button"?value="查询"?onClick="doSearch();">
转 Struts2+Spring2+Hibernate3 图书治理????</td>
转 Struts2+Spring2+Hibernate3 图书治理</tr>
转 Struts2+Spring2+Hibernate3 图书治理<tr?align="center">????
转 Struts2+Spring2+Hibernate3 图书治理????<td>
转 Struts2+Spring2+Hibernate3 图书治理????????<a?href="<s:url?action="list"?includeParams="none"/>">全部</a>
转 Struts2+Spring2+Hibernate3 图书治理????????<a?href='<s:url?action="edit"?></s:url>'>增加</a>
转 Struts2+Spring2+Hibernate3 图书治理????</td>
转 Struts2+Spring2+Hibernate3 图书治理</tr>
转 Struts2+Spring2+Hibernate3 图书治理<tr>
转 Struts2+Spring2+Hibernate3 图书治理<td>
转 Struts2+Spring2+Hibernate3 图书治理<table?cellspacing="0"?align="center">
转 Struts2+Spring2+Hibernate3 图书治理????<thead>
转 Struts2+Spring2+Hibernate3 图书治理????<tr>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>书名</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>作者</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>出版社</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>出版日期</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>ISNB</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>页数</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>价格</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>内容提要</th>
转 Struts2+Spring2+Hibernate3 图书治理????????<th>删除</th>
转 Struts2+Spring2+Hibernate3 图书治理????</tr>
转 Struts2+Spring2+Hibernate3 图书治理????</thead>
转 Struts2+Spring2+Hibernate3 图书治理????<tbody>
转 Struts2+Spring2+Hibernate3 图书治理????<s:iterator?value="availableItems">
转 Struts2+Spring2+Hibernate3 图书治理????????<tr?class="trs">
转 Struts2+Spring2+Hibernate3 图书治理????????????<td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<a?href='<s:url?action="edit"?><s:param?name="bookId"?value="bookId"?/></s:url>'>
转 Struts2+Spring2+Hibernate3 图书治理????????????<s:property?value="bookName"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????</a>
转 Struts2+Spring2+Hibernate3 图书治理????????????</td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookAuthor"/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookPublish"/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:text?name="format.date"><s:param?value="bookDate"/></s:text></td>?????
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookIsbn"?/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookPage"?/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookPrice"/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><s:property?value="bookContent"/></td>
转 Struts2+Spring2+Hibernate3 图书治理????????????
转 Struts2+Spring2+Hibernate3 图书治理????????????<td><a?href='<s:url?action="delete"><s:param?name="bookId"?value="bookId"?/></s:url>'>删除</a></td>
转 Struts2+Spring2+Hibernate3 图书治理????????</tr>
转 Struts2+Spring2+Hibernate3 图书治理????</s:iterator>
转 Struts2+Spring2+Hibernate3 图书治理????<tr?align="right">
转 Struts2+Spring2+Hibernate3 图书治理????????<td?colspan="9">
转 Struts2+Spring2+Hibernate3 图书治理????????????共<s:property?value="totalRows"/>行 
转 Struts2+Spring2+Hibernate3 图书治理????????????第<s:property?value="currentPage"/>页 
转 Struts2+Spring2+Hibernate3 图书治理????????????共<s:property?value="pager.getTotalPages()"/>页 
转 Struts2+Spring2+Hibernate3 图书治理????????????<a?href="<s:url?value="list.action">
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="currentPage"?value="currentPage"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="pagerMethod"?value="'first'"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????????
转 Struts2+Spring2+Hibernate3 图书治理????????????</s:url>">首页</a>
转 Struts2+Spring2+Hibernate3 图书治理????????????<a?href="<s:url?value="list.action">
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="currentPage"?value="currentPage"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="pagerMethod"?value="'previous'"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????</s:url>">上一页</a>
转 Struts2+Spring2+Hibernate3 图书治理????????????<a?href="<s:url?value="list.action">
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="currentPage"?value="currentPage"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="pagerMethod"?value="'next'"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????</s:url>">下一页</a>
转 Struts2+Spring2+Hibernate3 图书治理????????????<a?href="<s:url?value="list.action">
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="currentPage"?value="currentPage"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????????<s:param?name="pagerMethod"?value="'last'"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????</s:url>">尾页</a>
转 Struts2+Spring2+Hibernate3 图书治理????????</td>
转 Struts2+Spring2+Hibernate3 图书治理????</tr>????
转 Struts2+Spring2+Hibernate3 图书治理????</tbody>
转 Struts2+Spring2+Hibernate3 图书治理</table>
转 Struts2+Spring2+Hibernate3 图书治理</td>
转 Struts2+Spring2+Hibernate3 图书治理</tr>
转 Struts2+Spring2+Hibernate3 图书治理</table>
转 Struts2+Spring2+Hibernate3 图书治理</body>
转 Struts2+Spring2+Hibernate3 图书治理</html>
转 Struts2+Spring2+Hibernate3 图书治理

/WebRoot/list.jsp

(1)、<s:property> :得到'value'的属性,如果value没提供,默认为堆栈顶端的元素。其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

default

String

如果属性是null则显示的default值

escape

true

Booelean

是否escape HTML

value

栈顶

Object

要显示的值

id

Object/String

用来标识元素的id。在UI和表单中为HTML的id属性

(2)、<s:Iterator>:用于遍历集合(java.util.Collection)或枚举值(java.util.Iterator)。其相关的参数及使用如下表所示:??

名称

必需

默认

类型

描述

status

String

如果设置此参数,一个IteratorStatus的实例将会压入每个遍历的堆栈

value

Object/String

要遍历的可枚举的(iteratable)数据源,或者将放入新列表(List)的对象

id

Object/String

用来标识元素的id。在UI和表单中为HTML的id属性

(3)、<s:param>:为其他标签提供参数,比如include标签和bean标签.?参数的name属性是可选的,如果提供,会调用Component的方法addParameter(String, Object),?如果不提供,则外层嵌套标签必须实现UnnamedParametric接口(如TextTag)。?value的提供有两种方式,通过value属性或者标签中间的text,不同之处我们看一下例子:

<param name="color">blue</param><!-- (A) -->

<param name="color" value="blue"/><!-- (B) -->
(A)参数值会以String的格式放入statck.?
(B)该值会以java.lang.Object的格式放入statck.

其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

name

String

参数名

value

String

value表达式

id

Object/String

用来标识元素的id。在UI和表单中为HTML的id属性

(4)、国际化是商业系统中不可或缺的一部分,所以无论您学习的是什么Web框架,它都是必须掌握的技能。其实,Struts 1.x在此部分已经做得相当不错了。它极大地简化了我们程序员在做国际化时所需的工作,例如,如果您要输出一条国际化的信息,只需在代码包中加入FILE-NAME_xx_XX.properties(其中FILE-NAME为默认资源文件的文件名),然后在struts-config.xml中指明其路径,再在页面用<bean:message>标志输出即可。

不过,所谓“没有最好,只有更好”。Struts 2.0并没有在这部分止步,而是在原有的简单易用的基础上,将其做得更灵活、更强大。

(5)、list.jsp文件中:

<s:text name="format.date"><s:param value="bookDate"/></s:text>,为了正确的输出出版日期的格式,采用在资源文件中定义输出的格式,并在页面上调用。format.date就是在资源文件com.sterning.books.web.actions.BooksAction.properties中定义。当然也可以别的文件,放在别的路径下,但此时需要在web.xml中注册才可以使用它。

正如读者所见,在pojo(本例为Books.java)中将日期字段设置为java.util.Date,在映射文件中(books.hbm.xml)设置为timestamp(包括日期和时间)。为了便于管理,将日期格式保存在国际化资源文件中。如:globalMessages或globalMessages_zh_CN文件。

其内容为:

format.date={0,date,yyyy-MM-dd}

在页面显示日期时间时:<s:text name="format.date"><s:param value="bookDate"/></s:text>。这样就解决了日期(时间)的显示格式化问题。

?

3、增加/修改页面:editBook.jsp?

?

?

转 Struts2+Spring2+Hibernate3 图书治理<%@page?pageEncoding="UTF-8"?contentType="text/html;?charset=UTF-8"?%>
转 Struts2+Spring2+Hibernate3 图书治理<%@?taglib?prefix="s"?uri="/struts-tags"?%>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<html>
转 Struts2+Spring2+Hibernate3 图书治理<head>
转 Struts2+Spring2+Hibernate3 图书治理????<title>编辑图书</title>
转 Struts2+Spring2+Hibernate3 图书治理????<s:head/>
转 Struts2+Spring2+Hibernate3 图书治理</head>
转 Struts2+Spring2+Hibernate3 图书治理<body>
转 Struts2+Spring2+Hibernate3 图书治理????<h2>
转 Struts2+Spring2+Hibernate3 图书治理????????<s:if?test="null?==?book">
转 Struts2+Spring2+Hibernate3 图书治理????????????增加图书
转 Struts2+Spring2+Hibernate3 图书治理????????</s:if>
转 Struts2+Spring2+Hibernate3 图书治理????????<s:else>
转 Struts2+Spring2+Hibernate3 图书治理????????????编辑图书
转 Struts2+Spring2+Hibernate3 图书治理????????</s:else>
转 Struts2+Spring2+Hibernate3 图书治理????</h2>
转 Struts2+Spring2+Hibernate3 图书治理????<s:form?name="editForm"?action="save"?validate="true">
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="书名"?name="book.bookName"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="作者"?name="book.bookAuthor"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="出版社"?name="book.bookPublish"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:datetimepicker?label="出版日期"?name="book.bookDate"></s:datetimepicker>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="ISBN"?name="book.bookIsbn"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="页数"?name="book.bookPage"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="价格(元)"?name="book.bookPrice"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:textfield?label="内容摘要"?name="book.bookContent"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:if?test="null?==?book">
转 Struts2+Spring2+Hibernate3 图书治理?????????????<s:hidden?name="book.bookId"?value="%{bookId}"/>
转 Struts2+Spring2+Hibernate3 图书治理?????????</s:if>?????????
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:else>
转 Struts2+Spring2+Hibernate3 图书治理?????????????<s:hidden?name="book.bookId"?/>
转 Struts2+Spring2+Hibernate3 图书治理?????????</s:else>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:hidden?name="queryName"?/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:hidden?name="queryValue"?/>
转 Struts2+Spring2+Hibernate3 图书治理?????????<s:submit?value="%{getText('保存')}"?/>
转 Struts2+Spring2+Hibernate3 图书治理????</s:form>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<p><a?href="<s:url?action="list"/>">返回</a></p>
转 Struts2+Spring2+Hibernate3 图书治理</body>
转 Struts2+Spring2+Hibernate3 图书治理</html>
转 Struts2+Spring2+Hibernate3 图书治理

?


WebRoot/editBook.jsp

(1)、<s:if>、<s:elseif>和<s:else>?:执行基本的条件流转。其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

备注

test

?

Boolean

决定标志里内容是否显示的表达式

else标志没有这个参数

id

?

Object/String

用来标识元素的id。在UI和表单中为HTML的id属性

?

(2)、<s:text>:支持国际化信息的标签。国际化信息必须放在一个和当前action同名的resource bundle中,如果没有找到相应message,tag body将被当作默认message,如果没有tag body,message的name会被作为默认message。其相关的参数及使用如下表所示:

名称

必需

默认

类型

描述

name

?

String

资源属性的名字

id

?

Object/String

用来标识元素的id。在UI和表单中为HTML的id属性

八、???????配置Struts2

?

Struts的配置文件都会在web.xml中注册的。

a)????????Struts的配置文件如下:

?

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="UTF-8"??>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?struts?PUBLIC
转 Struts2+Spring2+Hibernate3 图书治理????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
转 Struts2+Spring2+Hibernate3 图书治理????"http://struts.apache.org/dtds/struts-2.0.dtd">
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<struts>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<constant?name="struts.enable.DynamicMethodInvocation"?value="false"?/>
转 Struts2+Spring2+Hibernate3 图书治理????<constant?name="struts.devMode"?value="true"?/>
转 Struts2+Spring2+Hibernate3 图书治理????<constant?name="struts.i18n.encoding"?value="GBK"?/>???
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<!--?Add?packages?here?-->
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理</struts>
转 Struts2+Spring2+Hibernate3 图书治理

?

Src/struts.xml

b)????????struts_book.xml配置文件如下:

?

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="UTF-8"??>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?struts?PUBLIC
转 Struts2+Spring2+Hibernate3 图书治理????????"-//Apache?Software?Foundation//DTD?Struts?Configuration?2.0//EN"
转 Struts2+Spring2+Hibernate3 图书治理????????"http://struts.apache.org/dtds/struts-2.0.dtd">
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<struts>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<package?name="products"?extends="struts-default">
转 Struts2+Spring2+Hibernate3 图书治理????????<!--default-interceptor-ref?name="validation"/-->
转 Struts2+Spring2+Hibernate3 图书治理?????????<!--?Add?actions?here?-->
转 Struts2+Spring2+Hibernate3 图书治理????????<action?name="list"?class="bookAction"?method="list">????????????
转 Struts2+Spring2+Hibernate3 图书治理????????????<result>/list.jsp</result>
转 Struts2+Spring2+Hibernate3 图书治理????????</action>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<action?name="delete"?class="bookAction"?method="delete">????????????
转 Struts2+Spring2+Hibernate3 图书治理????????????<result?type="redirect">list.action?queryMap=${queryMap}</result>
转 Struts2+Spring2+Hibernate3 图书治理????????</action>
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????????<action?name="*"?class="com.sterning.commons.AbstractAction">
转 Struts2+Spring2+Hibernate3 图书治理????????????<result>/{1}.jsp</result>
转 Struts2+Spring2+Hibernate3 图书治理????????</action>
转 Struts2+Spring2+Hibernate3 图书治理????????
转 Struts2+Spring2+Hibernate3 图书治理????<action?name="edit"?class="bookAction"?method="load">
转 Struts2+Spring2+Hibernate3 图书治理????????????<result>/editBook.jsp</result>
转 Struts2+Spring2+Hibernate3 图书治理????????</action>
转 Struts2+Spring2+Hibernate3 图书治理???????
转 Struts2+Spring2+Hibernate3 图书治理???????<action?name="save"?class="bookAction"?method="save">
转 Struts2+Spring2+Hibernate3 图书治理???????????<interceptor-ref?name="params"/>
转 Struts2+Spring2+Hibernate3 图书治理???????????<interceptor-ref?name="validation"/>
转 Struts2+Spring2+Hibernate3 图书治理????????????<result?name="input">/editBook.jsp</result>
转 Struts2+Spring2+Hibernate3 图书治理????????????<result?type="redirect">list.action?queryMap=${queryMap}</result>
转 Struts2+Spring2+Hibernate3 图书治理??????????????
转 Struts2+Spring2+Hibernate3 图书治理????????</action>
转 Struts2+Spring2+Hibernate3 图书治理????</package>
转 Struts2+Spring2+Hibernate3 图书治理</struts>
转 Struts2+Spring2+Hibernate3 图书治理

?

文件中的<interceptor-ref name="params"/>,使用了struts2自己的拦截器,拦截器在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。

Struts 2已经提供了丰富多样的,功能齐全的拦截器实现。大家可以到struts2-all-2.0.6.jar或struts2-core-2.0.6.jar包的struts-default.xml查看关于默认的拦截器与拦截器链的配置。

在struts-default.xml中已经配置了大量的拦截器。如果您想要使用这些已有的拦截器,只需要在应用程序struts.xml文件中通过“<include file="struts-default.xml" />”将struts-default.xml文件包含进来,并继承其中的struts-default包(package),最后在定义Action时,使用“<interceptor-ref name="xx" />”引用拦截器或拦截器栈(interceptor stack)。一旦您继承了struts-default包(package),所有Action都会调用拦截器栈?——defaultStack。当然,在Action配置中加入“<interceptor-ref name="xx" />”可以覆盖defaultStack。

作为“框架(framework)”,可扩展性是不可或缺的,因为世上没有放之四海而皆准的东西。虽然,Struts 2为我们提供如此丰富的拦截器实现,但是这并不意味我们失去创建自定义拦截器的能力,恰恰相反,在Struts 2自定义拦截器是相当容易的一件事。所有的Struts 2的拦截器都直接或间接实现接口com.opensymphony.xwork2.interceptor.Interceptor。除此之外,大家可能更喜欢继承类com.opensymphony.xwork2.interceptor.AbstractInterceptor。

?

九、???????配置Spring

?

1、Spring的配置文件如下:

?

转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="UTF-8"?>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
转 Struts2+Spring2+Hibernate3 图书治理?
转 Struts2+Spring2+Hibernate3 图书治理<beans>
转 Struts2+Spring2+Hibernate3 图书治理????<!--?dataSource?config?-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id?="dataSource"?class?="org.apache.commons.dbcp.BasicDataSource"?destroy-method="close">?
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="driverClassName"?value="com.mysql.jdbc.Driver"?/>?
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="url"?value="jdbc:mysql://localhost:3306/game"?/>?
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="username"?value="root"?/>?
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="password"?value="root"/>?
转 Struts2+Spring2+Hibernate3 图书治理????</bean>?
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?SessionFactory?-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="sessionFactory"
转 Struts2+Spring2+Hibernate3 图书治理????????class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="dataSource">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?bean="dataSource"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="configLocation">
转 Struts2+Spring2+Hibernate3 图书治理????????????<value>classpath:com\sterning\bean\hibernate\hibernate.cfg.xml</value>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>????????
转 Struts2+Spring2+Hibernate3 图书治理????</bean>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?TransactionManager??不过这里暂时没注入-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="transactionManager"
转 Struts2+Spring2+Hibernate3 图书治理????????class="org.springframework.orm.hibernate3.HibernateTransactionManager">
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="sessionFactory">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?local="sessionFactory"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????</bean>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?DAO?-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="booksDao"?class="com.sterning.books.dao.hibernate.BooksMapDao">
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="sessionFactory">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?bean="sessionFactory"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????</bean>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?Services?-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="booksService"?class="com.sterning.books.services.BooksService">
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="booksDao">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?bean="booksDao"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????</bean>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="pagerService"?class="com.sterning.commons.PagerService"/>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?view?-->
转 Struts2+Spring2+Hibernate3 图书治理????<bean?id="bookAction"?class="com.sterning.books.web.actions.BooksAction"?singleton="false">
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="booksService">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?bean="booksService"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????????<property?name="pagerService">
转 Struts2+Spring2+Hibernate3 图书治理????????????<ref?bean="pagerService"/>
转 Struts2+Spring2+Hibernate3 图书治理????????</property>
转 Struts2+Spring2+Hibernate3 图书治理????</bean>??
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理</beans>
转 Struts2+Spring2+Hibernate3 图书治理


? WebRoot/WEB-INF/srping-content/applicationContent.xml

2、Struts.properties.xml

本来此文件应该写在struts?配置一节,但主要是考虑这体现了集成spring的配置,所以放在spring的配置这里来讲。

?

转 Struts2+Spring2+Hibernate3 图书治理struts.objectFactory?=?spring??
转 Struts2+Spring2+Hibernate3 图书治理struts.locale=zh_CN
转 Struts2+Spring2+Hibernate3 图书治理struts.i18n.encoding?=?GBK
转 Struts2+Spring2+Hibernate3 图书治理

?

struts.objectFactory:ObjectFactory?实现了?com.opensymphony.xwork2.ObjectFactory接口(spring)。struts.objectFactory=spring,主要是告知Struts 2运行时使用Spring来创建对象(如Action等)。当然,Spring的ContextLoaderListener监听器,会在web.xml文件中编写,负责Spring与Web容器交互。

struts.locale:The default locale for the Struts application。?默认的国际化地区信息。

struts.i18n.encoding:国际化信息内码。

十、???????Web.xml配置

?

转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<?xml?version="1.0"?encoding="GB2312"?>
转 Struts2+Spring2+Hibernate3 图书治理<!DOCTYPE?web-app
转 Struts2+Spring2+Hibernate3 图书治理????PUBLIC?"-//Sun?Microsystems,?Inc.//DTD?Web?Application?2.3//EN"
转 Struts2+Spring2+Hibernate3 图书治理????"http://java.sun.com/dtd/web-app_2_3.dtd">
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理<web-app>
转 Struts2+Spring2+Hibernate3 图书治理????<display-name>图书管理系统</display-name>
转 Struts2+Spring2+Hibernate3 图书治理????<context-param>
转 Struts2+Spring2+Hibernate3 图书治理????????<param-name>log4jConfigLocation</param-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<param-value>/WEB-INF/classes/log4j.properties</param-value>
转 Struts2+Spring2+Hibernate3 图书治理????</context-param>
转 Struts2+Spring2+Hibernate3 图书治理????<!--?ContextConfigLocation?-->
转 Struts2+Spring2+Hibernate3 图书治理????<context-param>
转 Struts2+Spring2+Hibernate3 图书治理????????<param-name>contextConfigLocation</param-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<param-value>/WEB-INF/spring-context/applicationContext.xml</param-value>
转 Struts2+Spring2+Hibernate3 图书治理??????</context-param>
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<filter>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-name>encodingFilter</filter-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-class>com.sterning.commons.SetCharacterEncodingFilter</filter-class>
转 Struts2+Spring2+Hibernate3 图书治理????????<init-param>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-name>encoding</param-name>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-value>UTF-8</param-value>
转 Struts2+Spring2+Hibernate3 图书治理????????</init-param>
转 Struts2+Spring2+Hibernate3 图书治理????????<init-param>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-name>forceEncoding</param-name>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-value>true</param-value>
转 Struts2+Spring2+Hibernate3 图书治理????????</init-param>
转 Struts2+Spring2+Hibernate3 图书治理????</filter>
转 Struts2+Spring2+Hibernate3 图书治理?????<filter>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-name>struts2</filter-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
转 Struts2+Spring2+Hibernate3 图书治理????????<init-param>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-name>config</param-name>
转 Struts2+Spring2+Hibernate3 图书治理????????????<param-value>struts-default.xml,struts-plugin.xml,struts.xml,struts_books.xml</param-value>
转 Struts2+Spring2+Hibernate3 图书治理????????</init-param>
转 Struts2+Spring2+Hibernate3 图书治理????</filter>????
转 Struts2+Spring2+Hibernate3 图书治理
转 Struts2+Spring2+Hibernate3 图书治理????<filter-mapping>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-name>encodingFilter</filter-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<url-pattern>/*</url-pattern>
转 Struts2+Spring2+Hibernate3 图书治理????</filter-mapping>
转 Struts2+Spring2+Hibernate3 图书治理????<filter-mapping>
转 Struts2+Spring2+Hibernate3 图书治理????????<filter-name>struts2</filter-name>
转 Struts2+Spring2+Hibernate3 图书治理????????<url-pattern>/*</url-pattern>
转 Struts2+Spring2+Hibernate3 图书治理????</filter-mapping>????????
转 Struts2+Spring2+Hibernate3 图书治理????
转 Struts2+Spring2+Hibernate3 图书治理????<!--?Listener?contextConfigLocation?-->
转 Struts2+Spring2+Hibernate3 图书治理??????<listener>
转 Struts2+Spring2+Hibernate3 图书治理????????<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
转 Struts2+Spring2+Hibernate3 图书治理??????</listener>
转 Struts2+Spring2+Hibernate3 图书治理????<!--?Listener?log4jConfigLocation?-->
转 Struts2+Spring2+Hibernate3 图书治理??????<listener>
转 Struts2+Spring2+Hibernate3 图书治理????????<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
转 Struts2+Spring2+Hibernate3 图书治理??????</listener>
转 Struts2+Spring2+Hibernate3 图书治理?
转 Struts2+Spring2+Hibernate3 图书治理????<!--?The?Welcome?File?List?-->
转 Struts2+Spring2+Hibernate3 图书治理????<welcome-file-list>
转 Struts2+Spring2+Hibernate3 图书治理????????<welcome-file>index.jsp</welcome-file>
转 Struts2+Spring2+Hibernate3 图书治理????</welcome-file-list>
转 Struts2+Spring2+Hibernate3 图书治理</web-app>
转 Struts2+Spring2+Hibernate3 图书治理

?

在Struts 2中,配置有少许改变,最明显的是分发器(dispatcher)已由Servlet转为Servlet Filter,?其配置和Servlet一样简单。和Servlet配置一样,Filter配置中定义了Filter的名称(作为引用)和类名。Filter Mapping通过URI和名称匹配来调用相应的Filter。默认情况下,扩展名为“.action”,这是在default.properties文件(在Struts 2 JAR文件里)的“struts.action.extension”属性定义的。


十一、???????运行结果

1、主页面

转 Struts2+Spring2+Hibernate3 图书治理
?

2、图书列表页面

转 Struts2+Spring2+Hibernate3 图书治理
?

3、增加页面

转 Struts2+Spring2+Hibernate3 图书治理
?

4、修改页面

转 Struts2+Spring2+Hibernate3 图书治理

?

十二、???????总结

从上面的struts2.0.6+spring2.0.6+hibernate3.1的示例代码可以看出,从struts1过渡到Struts2的时候,发现非常方便,标签变得更加的简洁,从而使代码量简缩了,同时整个体系沿用了webwork的精华和struts1的精髓,Struts2的Action不再依耐于Servlet容器,从而可以进行单独的测试。另外对于表达式语言方面,不仅支持原有的JSTL,还支持OGNL(全称是Object Graph Notation Language)。在校验方面,没有再直接使用Common-validator,用的是xwork框架校验。其实说这些,主要把webwork2的特性简单描述一下而已,话说回来,发现struts2跟ajax的某些框架结合得不好,比如流行的dwr,连最简单的页面theme都用不了ajax,这个问题主要出在模版上面,具体位置在Struts2-core-2.0.6.jar包的template/ajax里面的form-close.ftl等几个文件的代码有bug,比如dojo.widget.html.Tooltip问题,是没有这个属性的,应为dojo.widget.Tooltip,这个已经在官方的bug跟踪系统提出了,官方说会在2.1版本时解决(其实在Struts2.0.8中已经有解决的痕迹了)。当然,还有其他一系列的bug,不过大体沿用了webwork2的东西,拿官方说:?struts2 = webwork2 +?struts?。

读书人网 >软件架构设计

热点推荐