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 = gbk ROW_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  {
    
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

未完待续,下节开始编写数据持久化层......... 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值