SSH框架用例.docx
- 文档编号:9819893
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:62
- 大小:36.02KB
SSH框架用例.docx
《SSH框架用例.docx》由会员分享,可在线阅读,更多相关《SSH框架用例.docx(62页珍藏版)》请在冰点文库上搜索。
SSH框架用例
Struts2.0、Spring3.0和Hibernate2.0应用实例
Struts2.0作为MVC2的Web框架,自推出以来不断受到开发者的追捧,得到广泛的应用。
作为最成功的Web框架,Struts自然拥有众多的优点:
MVC2模型的使用、功能齐全的标志库(TagLibrary)、开放源代码。
而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,算是升级到spring2.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的下载地址为:
http:
//people.apache.org/builds/struts/2.0.6
Hibernate3.1的下载地址为:
http:
//www.hibernate.org
spring2.0.6的下载地址为:
http:
//www.springframework.org
使用的数据库为mysql5.0,使用的JDBC驱动JAR包为:
mysql-connection-java-5.0.4-bin
创建数据表的sql语句为:
createdatabasegame
CREATETABLE`books`(
`book_id`int(11)NOTNULLdefault'0',
`book_name`varchar(200)charactersetgb2312defaultNULL,
`book_author`varchar(100)charactersetgb2312defaultNULL,
`book_publish`varchar(100)charactersetgb2312defaultNULL,
`book_date`datedefaultNULL,
`book_isbn`varchar(20)defaultNULL,
`book_page`int(11)defaultNULL,
`book_price`decimal(10,2)defaultNULL,
`book_content`varchar(100)charactersetgb2312defaultNULL,
PRIMARYKEY(`book_id`)
)ENGINE=InnoDBDEFAULTCHARSET=gbkROW_FORMAT=COMPRESSED;
二、建立公共类
1、AbstractAction类
Struts2和Struts1.x的差别,最明显的就是Struts2是一个pull-MVC架构。
Struts1.x必须继承org.apache.struts.action.Action或者其子类,表单数据封装在FormBean中。
Struts2无须继承任何类型或实现任何接口,表单数据包含在Action中,通过Getter和Setter获取。
虽然,在理论上Struts2的Action无须实现任何接口或者是继承任何的类,但是,在实际编程过程中,为了更加方便的实现Action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并且重载(Override)此类里的Stringexecute()方法。
因此先建立抽象类,以供其它Action类使用。
packagemons;
importcom.opensymphony.xwork2.ActionSupport;
publicclassAbstractActionextendsActionSupport{
}
mons.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分页类
为了增加程序的分页功能,特意建立共用的分页类。
packagemons;
importjava.math.*;
publicclassPager{
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 currentPage++; } startRow=(currentPage-1)*pageSize; } publicvoidlast(){ currentPage=totalPages; startRow=(currentPage-1)*pageSize; } publicvoidrefresh(int_currentPage){ currentPage=_currentPage; if(currentPage>totalPages){ last(); } } } mons.Pager.java 同时,采用PagerService类来发布成为分页类服务PagerService,代码如下: packagemons; publicclassPagerService{ 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; } } mons.PagerService.java 三、建立数据持久化层 1、编写实体类Books及books.hbm.xml映射文件。 packagecom.sterning.books.model; importjava.util.Date; publicclassBooks{ //Fields privateStringbookId;//编号 privateStringbookName;//书名 privateStringbookAuthor;//作者 privateStringbookPublish;//出版社 privateDatebookDate;//出版日期 privateStringbookIsbn;//ISBN privateStringbookPage;//页数 privateStringbookPrice;//价格 privateStringbookContent;//内容提要 //Constructors publicBooks(){} //Propertyaccessors publicStringgetBookId(){ returnbookId; } publicvoidsetBookId(StringbookId){ this.bookId=bookId; } publicStringgetBookName(){ returnbookName; } publicvoidsetBookName(StringbookName){ this.bookName=bookName; } publicStringgetBookAuthor(){ returnbookAuthor; } publicvoidsetBookAuthor(StringbookAuthor){ this.bookAuthor=bookAuthor; } publicStringgetBookContent(){ returnbookContent; } publicvoidsetBookContent(StringbookContent){ this.bookContent=bookContent; } publicDategetBookDate(){ returnbookDate; } publicvoidsetBookDate(DatebookDate){ this.bookDate=bookDate; } publicStringgetBookIsbn(){ returnbookIsbn; } publicvoidsetBookIsbn(StringbookIsbn){ this.bookIsbn=bookIsbn; } publicStringgetBookPage(){ returnbookPage; } publicvoidsetBookPage(StringbookPage){ this.bookPage=bookPage; } publicStringgetBookPrice(){ returnbookPrice; } publicvoidsetBookPrice(StringbookPrice){ this.bookPrice=bookPrice; } publicStringgetBookPublish(){ returnbookPublish; } publicvoidsetBookPublish(StringbookPublish){ this.bookPublish=bookPublish; } } com.sterning.books.model.Books.java 接下来要把实体类Books的属性映射到books表,编写下面的books.hbm.xml文件: xmlversion="1.0"? > DOCTYPEhibernate-mappingPUBLIC"-//Hibernate/HibernateMappingDTD3.0//EN" " com.sterning.books.model.books.hbm.xml 2、hibernate.cfg.xml配置文件如下: (注意它的位置在scr/hibernate.cfg.xml) xmlversion="1.0"encoding="ISO-8859-1"? > DOCTYPEhibernate-configurationPUBLIC "-//Hibernate/HibernateConfigurationDTD3.0//EN" " Com.sterning.bean.hibernate.hibernate.cfg.xml 四、建立DAO层 DAO访问层负责封装底层的数据访问细节,不仅可以使概念清晰,而且可以提高开发效率。 1、建立DAO的接口类: BooksDao packagecom.sterning.books.dao.iface; importjava.util.List; importcom.sterning.books.model.Books; publicinterfaceBooksDao{ ListgetAll();//获得所有记录 ListgetBooks(intpageSize,intstartRow);//获得所有记录 intgetRows();//获得总行数 intgetRows(Stringfieldname,Stringvalue);//获得总行数 ListqueryBooks(Stringfieldname,Stringvalue);//根据条件查询 ListgetBooks(Stringfieldname,Stringvalue,intpageSize,intstartRow);//根据条件查询 BooksgetBook(StringbookId);//根据ID获得记录 StringgetMaxID();//获得最大ID值 voidaddBook(Booksbook);//添加记录 voidupdateBook(Booksbook);//修改记录 voiddeleteBook(Booksbook);//删除记录 } com.sterning.books.dao.iface.BooksDao.java 2、实现此接口的类文件,BooksMapDao packagecom.sterning.books.dao.hibernate; importjava.sql.SQLException; importjava.util.Iterator; importjava.util.List; importorg.hibernate.HibernateException; importorg.hibernate.Query; importorg.hibernate.Session; importorg.springframework.orm.hibernate3.HibernateCallback; importorg.springframework.orm.hibernate3.support.HibernateDaoSupport; importcom.sterning.books.dao.iface.BooksDao; importcom.sterning.books.model.Books; importmons.PublicUtil; /** *@authorcwf * */ publicclassBooksMapDaoextendsHibernateDaoSupportimplementsBooksDao{ publicBooksMapDao(){} /** *函数说明: 添加信息 *参数说明: 对象 *返回值: */ publicvoidaddBook(Booksbook){ this.getHibernateTe
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SSH 框架