Struts2+Spring2+Hibernate3 web应用示例(一)

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

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

一、 准备工作

spring21.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 web应用示例(一)_第1张图片
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

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

二、 建立公共类

1AbstractAction

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

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

package com.sterning.commons;

import com.opensymphony.xwork2.ActionSupport;

public class AbstractAction extends ActionSupport {
}

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

2Pager分页类

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

package com.sterning.commons;

import java.math. * ;

public class Pager {
private int totalRows; //总行数
private int pageSize = 5; //每页显示的行数
private int currentPage; //当前页号
private int totalPages; //总页数
private int startRow; //当前页在数据库中的起始行

public Pager() {
}


public Pager(int _totalRows) {
totalRows
= _totalRows;
totalPages
=totalRows/pageSize;
int mod=totalRows%pageSize;
if(mod<0){
totalPages
++;
}

currentPage
= 1;
startRow
= 0;
}


public int getStartRow() {
return startRow;
}

public int getTotalPages() {
return totalPages;
}

public int getCurrentPage() {
return currentPage;
}

public int getPageSize() {
return pageSize;
}

public void setTotalRows(int totalRows) {
this.totalRows = totalRows;
}

public void setStartRow(int startRow) {
this.startRow = startRow;
}

public void setTotalPages(int totalPages) {
this.totalPages = totalPages;
}

public void setCurrentPage(int currentPage) {
this.currentPage = currentPage;
}

public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}

public int getTotalRows() {
return totalRows;
}

public void first() {
currentPage
= 1;
startRow
= 0;
}

public void previous() {
if (currentPage == 1) {
return;
}

currentPage
--;
startRow
= (currentPage - 1) * pageSize;
}

public void next() {
if (currentPage > totalPages) {
currentPage
++;
}

startRow
= (currentPage - 1) * pageSize;
}

public void last() {
currentPage
= totalPages;
startRow
= (currentPage - 1) * pageSize;
}

public void refresh(int _currentPage) {
currentPage
= _currentPage;
if (currentPage < totalPages) {
last();
}

}

}

com.sterning.commons.Pager.java

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

同时,采用PagerService类来发布成为分页类服务PagerService,代码如下:
package com.sterning.commons;

public class PagerService {
public Pager getPager(String currentPage,String pagerMethod,int totalRows) {
// 定义pager对象,用于传到页面
Pager pager = new Pager(totalRows);
// 如果当前页号为空,表示为首次查询该页
// 如果不为空,则刷新pager对象,输入当前页号等信息
if (currentPage != null) {
pager.refresh(Integer.parseInt(currentPage));
}

// 获取当前执行的方法,首页,前一页,后一页,尾页。
if (pagerMethod != null) {
if (pagerMethod.equals("first")) {
pager.first();
}
else if (pagerMethod.equals("previous")) {
pager.previous();
}
else if (pagerMethod.equals("next")) {
pager.next();
}
else if (pagerMethod.equals("last")) {
pager.last();
}

}

return pager;
}

}

com.sterning.commons.PagerService.java

未完待续,下节开始编写数据持久化层.........

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1816070


你可能感兴趣的:(Struts2+Spring2+Hibernate3 web应用示例(一))