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

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的下载地址为:
Hibernate3.1的下载地址为:
spring2.0.6的下载地址为:
使用的数据库为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 = gbkROW_FORMAT = COMPRESSED;

二、 建立公共类
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
package com.sterning.commons;

import com.opensymphony.xwork2.ActionSupport;

public class AbstractAction extends ActionSupport {
}

com.sterning.commons.AbstractAction.java
参考 JavaDoc ,可知 ActionSupport 类实现了接口:
com.uwyn.rife.continuations.ContinuableObject
2 、Pager 分页类
为了增加程序的分页功能,特意建立共用的分页类。
package com.sterning.commons;

import java.math. * ;

public class Pager {
privateinttotalRows;//总行数
privateintpageSize=5;//每页显示的行数
privateintcurrentPage;//当前页号
privateinttotalPages;//总页数
privateintstartRow;//当前页在数据库中的起始行

publicPager(){
}


publicPager(int_totalRows){
totalRows
=_totalRows;
totalPages
=totalRows/pageSize;
intmod=totalRows%pageSize;
if(mod>0){
totalPages
++;
}

currentPage
=1;
startRow
=0;
}


publicintgetStartRow(){
returnstartRow;
}

publicintgetTotalPages(){
returntotalPages;
}

publicintgetCurrentPage(){
returncurrentPage;
}

publicintgetPageSize(){
returnpageSize;
}

publicvoidsetTotalRows(inttotalRows){
this.totalRows=totalRows;
}

publicvoidsetStartRow(intstartRow){
this.startRow=startRow;
}

publicvoidsetTotalPages(inttotalPages){
this.totalPages=totalPages;
}

publicvoidsetCurrentPage(intcurrentPage){
this.currentPage=currentPage;
}

publicvoidsetPageSize(intpageSize){
this.pageSize=pageSize;
}

publicintgetTotalRows(){
returntotalRows;
}

publicvoidfirst(){
currentPage
=1;
startRow
=0;
}

publicvoidprevious(){
if(currentPage==1){
return;
}

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

publicvoidnext(){
if(currentPage<totalPages){
currentPage
++;
}

startRow
=(currentPage-1)*pageSize;
}

publicvoidlast(){
currentPage
=totalPages;
startRow
=(currentPage-1)*pageSize;
}

publicvoidrefresh(int_currentPage){
currentPage
=_currentPage;
if(currentPage>totalPages){
last();
}

}

}

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

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

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

}

returnpager;
}

}

com.sterning.commons.PagerService.java

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

你可能感兴趣的:(hibernate3)