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

Struts作为MVC 2Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。作为最成功的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值